"""
This module provides constants used throughout the maestral, the GUI and CLI. It should
be kept free of memory heavy imports.
"""
# system imports
import sys
import platform
import pathlib
from enum import Enum
from importlib_metadata import metadata, PackageNotFoundError
from typing import ContextManager
try:
# For Python 3.9 and later.
from importlib.resources import as_file, files # type: ignore
[docs]
def resource_path(package: str, resource: str) -> ContextManager[pathlib.Path]:
return as_file(files(package) / resource)
except ImportError:
# Fallback for Python 3.8
from importlib.resources import path as resource_path
FROZEN = getattr(sys, "frozen", False)
for package in (
__package__,
"maestral",
"maestral-cocoa",
"maestral-qt",
"maestral-gui",
):
try:
[docs]
FROZEN = "Briefcase-Version" in metadata(package) or FROZEN
except PackageNotFoundError:
pass
# app
[docs]
BUNDLE_ID = "com.samschott.maestral"
[docs]
APP_ICON_PATH = resource_path("maestral.resources", "maestral.png").__enter__()
[docs]
ENV = {"PYTHONOPTIMIZE": "2", "LC_CTYPE": "UTF-8"}
[docs]
DEFAULT_CONFIG_NAME = "maestral"
# sync
[docs]
OLD_REV_FILE = ".maestral"
[docs]
MIGNORE_FILE = ".mignore"
[docs]
FILE_CACHE = ".maestral.cache"
[docs]
EXCLUDED_FILE_NAMES = frozenset(
[
"desktop.ini",
"Thumbs.db",
"thumbs.db",
".DS_Store",
".ds_tore",
"Icon\r",
"icon\r",
".com.apple.timemachine.supported",
".dropbox",
".dropbox.attr",
".dropbox.cache",
FILE_CACHE,
OLD_REV_FILE,
]
)
[docs]
EXCLUDED_DIR_NAMES = frozenset([".dropbox.cache", FILE_CACHE])
# state messages
[docs]
CONNECTED = "Connected"
[docs]
DISCONNECTED = "Connection lost"
[docs]
CONNECTING = "Connecting..."
[docs]
SYNC_ERROR = "Sync error"
# file status enum
[docs]
class FileStatus(Enum):
"""Enumeration of sync status"""
[docs]
Unwatched = "unwatched"
[docs]
Uploading = "uploading"
[docs]
Downloading = "downloading"
# platform detection
[docs]
IS_MACOS = platform.system() == "Darwin"
[docs]
IS_LINUX = platform.system() == "Linux"
# keys
[docs]
DROPBOX_APP_KEY = "2jmbq42w7vof78h"
# urls
[docs]
GITHUB_RELEASES_API = "https://api.github.com/repos/samschott/maestral/releases"