Source code for maestral.core

"""
Dataclasses for our internal and external APIs.
"""

from __future__ import annotations

from enum import Enum
from dataclasses import dataclass
from datetime import datetime


# ==== user ============================================================================


[docs]class AccountType(Enum): """Enum of account types"""
[docs] Basic = "basic"
[docs] Pro = "pro"
[docs] Business = "business"
[docs] Other = "other"
@dataclass
[docs]class Team:
[docs] id: str
[docs] name: str
@dataclass
[docs]class RootInfo:
[docs] root_namespace_id: str
[docs] home_namespace_id: str
@dataclass
[docs]class UserRootInfo(RootInfo): pass
@dataclass
[docs]class TeamRootInfo(RootInfo):
[docs] home_path: str
@dataclass
[docs]class Account:
[docs] account_id: str
[docs] display_name: str
[docs] email: str
[docs] email_verified: bool
[docs] profile_photo_url: str | None
[docs] disabled: bool
@dataclass
[docs]class FullAccount(Account):
[docs] country: str | None
[docs] locale: str
[docs] team: Team | None
[docs] team_member_id: str | None
[docs] account_type: AccountType
[docs] root_info: RootInfo
@dataclass
[docs]class TeamSpaceUsage:
[docs] used: int
[docs] allocation: int
@dataclass
[docs]class SpaceUsage:
[docs] used: int
[docs] allocated: int
[docs] team_usage: TeamSpaceUsage | None
# ==== files ===========================================================================
[docs]class WriteMode(Enum): """Enum of write modes when uploading a file"""
[docs] Add = "add"
[docs] Update = "update"
[docs] Overwrite = "overwrite"
@dataclass
[docs]class SharingInfo:
[docs] read_only: bool
@dataclass
[docs]class Metadata:
[docs] name: str
[docs] path_lower: str
[docs] path_display: str
@dataclass
[docs]class DeletedMetadata(Metadata): pass
@dataclass
[docs]class FileMetadata(Metadata):
[docs] id: str
[docs] client_modified: datetime
[docs] server_modified: datetime
[docs] rev: str
[docs] size: int
[docs] shared: bool
[docs] modified_by: str | None
[docs] is_downloadable: bool
[docs] content_hash: str
@dataclass
[docs]class FolderMetadata(Metadata):
[docs] id: str
[docs] shared: bool
@dataclass
[docs]class ListFolderResult:
[docs] entries: list[Metadata]
[docs] has_more: bool
[docs] cursor: str
# ==== sharing =========================================================================
[docs]class LinkAccessLevel(Enum): """Enum of access levels to shared links"""
[docs] Viewer = "viewer"
[docs] Editor = "editor"
[docs] Other = "other"
[docs]class LinkAudience(Enum): """Enum of shared link audience"""
[docs] Public = "public"
[docs] Team = "team"
[docs] NoOne = "no_one"
[docs] Other = "other"
@dataclass
[docs]class LinkPermissions:
[docs] can_revoke: bool
[docs] allow_download: bool
[docs] effective_audience: LinkAudience
[docs] require_password: bool | None
@dataclass
[docs]class SharedLinkMetadata:
[docs] url: str
[docs] name: str
[docs] path_lower: str | None
[docs] expires: datetime | None
@dataclass
[docs]class ListSharedLinkResult:
[docs] entries: list[SharedLinkMetadata]
[docs] has_more: bool
[docs] cursor: str
# ==== update checks =================================================================== @dataclass
[docs]class UpdateCheckResult:
[docs] update_available: bool
[docs] latest_release: str
[docs] release_notes: str