Skip to main content

Cross-platform service management library for Linux, macOS, and Windows

Project description

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/qharbor ~/Applications/qharbor/eTiKeT Service.app/Contents/MacOS/etiket_service_runner
Linux ~/.local/share/qharbor (or $XDG_DATA_HOME/qharbor) <app_dir>/etiket_service_runner
Windows %LOCALAPPDATA%\qharbor <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/qharbor/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.

Project details


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.0b1-cp314-cp314-win_amd64.whl (635.5 kB view details)

Uploaded CPython 3.14Windows x86-64

etiket_service_manager-0.3.0b1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.2 MB view details)

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

etiket_service_manager-0.3.0b1-cp314-cp314-macosx_11_0_x86_64.whl (697.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

etiket_service_manager-0.3.0b1-cp314-cp314-macosx_11_0_arm64.whl (648.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

etiket_service_manager-0.3.0b1-cp313-cp313-win_amd64.whl (620.5 kB view details)

Uploaded CPython 3.13Windows x86-64

etiket_service_manager-0.3.0b1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.3 MB view details)

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

etiket_service_manager-0.3.0b1-cp313-cp313-macosx_11_0_x86_64.whl (697.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

etiket_service_manager-0.3.0b1-cp313-cp313-macosx_11_0_arm64.whl (643.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

etiket_service_manager-0.3.0b1-cp312-cp312-win_amd64.whl (634.9 kB view details)

Uploaded CPython 3.12Windows x86-64

etiket_service_manager-0.3.0b1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.4 MB view details)

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

etiket_service_manager-0.3.0b1-cp312-cp312-macosx_11_0_x86_64.whl (705.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

etiket_service_manager-0.3.0b1-cp312-cp312-macosx_11_0_arm64.whl (654.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

etiket_service_manager-0.3.0b1-cp311-cp311-win_amd64.whl (648.7 kB view details)

Uploaded CPython 3.11Windows x86-64

etiket_service_manager-0.3.0b1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.3 MB view details)

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

etiket_service_manager-0.3.0b1-cp311-cp311-macosx_11_0_x86_64.whl (717.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

etiket_service_manager-0.3.0b1-cp311-cp311-macosx_11_0_arm64.whl (667.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

etiket_service_manager-0.3.0b1-cp310-cp310-win_amd64.whl (646.4 kB view details)

Uploaded CPython 3.10Windows x86-64

etiket_service_manager-0.3.0b1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.1 MB view details)

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

etiket_service_manager-0.3.0b1-cp310-cp310-macosx_11_0_x86_64.whl (723.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

etiket_service_manager-0.3.0b1-cp310-cp310-macosx_11_0_arm64.whl (673.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 53ec8f72c8d5b1ff59ad378ca8d7cf64b536a0977f9a73ca3fe2fcd98826857f
MD5 1ebc4a42aacfad6ad0fff7f0afbc1a83
BLAKE2b-256 52a4e28dca2f117c4f33024c07a11bc4fee67f53000c9fc3bfc3737e16c7c820

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b1-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.0b1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6b8e077fc220c5edba88beb10d495058423c11882df44bea431b8959edb53243
MD5 90dceb2ef43ac955ccfa44846e20080e
BLAKE2b-256 0c357ffa3f7188ec707be47cbeea64a91769dbe874df4052c490bb5d8c6cd725

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 422da82de131897a2c3ca89dac59fdb8c16cdbd2aad6e3695a74ddf1ed65f0b6
MD5 613df109dbf6afa120616d6fd95a23f8
BLAKE2b-256 6aa9573bf91745cebc543cb9bca02cb2f6dfe9e0a69906e2212beba529c8c877

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ba8d5badab5d7f5da49123cb71bf23f131c3de50f7ba97aee62fe844cb3d05e8
MD5 983552ead49020223821ca5ff4963ff2
BLAKE2b-256 381aaefd8ef8616feccdd3519cdf97627e7293acf6fa7b81f62ecd43a97a409e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 87c1c5be5704c8f5421da06473cc6cbe20517326be6ff2dc5a0140b30c6c147d
MD5 5ab6fcd45e40467a0d805ce63a0e363e
BLAKE2b-256 12d80099353fed433369157c6e0830aae2d194074c5e102511763986f8c01557

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b1-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.0b1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7ddd721ccfd76e128f8372d830075e87e21bebf9baf671c3bc1d4ccf24a079e3
MD5 5edb9567cbbb80ed54c547983450f083
BLAKE2b-256 c1c2be4c3ba995ee7367a1244c7c4bd1bde9e17629efecfffeb288ebfe8dc2af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4d706c9fe74b9c137b92ce56fc3d762b2810bfb7757c01c10829d814aa2afe01
MD5 4891ec859c483e6ac5c1e1a2f7dea8bc
BLAKE2b-256 628a447a42742fd0ccdec2c5a4f73ccabd1553df338ffb3aeb8b060475de42c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4bdcdd5ecac5ed572a12c50634fabdb1d1acddfb0773917f3442fadae7782e8c
MD5 79713f6064de84e54f0ce74e68766b34
BLAKE2b-256 e4eb776d8a97ca1f650fef40323ecb1b236bee0251839796ffc47430f3e7c45d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 cdc4cca7d97024162b1b64cb816bc6645b3dc5a5b23e1dbfc582496818fa94cd
MD5 99d0b7c655304d7ecdb27fcd4ca53700
BLAKE2b-256 265fa0c1060c80ebb17bc59303dcd5746908f40b19bf4065703cec264751b84d

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b1-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.0b1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3d1e8dad25965428ec3f33d509ba16889020c9d0e916f79c6dabd03800f1a515
MD5 8a0480616d64b23ff2e2f8e26b344de9
BLAKE2b-256 5fe9dd9a5a8b646eb03d88189a17d03b50da80a091972e5e5ab4006ff4fd94b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 8e866d7b5577d5087cc6918645e76b63589a4b60be2fc5afea10c21212c84099
MD5 d06feee31b92fc55f489b06ccc0fde1c
BLAKE2b-256 0774c2d866e23cede694e94a68f3533f7d07dcc18fa820b5df404e9af3de40b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b59e53c7ce2a89a9e20490c0f54ab7d84cfad7fbe7331adb50ad02b27c0235e1
MD5 75bfec91dc8f49de342e7a12fd36350f
BLAKE2b-256 9853ccb3279335bab61a01c27c759896453061aab57f9665f2498d14772915da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 291c8b9d5df686795dbc172c73668a92df5417a697e80727ee313109d8ffba53
MD5 f19e1804ead77073c01e3924b19dc7c8
BLAKE2b-256 2090e874b8da4dc8bc63e54362b83e2ea8ccc6199416483da1cf96f4db4ba176

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b1-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.0b1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 db5c99d07672c0628c43e0bb3c2298191956e55bc0d8e0f35cf123b78caea3a2
MD5 3524af6acf8b4c12f4e8907c546764be
BLAKE2b-256 8b26a1c8b40b9d57bda672965c92762ca15f766982fc16129734d31df9139814

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 7da8302952291353e5fb59c7a80a247e5213af2ebd823e5bdb18fb250c667681
MD5 1759e67f1ed0681b7cd5147a63644c6b
BLAKE2b-256 66f3089a86eb3206f68daddbc3e15e8e75d7a6aa441863092e611b91a4c63fb6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b00fd8f90eeae8f5b85677b869cbaa5715a3f9bcdb4876797584bb1283944922
MD5 71b309d5c334dfd5141a3b1f0bb3a3eb
BLAKE2b-256 88c7ffbabda89fe86697e5b4ae453c9a4314d1c1f3e615588fd992e4c45ce9e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 df5c1082ac9809d008bc968f17e5fd73af3cb52a7d532008e1ba05b32dadd2df
MD5 bb5b00d5e58660e92e648d5a45fe3d5e
BLAKE2b-256 38209088342914114c391fc0a9a925e9760194c2560ac1d1a6fdc8e1694ef488

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b1-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.0b1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b8a8352d03d3a2c5a36c13a14060d160e50e47a79e987a70b9b9d3572cefbf08
MD5 e582141f3de740328bf447d6f0e76139
BLAKE2b-256 62636a52e8359161d2c91f015da0d309cd24abf863b732d1a246d89429d07807

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d64caaec839d8f051eadcac24cd6738d44dc6fdb125d698fc7ee76d360ca4299
MD5 0d342e308317b16e5c4d3190a64c457d
BLAKE2b-256 a8a88c1b9d45485ff6e5802c3a00d0abf5ad3e49bb1133699cb7dac76170338c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3b9296f6abca2ffc30d5a252ae0ab92d0d93e215d6d487eef8e95f9b066bf0b2
MD5 d774a0cc86102ca3a39f23e60edc7c6e
BLAKE2b-256 46eb75feea95ac981f27538d8b01e16c3e516b9eafaf8fe3145a883bd00ecbe2

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