Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Service Manager

A cross-platform library for installing and managing services on Windows, macOS, and Linux.

Overview

The Service Manager library provides a unified interface for managing system services across different operating systems. It follows standard service management conventions, allowing you to:

  • Install/uninstall services
  • Enable/disable services at boot time
  • Start/stop running services
  • Query service status

It creates user-level services (not system-wide root services), which means:

  • Linux: User systemd services (systemctl --user)
  • macOS: LaunchAgents (~/Library/LaunchAgents)
  • Windows: Scheduled Tasks (running on user login)

Installation

pip install etiket-service-manager

Pre-configured Services

This library includes pre-configured service definitions for the QHarbor application suite. These helper functions automatically set up the correct paths, executable locations, and naming conventions for QHarbor's sync components.

from etiket_service_manager.services import sync_agent, sync_api
from packaging.version import Version

# Get the manager for the Sync Agent
agent_manager = sync_agent.get_service()
agent_manager.status  # Check status

# Install — no need to pass program_arguments, the config carries them
agent_manager.install(version=Version("1.0.0"))

# Get the manager for the Sync API
api_manager = sync_api.get_service()
api_manager.install(version=Version("1.0.0"))

The pre-configured services resolve their executable via default_runner_install_location(), which knows the canonical location of the runner on each OS:

Platform Data directory (app_dir) Runner executable
macOS ~/Library/Application Support/quantum_machines ~/Applications/quantum_machines/eTiKeT Service.app/Contents/MacOS/etiket_service_runner
Linux ~/.local/share/quantum_machines (or $XDG_DATA_HOME/quantum_machines) <app_dir>/etiket_service_runner
Windows %LOCALAPPDATA%\quantum_machines <app_dir>\etiket_service_runner.exe

On macOS the runner ships as a code-signed .app bundle so it's identifiable to Gatekeeper, TCC, and System Settings (Privacy & Security → Full Disk Access). On Linux and Windows the bare binary lives in the per-user data directory.

Actions and Behaviors

The following table describes each action, its expected behavior, possible errors, and resulting service states:

Action Description Possible Errors Expected Status After Action
install Installs, enables, and starts the service ServiceAlreadyInstalled, ServiceOperationError installed=True, enabled=True, running=True
enable Enables the service to start automatically at boot ServiceAlreadyEnabled, ServiceOperationError installed=True, enabled=True, running=unchanged
start Starts the service ServiceAlreadyStarted, ServiceOperationError installed=True, enabled=unchanged, running=True
stop Stops the service ServiceAlreadyStopped, ServiceOperationError installed=True, enabled=unchanged, running=False
disable Disables the service (prevents starting at boot) ServiceAlreadyDisabled, ServiceOperationError installed=True, enabled=False, running=False
uninstall Uninstalls the service ServiceAlreadyUnInstalled, ServiceOperationError installed=False, enabled=False, running=False

Configuring the Service Manager

To use the Service Manager for your own applications, you need to create a ServiceConfig object. exe_install_location is required and uses a PlatformPath so the same config works across OSes — the entry matching the running OS is selected at install time.

from pathlib import Path
from etiket_service_manager import PlatformPath, ServiceConfig, ServiceManager

config = ServiceConfig(
    service_name="my_service",
    app_dir=Path.home() / ".my_service",        # Runtime data: logs, state
    exe_install_location=PlatformPath(
        darwin=Path("/Applications/MyService.app/Contents/MacOS/my_service"),
        linux=Path.home() / ".local/bin/my_service",
        windows=Path.home() / "AppData/Local/MyService/my_service.exe",
    ),
    default_args=["--serve"],                   # Optional: appended to the executable
)

manager = ServiceManager(config)

ServiceConfig fields

Field Type Required Purpose
service_name str yes Service identifier (used in plist label, systemd unit name, scheduled task name).
app_dir Path yes Per-service runtime directory for logs and state. Created if missing.
exe_install_location PlatformPath yes Per-OS absolute path to the installed executable. Resolved to a single path at install time.
default_args list[str] | None no Arguments appended after the resolved executable when manager.install() is called without program_arguments.

PlatformPath

A dataclass that holds one path per OS and resolves to the correct one based on platform.system():

from etiket_service_manager import PlatformPath

p = PlatformPath(
    darwin=Path("/usr/local/bin/foo"),
    linux=Path("/usr/bin/foo"),
    windows=Path(r"C:\Program Files\foo\foo.exe"),
)
p.resolve()  # → the path matching the running OS

