latch_cli.utils package#

Submodules#

latch_cli.utils.ldata module#

class latch_cli.utils.ldata.LDataNodeType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]#

Bases: str, Enum

account_root = 'account_root'#
dir = 'dir'#
obj = 'obj'#
mount = 'mount'#
class latch_cli.utils.ldata.FinalLinkTargetPayload[source]#

Bases: TypedDict

id: str#
type: str#
name: str#
ldataObjectMeta: LdataObjectMeta | None#
class latch_cli.utils.ldata.LdataNodePayload[source]#

Bases: TypedDict

finalLinkTarget: FinalLinkTargetPayload#
class latch_cli.utils.ldata.LdataResolvePathToNodePayload[source]#

Bases: TypedDict

path: str#
ldataNode: LdataNodePayload#
class latch_cli.utils.ldata.AccountInfoCurrentPayload[source]#

Bases: TypedDict

id: str#
class latch_cli.utils.ldata.NodeData(id: str, name: str, type: latch_cli.utils.ldata.LDataNodeType, is_parent: bool, modify_time: datetime.datetime | None)[source]#

Bases: object

id: str#
name: str#
type: LDataNodeType#
is_parent: bool#
modify_time: datetime | None#
class latch_cli.utils.ldata.GetNodeDataResult(acc_id: str, data: Dict[str, latch_cli.utils.ldata.NodeData])[source]#

Bases: object

acc_id: str#
data: Dict[str, NodeData]#
latch_cli.utils.ldata.get_node_data(*remote_paths: str, allow_resolve_to_parent: bool = False) GetNodeDataResult[source]#
class latch_cli.utils.ldata.Child[source]#

Bases: TypedDict

name: str#
class latch_cli.utils.ldata.ChildLdataTreeEdgesNode[source]#

Bases: TypedDict

child: Child#
class latch_cli.utils.ldata.ChildLdataTreeEdges[source]#

Bases: TypedDict

nodes: List[ChildLdataTreeEdgesNode]#
class latch_cli.utils.ldata.LdataResolvePathData[source]#

Bases: TypedDict

childLdataTreeEdges: ChildLdataTreeEdges#
class latch_cli.utils.ldata.Team[source]#

Bases: TypedDict

accountId: str#
class latch_cli.utils.ldata.TeamMembersByUserIdNode[source]#

Bases: TypedDict

team: Team#
class latch_cli.utils.ldata.TeamMembersByUserId[source]#

Bases: TypedDict

nodes: List[TeamMembersByUserIdNode]#
class latch_cli.utils.ldata.TeamInfosByOwnerId[source]#

Bases: TypedDict

nodes: List[Team]#
class latch_cli.utils.ldata.UserInfoByAccountId[source]#

Bases: TypedDict

defaultAccount: str#
teamMembersByUserId: TeamMembersByUserId#
teamInfosByOwnerId: TeamInfosByOwnerId#
class latch_cli.utils.ldata.Bucket[source]#

Bases: TypedDict

bucketName: str#
class latch_cli.utils.ldata.LdataS3MountAccessProvensByGeneratedUsing[source]#

Bases: TypedDict

nodes: List[Bucket]#
class latch_cli.utils.ldata.LdataS3MountConfiguratorRolesByAccountIdNode[source]#

Bases: TypedDict

ldataS3MountAccessProvensByGeneratedUsing: LdataS3MountAccessProvensByGeneratedUsing#
class latch_cli.utils.ldata.LdataS3MountConfiguratorRolesByAccountId[source]#

Bases: TypedDict

nodes: List[LdataS3MountConfiguratorRolesByAccountIdNode]#
class latch_cli.utils.ldata.AccountInfoCurrent[source]#

Bases: TypedDict

userInfoByAccountId: UserInfoByAccountId#
ldataS3MountConfiguratorRolesByAccountId: LdataS3MountConfiguratorRolesByAccountId#
class latch_cli.utils.ldata.LdataObjectMeta[source]#

Bases: TypedDict

modifyTime: str | None#
class latch_cli.utils.ldata.InnerFinalLinkTarget[source]#

Bases: TypedDict

id: str#
ldataObjectMeta: LdataObjectMeta | None#
class latch_cli.utils.ldata.NodeDescendantData[source]#

Bases: TypedDict

finalLinkTarget: InnerFinalLinkTarget#
class latch_cli.utils.ldata.Node[source]#

Bases: TypedDict

