Source code for twinlab.project
from typing import List
from typeguard import typechecked
from . import _api, _utils
[docs]
@typechecked
def list_projects(verbose: bool = False) -> List[str]:
"""List projects that you own or are a part of.
Projects can be used to group related datasets, emulators, and share them with other users.
Projects can be created using the ``tl.create_project`` function.
Args:
verbose (bool, optional): Display information about the operation while running.
Returns:
list: Projects currently available to the user.
Example:
.. code-block:: python
projects = tl.list_projects()
print(projects)
.. code-block:: console
['biscuits', 'gardening', 'force-energy', 'combusion']
"""
_, response = _api.get_projects()
projects = response["projects"]
projects = [project["name"] for project in projects]
if verbose:
print("Projects:")
print(projects, compact=True, sort_dicts=False)
return projects
[docs]
@typechecked
def create_project(project_id: str, verbose: bool = False) -> None:
"""Create a new project.
Projects can be used to group related datasets, emulators, and share them with other users.
Projects can be shared with other users using the ``tl.share_project`` function.
Args:
project_id (str): The name of the project in the twinLab cloud. You cannot create a project with the same id as an existing project.
Returns:
None
"""
_, response = _api.post_project(project_id)
if verbose:
print(f"Project {project_id} created.")
return None
[docs]
@typechecked
def delete_project(project_id: str, verbose: bool = False) -> None:
"""Delete a project that you are the owner of.
You can only delete a project if you are the owner.
Args:
project_id (str): The name of the project in the twinLab cloud.
Returns:
None
"""
project_id = _utils.match_project(project_id, project_owner_email=None)
_, response = _api.delete_project(project_id)
if verbose:
print(f"Project {project_id} deleted.")
return None
[docs]
@typechecked
def share_project(project_id: str, user: str, role: str, verbose: bool = False) -> None:
"""Share a project with another user.
You must be the project owner to add users to the project.
Args:
project_id (str): The name of the project in the twinLab cloud.
user (str): The email of the user to share the project with.
role (str): The role of the user in the project. Can be either "member" or "admin".
Returns:
None
"""
_, user_account = _api.get_account(user)
project_id = _utils.match_project(project_id, None)
_, response = _api.post_project_members_account(
project_id, user_account["_id"], role
)
if verbose:
print(f"Project {project_id} shared with user {user}")
return None
[docs]
@typechecked
def unshare_project(project_id: str, user: str, verbose: bool = False) -> None:
"""Remove a user from a project.
You must be the project owner to remove users from the project.
Args:
project_id (str): The name of the project in the twinLab cloud.
user (str): The email of the user to remove from the project.
Returns:
None
"""
_, user_account = _api.get_account(user)
project_id = _utils.match_project(project_id)
_, response = _api.delete_project_members_account(project_id, user_account["_id"])
if verbose:
print(f"User {user} removed from project {project_id}")
return None