Shortcuts

Source code for geodesic.account.organizations

from geodesic.bases import _APIObject
from geodesic.account.user import User
from geodesic import raise_on_error
from geodesic.descriptors import _IntDescr, _StringDescr
from geodesic.service import ServiceClient

from typing import Dict, List

# Organizations client
organizations_client = ServiceClient("krampus", 1, "organizations")


[docs]def get_organization(name: str = None): if name is None: raise ValueError("must provide organization name") res = raise_on_error(organizations_client.get(name)) p = res.json()["organization"] if p is None: return None return Organization(**p)
[docs]def get_organizations(): res = raise_on_error(organizations_client.get("")) return [Organization(**o) for o in res.json()["organizations"]]
[docs]class Organization(_APIObject): """ The Organization class to manage groups users Args: **organization: metadata about a particular Organization """ _limit_setitem = ["name", "alias", "description", "homepage", "total_seats"] name = _StringDescr(doc="name of this organization") alias = _StringDescr(doc="alias for this organization") description = _StringDescr(doc="description of this organization") homepage = _StringDescr(doc="homepage for this organization") total_seats = _IntDescr(doc="total number of user seats for this organization") def __init__(self, **organization): self._client = organizations_client for k, v in organization.items(): if k in ("name", "remaining_seats"): self._set_item(k, v) else: setattr(self, k, v)
[docs] def create(self) -> None: """ Creates a new Organization """ raise_on_error(self._client.post("", organization=self))
[docs] def delete(self) -> None: """ Deletes an Organization """ raise_on_error(self._client.delete(self.name))
[docs] def save(self) -> None: """ Updates an existing Organization """ raise_on_error(self._client.put(self.name, organization=self))
@property def members(self) -> Dict[str, User]: """ All of the members and admins """ res = raise_on_error(self._client.get(f"{self.name}/members")) return { "admins": [User(**m) for m in res.json().get("admins", [])], "members": [User(**m) for m in res.json().get("members", [])], }
[docs] def add_members(self, members: List[User] = [], admins: List[User] = []) -> None: """ Add members to this Organization Args: members: a list of users to give ordinary membership to admins: a list of users to give admin privileges to """ member_subjects = [] for member in members: if isinstance(member, str): member_subjects.append(member) elif isinstance(member, User): member_subjects.append(member.subject) admin_subjects = [] for admin in admins: if isinstance(admin, str): admin_subjects.append(admin) elif isinstance(admin, User): admin_subjects.append(admin.subject) raise_on_error( self._client.post( f"{self.name}/members", members=member_subjects, admins=admin_subjects ) )
[docs] def remove_member(self, u: User): """ Remove a member from this Organization Args: u: A User to remove """ raise_on_error(self._client.delete(f"{self.name}/{u.subject}"))
@property def remaining_seats(self): """ Gets the number of seats remaining in this Organization (total_seats - # of users) """ res = raise_on_error(self._client.get(self.name)) return res.json()["organization"].get("remaining_seats", 0)

Docs

Developer documentation for Seer AI APIs

View Docs

Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials

Resources

Find development resources and get your questions answered

View Resources