Example Usage

from pathlib import Path

from packaging.version import Version

from etiket_service_manager import PlatformPath, ServiceConfig, ServiceManager


def main():
    # 1. Configure: declare where the executable lives on each OS and the
    #    default invocation. The same config works across all three OSes.
    config = ServiceConfig(
        service_name="my_service",
        app_dir=Path.home() / ".my_service",
        exe_install_location=PlatformPath(
            darwin=Path("/Applications/MyService.app/Contents/MacOS/my_service"),
            linux=Path.home() / ".local/bin/my_service",
            windows=Path.home() / "AppData/Local/MyService/my_service.exe",
        ),
        default_args=["--serve"],
    )
    manager = ServiceManager(config)

    # 2. Install. With exe_install_location + default_args set on the config,
    #    program_arguments is inferred — no need to pass it.
    manager.install(
        version=Version("1.0.0"),
        raise_if_already_installed=True,
    )

    # If you need a one-off override, pass program_arguments explicitly:
    # manager.install(version=Version("1.0.0"),
    #                 program_arguments=["/custom/path", "--debug"])

    # 3. Check status
    print(f"Service status: {manager.status}")

    # 4. Stop / disable / uninstall as needed
    manager.stop()
    manager.disable()
    manager.uninstall()


if __name__ == "__main__":
    main()

Platform Specific Details

Windows Services

This application is implemented as a Scheduled Task rather than a Windows service. A scheduled task can run without administrator permissions, unlike Windows services.

The scheduled task:

  • Runs as a background process with wscript (hidden window).
  • Starts automatically when the user logs in.
  • Provides support for process recovery when it terminates unexpectedly.

Requirements

  • The service name is used as the Task Name.
  • Tasks are created with "LeastPrivilege" run level, so no UAC prompt is needed.

