1.4. Teams
Teams were introduced to simplify securely sharing your assets across projects. All assets are owned by teams, including projects.
1.4.1. Basic Team Use
In the following examples, citrine
is the name of your Citrine
client
object.
After connecting to the Citrine Platform, you’ll most likely want to find a specific team. To list
all teams of which you are a member, use the list
method.
citrine.teams.list()
There are a few ways to find a specific team in this list.
# 1. Use a helper method from citrine.seeding.find_or_create, such as find_or_create_team.
from citrine.seeding.find_or_create import find_or_create_team
team_name = "Team A"
team_a = find_or_create_team(team_collection=citrine.teams, team_name=team_name)
# 2. If you have its unique ID, retrieve it directly.
team_a = citrine.teams.get("baaa467e-1758-43a8-97c7-76e569d0dcab")
Note that you can only retrieve a Team
of which you are a member.
1.4.2. Managing Users
Admins can manage user permissions in teams. Permissions replace the previous concept of roles.
There are three types of access permissions a user can have on a team: READ, SHARE, and WRITE.
READ allows a user to view resources in a team.
WRITE allows them to modify those resources.
SHARE allows them to publish those resources to other teams.
There are several methods for managing teams, users, and user membership in teams.
1.4.2.1. Listing Users in a Team
Users in a team can be listed using the list_members()
method,
which returns a TeamMember
array. Each TeamMember
contains the user’s access permissions,
a copy of the User
object, and a copy of the Team
object.
team = citrine.teams.register(name="Your Team")
# List Members of a team
team_members = team.list_members()
# See their actions
[(m.user.screen_name, m.actions) for m in team_members]
# or
[str(m) for m in team_members]
1.4.2.2. Add User to a Team
Users can be added to a team. They will be granted READ
access to resources in the team. This
is accomplished with the add_user()
method.
# Get the UUID of the user you'd like to add
user_id = "bed6f207-f15e-4aef-932d-87d99b2d6203"
team = citrine.teams.get("baaa467e-1758-43a8-97c7-76e569d0dcab")
# Add them to your team
team.add_user(user_id)
When adding a user to a team, you can specify the actions that user should have:
from citrine.resources.team import READ, WRITE, SHARE
# Add user to your team and give them read, write, and share permissions
team.add_user(user_id, actions=[READ, WRITE, SHARE])
1.4.2.3. Remove User from a Team
Users can also be removed from a team. This is achieved with the
remove_user()
method.
# Get the UUID of the user you'd like to delete
user_id = "bed6f207-f15e-4aef-932d-87d99b2d6203"
team = citrine.teams.get("baaa467e-1758-43a8-97c7-76e569d0dcab")
# Remove them from the team
team.remove_user(user_id)
1.4.2.4. Update User’s Actions in a Team
A user’s actions in a team can be updated. The method
update_user_actions()
facilitates changing a user’s actions.
from citrine.resources.team import READ, WRITE
user_id = "bed6f207-f15e-4aef-932d-87d99b2d6203"
team = citrine.teams.get("baaa467e-1758-43a8-97c7-76e569d0dcab")
# Make the user a member with read and write access
team.update_user_actions(user_uid=user_id, actions=[READ, WRITE])
1.4.2.5. Listing Publish Resources in a Team
Teams can list the published IDs for datasets, modules, tables and table definitions available in a team. Using the list_readable, list_writeable, or list_shareable methods to list IDs with these permissions. Note: these calls return a list of string uids, not the complete resource objects.
dataset_ids()
,
module_ids()
,
table_ids()
,
table_definition_ids()
.
team = citrine.teams.get("baaa467e-1758-43a8-97c7-76e569d0dcab")
project1 = team.projects.get("8ad2f784-5c49-45ad-b525-6af859651acf")
dataset_ids = team.module_ids.list_readable()
# Use one of the IDs to get a handle to the resource from it's origin project:
predictor = project1.predictors.get(dataset_ids[0])
# Pull this published resource into another project:
project2 = team.projects.get("9ecb5610-6f69-4175-a1f8-bbfd7d711826")
project2.pull_in_resource(resource=predictor)