Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 89 additions & 2 deletions sedna_sdk/endpoints/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,92 @@ class UsersAPI:
def __init__(self, client):
self.client = client

def list(self):
return self.client._request("GET", "/user")
def list(self, page_limit=None, page_offset=None, sso_email=None, **kwargs):
"""
List users with optional filtering and pagination.

Args:
page_limit (int, optional): Number of results per page (defaults to 100)
page_offset (int, optional): Number of results to skip (defaults to 0)
sso_email (str, optional): Filter by SSO email address
**kwargs: Additional filter parameters

Returns:
List of user dictionaries
"""
params = {}

# Pagination parameters
if page_limit is not None:
params['page[limit]'] = page_limit
if page_offset is not None:
params['page[offset]'] = page_offset

# Filter parameters
if sso_email is not None:
params['filter[user.ssoEmail]'] = str(sso_email)

# Handle any additional filter parameters passed via kwargs
for key, value in kwargs.items():
if value is not None:
params[key] = str(value)

return self.client._request("GET", "/user", params=params)

def subscribe_to_job_reference(self, user_id: str, job_reference_id: str) -> dict:
"""
Subscribe a user to a job reference.

Args:
user_id: The user's ID
job_reference_id: The job reference ID

Returns:
Created subscription details
"""
data = {
"data": [
{
"id": job_reference_id,
"type": "job-reference"
}
]
}
endpoint = f"/user/{user_id}/relationships/job-reference"
return self.client._request("POST", endpoint, json=data)

def unsubscribe_from_job_reference(self, user_id: str, job_reference_id: str) -> bool:
"""
Unsubscribe a user from a job reference.

Args:
user_id: The user's ID
job_reference_id: The job reference ID

Returns:
True if successful
"""
data = {
"data": [
{
"id": job_reference_id,
"type": "job-reference"
}
]
}
endpoint = f"/user/{user_id}/relationships/job-reference"
self.client._request("DELETE", endpoint, json=data)
return True

def list_job_reference_subscriptions(self, user_id: str) -> list:
"""
List all job reference subscriptions for a user.

Args:
user_id: The user's ID

Returns:
List of job reference relationships
"""
endpoint = f"/user/{user_id}/relationships/job-reference"
return self.client._request("GET", endpoint)
10 changes: 8 additions & 2 deletions sedna_sdk/sedna_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ def __init__(self, status_code, message):

class SednaClient:
def __init__(self, subdomain, client_id, client_secret):
self.base_url = f"https://{subdomain}.sednanetwork.com/platform/2019-01-01"
if subdomain.startswith('http://') or subdomain.startswith('https://'):
self.base_url = subdomain.rstrip('/')
else:
self.base_url = f"https://{subdomain}.sednanetwork.com/platform/2019-01-01"
credentials = f"{client_id}:{client_secret}"
encoded = base64.b64encode(credentials.encode()).decode()
self.headers = {
Expand All @@ -29,6 +32,9 @@ def __init__(self, subdomain, client_id, client_secret):
self.comments = CommentsAPI(self)
self.job_references = JobReferencesAPI(self)

def set_base_url(self, base_url):
self.base_url = base_url.rstrip('/')

def _request(self, method, endpoint, **kwargs):
url = f"{self.base_url}{endpoint}"
response = requests.request(method, url, headers=self.headers, **kwargs)
Expand All @@ -37,4 +43,4 @@ def _request(self, method, endpoint, **kwargs):

if response.content:
return response.json()
return None
return None