Logging

  • Behavior: Unlike Linux/macOS, Windows Task Scheduler does not capture or redirect Standard Output (stdout) or Error (stderr). Any output printed to the console is lost.
  • Requirement: Your application must internally handle logging to files.
    • Do not rely on print().
    • Use a logging library (e.g., Python's logging module) to write directly to a file.
  • Suggested Location: {app_dir}/logs/ to match other platforms.

macOS Services

This document outlines the process for creating and managing macOS services using launchctl. These services run in the GUI session of the logged-in user (LaunchAgents).

Installation Locations

  • Service configuration file: ~/Library/LaunchAgents/com.quantum-machines.{service_name}.plist
  • Executable: ship as a code-signed .app bundle in ~/Applications/{company}/{app_name}.app (per-user, no admin required, Finder-discoverable for Privacy & Security grants) or /Applications/{app_name}.app (system-wide). For QHarbor's etiket_service_runner the canonical path is ~/Applications/quantum_machines/eTiKeT Service.app/Contents/MacOS/etiket_service_runner.
  • Runtime data (app_dir): kept separate from the executable, in ~/Library/Application Support/{company}/.
  • Logs: {app_dir}/{service_name}_logs/

[!IMPORTANT] Ship the executable as a .app bundle (with CFBundleIdentifier, CFBundleExecutable, LSUIElement=true for background services, and any NSXxxUsageDescription keys the agent needs). Bare Mach-O binaries cannot be cleanly granted permissions in System Settings → Privacy & Security and don't trigger TCC prompts with usable descriptions. The bundle ID + signing identity are what TCC keys grants on, so keep them stable across releases.

[!IMPORTANT] The service is configured with WorkingDirectory set to the app_dir. If your application uses relative paths for resources or imports, the executable still belongs in the .app bundle — app_dir is for runtime data only.

The service definition (plist) includes:

  • KeepAlive: True (system attempts to restart it if it crashes)
  • RunAtLoad: True (starts immediately upon load/login)
  • ThrottleInterval: 60 seconds

Linux Services

Service in Linux are implemented using systemd user services. This is a robust system that works very well for user-level background processes.

Locations

  • Configuration: The systemd user unit file ({service_name}.service) is created in ~/.config/systemd/user/.
  • Logs: Managed by systemd. View logs using:
    journalctl --user -u {service_name}
    
    • Use -f to follow logs in real-time.
    • Use -e to jump to the end.
  • Application Binary: The application executable should be in a stable, user-accessible location.
    • Recommended: ~/.local/bin/ for standalone binaries.
    • Note: Self-contained application directories often reside in ~/.local/share/.
    • Important: Always provide the absolute path to the executable when installing the service.

Behavior

  • Uses systemctl --user commands to manage the service.
  • defined as Type=simple.
  • Configured with Restart=always and a 5-second delay to ensure reliability.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

etiket_service_manager-0.3.0b4-cp314-cp314-win_amd64.whl (690.6 kB view details)

Uploaded CPython 3.14Windows x86-64

etiket_service_manager-0.3.0b4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

etiket_service_manager-0.3.0b4-cp314-cp314-macosx_11_0_x86_64.whl (761.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

etiket_service_manager-0.3.0b4-cp314-cp314-macosx_11_0_arm64.whl (706.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

etiket_service_manager-0.3.0b4-cp313-cp313-win_amd64.whl (674.4 kB view details)

Uploaded CPython 3.13Windows x86-64

etiket_service_manager-0.3.0b4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

etiket_service_manager-0.3.0b4-cp313-cp313-macosx_11_0_x86_64.whl (761.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

etiket_service_manager-0.3.0b4-cp313-cp313-macosx_11_0_arm64.whl (701.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

etiket_service_manager-0.3.0b4-cp312-cp312-win_amd64.whl (689.2 kB view details)

Uploaded CPython 3.12Windows x86-64

etiket_service_manager-0.3.0b4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

etiket_service_manager-0.3.0b4-cp312-cp312-macosx_11_0_x86_64.whl (768.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

etiket_service_manager-0.3.0b4-cp312-cp312-macosx_11_0_arm64.whl (712.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

etiket_service_manager-0.3.0b4-cp311-cp311-win_amd64.whl (705.6 kB view details)

Uploaded CPython 3.11Windows x86-64

etiket_service_manager-0.3.0b4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

etiket_service_manager-0.3.0b4-cp311-cp311-macosx_11_0_x86_64.whl (780.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

etiket_service_manager-0.3.0b4-cp311-cp311-macosx_11_0_arm64.whl (725.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

etiket_service_manager-0.3.0b4-cp310-cp310-win_amd64.whl (703.5 kB view details)

Uploaded CPython 3.10Windows x86-64

etiket_service_manager-0.3.0b4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

etiket_service_manager-0.3.0b4-cp310-cp310-macosx_11_0_x86_64.whl (787.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

etiket_service_manager-0.3.0b4-cp310-cp310-macosx_11_0_arm64.whl (732.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file etiket_service_manager-0.3.0b4-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1188b955ee55f0f1d0b9fabe8cecfa2ef07758d98629b417b8f9c370efea4a6b
MD5 a64fcecafaae6514af18ad2ae1cd4427
BLAKE2b-256 c5751bd4946bb2786580df81efc52ff8d11984a5e32dd5fc40013237d26b23b7

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eb879344a6ebe87c763771c3be9d9f778107273c409b8cf1ce5ab312ba00eb63
MD5 ee46e8d100d3ea7a146440d525ec3ebe
BLAKE2b-256 7c66a209a4e275b0c25df4439174a2e8d24de6c0b8dd9665745cef25ad927cae

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 659982a92397a65919192acb2296762dfdc6a5770078a6f820a534780102b5c7
MD5 7131f73f10127114add23e4f91cf39f1
BLAKE2b-256 0735f8fa01f6468ee9e36b75e0404bf1276d96bd7fad8812c61441c695e2d5ca

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 83ad8478dc4cf05fc3cb3bfab15f35ee5bce9d1baa33b275729074ddc3d68527
MD5 30576d7ff1c90384d8b368cf17d63609
BLAKE2b-256 abbbba236db42ca7329e6a8d0635eebb5405584e35d0f7b0df0c9b1fc6ed5118

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b8429a732bd63c611b81781012bc7286d37962017a24c55243afe546133071ef
MD5 458eaa98739a773cc6c182384855e4ff
BLAKE2b-256 9e953e4e8966a9323b22865c7b5e20be878646cd3a7792d5d5597bc1a4010f98

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 48e5b6c2d66851043dfb7004165009364d20c7def82049ee0da38c598ec1c147
MD5 70fd46d55e089b476f1796dbf2e2034b
BLAKE2b-256 b8bce000ab9022f452707c19a30ede5dbb76662dd7cf001b74a99bd372290752

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 373a96419609f3e542b3607018e65ea28de4d14bcf748c4651d5b8a15b22035f
MD5 790dd0602051db8b945bfa9b78c25864
BLAKE2b-256 59acbf58cd894f4f8fe07581d693261dc10a0a496758059099f92a243f808ad0

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9672f6eeddf7db12cb2be7e085c7319e45f27e41c820af207a7f70d9cf00074a
MD5 6b915281a9f5e128cd01bdd91ff0d056
BLAKE2b-256 17ed4486a0261fcbe8f8836ec3bccc67b3e57588b4a31ff8a13a33a10ac04be3

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 412adcc8505b3fb78fc3b36c1552c446f8aac2c0d5d59c173e0b480fdb8db778
MD5 e129d3344ebf68e0a57d2263edea5971
BLAKE2b-256 ee96bee8e8dee39f81624e887f42f46cc0c7601ea4b85d68bf80edaf164d951e

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 592be703dd2024a3d67fb40965a112f756c031d60bbd10c051b99f58878d552e
MD5 2cffbbf5a46d25375ee9748f8c7d1549
BLAKE2b-256 bd5ed319f8d1fec019cd1e29c29dc35fd0673d317db40ab68a8ad9321dcfc512

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 ed73c056c73f1db79c65cd6a80ddf78884ead07826355ab9149fb57023933ba8
MD5 1f0b1c3d318c2c88061762fa108c134a
BLAKE2b-256 5bbca95716739723069a1dea0f1eaea056ef4653538a2b9c6a9b98565173b773

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 544740b2c9922b794d962e2cbe9e8324397dc9157e1aca7f6907b511c6894ce9
MD5 cdfe7574f13f03ee8e7bee592b7623d6
BLAKE2b-256 9514a5a041acab8e42c828386b4938a4f79514884e32d6d72325df5b88af6ee8

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a24366fa116fc810cc67436f6f06df8bfb2d02badc07dcac1988db4a595f4ad7
MD5 4d9adfc766a672f5639d43c4a4ee30cb
BLAKE2b-256 4d6ab0032755b2724491a107d0ee2df82e0d28356d95445d876efbddcfa6dbc6

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 caf27f041e224acc5d42a4b6244c9185360a7b4c96d2da2400a9c5ad7edafcf6
MD5 57861a5df9ae80c4a32a835786f3108a
BLAKE2b-256 6000821a8e4cfa341bfb11f2f6aecb953f7b36ba1226ee4b252b0bf2748fc335

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 8b27c8de907edc7b460a5384834c3aed34ad6c021c96e1676ac8a4fc4928056e
MD5 a1821fc90f7c569752c6f1b5eec646a6
BLAKE2b-256 c1a34c3b274dba53fa7ed6e1b00463dede3983ecd8570fa308c86417252679b4

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 70c147276086e58ac16be858b8695438ede273b830bd899df5de65223b6ce319
MD5 5b22668c9641c713a64cce1c723ab27f
BLAKE2b-256 803aab06f95bda2e1efaa68335d3a74ff3914c7956fb5150e9374d79828fa570

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c27c6f8abc560c63c06fccb77c2f9b6f8b6aaf13c272e5f332d959053b416504
MD5 4cf9c5d1ab895b18b4d3c46eb4aa839d
BLAKE2b-256 167ec86ab763d59ad98829d95979f01c788add03dfe63f7a371c84c2945a5355

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e30955b0493f3bf9c1c7be9165ebb8acb7984cbb2649f8d26e77c57057603f9e
MD5 f335cc8045b2da194f87528f16813bab
BLAKE2b-256 10b57e687b0636e593a5c9f7fc5a7944c012a1919c7ab0febca4389aa99a51f8

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 56aebbbaf2068aaa1ebcedafbaf90244a35e6428dcbb77a6a587ccfafac4fff3
MD5 c1b5a518ada050909fe996840732aa36
BLAKE2b-256 276e775ef4f844b392f323cd69367968206b61a61474bc1bbb451ad6ec1a3821

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d12f9b08bfe089d541bf21a6a8420a7b1f6108937feb540fb2b06bea2cd04763
MD5 983804ce294d60f6c1d8b55d7af64c13
BLAKE2b-256 dce73bc8ff7be357e0a871647b0bd02b05dd6aec5acbaef400c18eed1e8e62c1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page