"""Client API for teams in Nexus."""importqnexus.exceptionsasqnx_excfromqnexus.clientimportget_nexus_clientfromqnexus.contextimportmerge_scope_from_contextfromqnexus.models.referencesimportDataframableList,TeamReffromqnexus.models.scopeimportScopeFilterEnum
[docs]@merge_scope_from_contextdefget_all(scope:ScopeFilterEnum=ScopeFilterEnum.USER)->DataframableList[TeamRef]:"""Get all teams. Examples: >>> import qnexus as qnx >>> all_teams = qnx.teams.get_all() >>> all_teams.df() """res=get_nexus_client().get("/api/teams/v1beta2",params={"scope":scope.value},)ifres.status_code!=200:raiseqnx_exc.ResourceFetchFailed(message=res.text,status_code=res.status_code)returnDataframableList([TeamRef(id=team["id"],name=team["attributes"]["name"],description=team["attributes"]["description"],)forteaminres.json()["data"]])
[docs]@merge_scope_from_contextdefget(name:str,scope:ScopeFilterEnum=ScopeFilterEnum.USER)->TeamRef:""" Get a single team using filters. Throws an exception if the filters do not match exactly one object. Examples: >>> import qnexus as qnx >>> team_ref = qnx.teams.get(name="my-team") """res=get_nexus_client().get("/api/teams/v1beta2",params={"filter[team][name]":name,"scope":scope.value,},)ifres.status_code==404orres.json()["data"]==[]:raiseqnx_exc.ZeroMatchesifres.status_code!=200:raiseqnx_exc.ResourceFetchFailed(message=res.text,status_code=res.status_code)teams_list=[TeamRef(id=team["id"],name=team["attributes"]["name"],description=team["attributes"]["description"],)forteaminres.json()["data"]]iflen(teams_list)>1:print(teams_list)raiseqnx_exc.NoUniqueMatchreturnteams_list[0]
@merge_scope_from_contextdef_fetch_by_id(team_id:str,scope:ScopeFilterEnum=ScopeFilterEnum.USER)->TeamRef:""" Get a single team by id. """res=get_nexus_client().get(f"/api/teams/v1beta2/{team_id}",params={"scope":scope.value},)ifres.status_code==404:raiseqnx_exc.ZeroMatchesifres.status_code!=200:raiseqnx_exc.ResourceFetchFailed(message=res.text,status_code=res.status_code)team_dict=res.json()["data"]returnTeamRef(id=team_dict["id"],name=team_dict["attributes"]["name"],description=team_dict["attributes"]["description"],)
[docs]defcreate(name:str,description:str|None=None)->TeamRef:"""Create a team in Nexus. Examples: >>> import qnexus as qnx >>> team_ref = qnx.teams.create(name="team-unobtainium", description="Team studying novel materials") """resp=get_nexus_client().post("/api/teams/v1beta2",json={"data":{"attributes":{"name":name,"description":description,"display_name":name,},"relationships":{},"type":"team",},},)ifresp.status_code!=201:raiseqnx_exc.ResourceCreateFailed(message=resp.text,status_code=resp.status_code)team_dict=resp.json()["data"]returnTeamRef(id=team_dict["id"],name=team_dict["attributes"]["name"],description=team_dict["attributes"]["description"],)