relPath: str#
node: NodeDescendantData#
class latch_cli.utils.ldata.Descendants[source]#

Bases: TypedDict

nodes: List[Node]#
class latch_cli.utils.ldata.OuterFinalLinkTarget[source]#

Bases: TypedDict

descendants: Descendants#
class latch_cli.utils.ldata.NodeDescendantsLdataResolvePathData[source]#

Bases: TypedDict

finalLinkTarget: OuterFinalLinkTarget#
class latch_cli.utils.ldata.NodeDescendant(id: str, modify_time: datetime.datetime | None)[source]#

Bases: object

id: str#
modify_time: datetime | None#
class latch_cli.utils.ldata.GetNodeDescendantsResult(nodes: Dict[str, latch_cli.utils.ldata.NodeDescendant])[source]#

Bases: object

nodes: Dict[str, NodeDescendant]#
latch_cli.utils.ldata.get_node_descendants(path: str) GetNodeDescendantsResult[source]#

latch_cli.utils.path module#

latch_cli.utils.path.is_remote_path(path: str) bool[source]#
latch_cli.utils.path.append_scheme(path: str, *, assume_remote: bool = False) str[source]#
latch_cli.utils.path.append_domain(path: str) str[source]#
latch_cli.utils.path.strip_domain(path: str) str[source]#
latch_cli.utils.path.is_account_relative(path: str) bool[source]#
latch_cli.utils.path.normalize_path(path: str, *, assume_remote: bool = False) str[source]#
latch_cli.utils.path.get_path_error(path: str, message: str, acc_id: str) str[source]#
latch_cli.utils.path.get_name_from_path(path: str)[source]#

Module contents#

Utility functions for services.

latch_cli.utils.urljoins(*args: str, dir: bool = False) str[source]#

Construct a URL by appending paths

Paths are always joined, with extra /`s added if missing. Does not allow overriding basenames as opposed to normal `urljoin. Whether the final path ends in a / is still significant and will be preserved in the output

>>> urljoin("latch:///directory/", "another_directory")
latch:///directory/another_directory
>>> # No slash means "another_directory" is treated as a filename
>>> urljoin(urljoin("latch:///directory/", "another_directory"), "file")
latch:///directory/file
>>> # Unintentionally overrode the filename
>>> urljoins("latch:///directory/", "another_directory", "file")
latch:///directory/another_directory/file
>>> # Joined paths as expected
Parameters:
  • args – Paths to join

  • dir – If true, ensure the output ends with a /

exception latch_cli.utils.AuthenticationError[source]#

Bases: RuntimeError

latch_cli.utils.get_auth_header() str[source]#
latch_cli.utils.retrieve_or_login() str[source]#

Returns a valid JWT to access Latch, prompting a login flow if needed.

Returns:

A JWT

latch_cli.utils.current_workspace() str[source]#
latch_cli.utils.sub_from_jwt(token: str) str[source]#

Extract a user sub (UUID) from a JWT minted by auth0.

Parameters:

token – JWT

Returns:

The user sub contained within the JWT.

latch_cli.utils.account_id_from_token(token: str) str[source]#

Exchanges a valid JWT for a Latch account ID.

Latch account IDs are needed for any user-specific request, eg. register workflows or copy files to Latch.

Parameters:

token – JWT

Returns:

A Latch account ID (UUID).

latch_cli.utils.with_si_suffix(num, suffix='B', styled=False)[source]#
latch_cli.utils.hash_directory(dir_path: Path) str[source]#
latch_cli.utils.generate_temporary_ssh_credentials(ssh_key_path: Path) str[source]#
latch_cli.utils.get_local_package_version() str[source]#
latch_cli.utils.get_latest_package_version_request() str[source]#
latch_cli.utils.get_latest_package_version() str[source]#
class latch_cli.utils.TemporarySSHCredentials(ssh_key_path: Path)[source]#

Bases: object

generate()[source]#
cleanup()[source]#
property public_key#
property private_key#
class latch_cli.utils.WorkflowType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]#

Bases: Enum

latchbiosdk = 'latchbiosdk'#
snakemake = 'snakemake'#
latch_cli.utils.identifier_suffix_from_str(x: str) str[source]#
latch_cli.utils.identifier_from_str(x: str) str[source]#
latch_cli.utils.get_parameter_json_value(v)[source]#
latch_cli.utils.check_exists_and_rename(old: Path, new: Path)[source]#