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

Uploaded CPython 3.14Windows x86-64

etiket_service_manager-0.3.0b2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.5 MB view details)

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

etiket_service_manager-0.3.0b2-cp314-cp314-macosx_11_0_x86_64.whl (746.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

etiket_service_manager-0.3.0b2-cp314-cp314-macosx_11_0_arm64.whl (691.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

etiket_service_manager-0.3.0b2-cp313-cp313-win_amd64.whl (660.6 kB view details)

Uploaded CPython 3.13Windows x86-64

etiket_service_manager-0.3.0b2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.5 MB view details)

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

etiket_service_manager-0.3.0b2-cp313-cp313-macosx_11_0_x86_64.whl (745.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

etiket_service_manager-0.3.0b2-cp313-cp313-macosx_11_0_arm64.whl (686.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

etiket_service_manager-0.3.0b2-cp312-cp312-win_amd64.whl (674.8 kB view details)

Uploaded CPython 3.12Windows x86-64

etiket_service_manager-0.3.0b2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.7 MB view details)

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

etiket_service_manager-0.3.0b2-cp312-cp312-macosx_11_0_x86_64.whl (753.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

etiket_service_manager-0.3.0b2-cp312-cp312-macosx_11_0_arm64.whl (697.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

etiket_service_manager-0.3.0b2-cp311-cp311-win_amd64.whl (689.8 kB view details)

Uploaded CPython 3.11Windows x86-64

etiket_service_manager-0.3.0b2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.6 MB view details)

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

etiket_service_manager-0.3.0b2-cp311-cp311-macosx_11_0_x86_64.whl (765.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

etiket_service_manager-0.3.0b2-cp311-cp311-macosx_11_0_arm64.whl (711.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

etiket_service_manager-0.3.0b2-cp310-cp310-win_amd64.whl (687.8 kB view details)

Uploaded CPython 3.10Windows x86-64

etiket_service_manager-0.3.0b2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.4 MB view details)

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

etiket_service_manager-0.3.0b2-cp310-cp310-macosx_11_0_x86_64.whl (772.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

etiket_service_manager-0.3.0b2-cp310-cp310-macosx_11_0_arm64.whl (718.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 133eb660ce983f2f9c3d050c16f06b6ff570e755d23f09f4ea6a07500242768c
MD5 eb876249852ee5d7d792896815f32ca4
BLAKE2b-256 34665b8660ee4f64dc21ff78612493fa931c13a3bee98654adc02941b74b0a50

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b2-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.0b2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 665f53c5bf19e1bfb3dac1a029b0289b83f8002e36d0483f68102e6762d0143e
MD5 9083260f71fd5c7090fbead25ce8f7a4
BLAKE2b-256 992259d2ad6ea021e9acc799cff312ba7da0b1f363e912845b2a60af8ab00a20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 46456b72a89b541d04579f1ca4e3bfc59d3ef67958b04c9bcd794840b54a6583
MD5 39a7f449dafc2b11bde5c793edd0b4b3
BLAKE2b-256 670cd42636a73b817849591410e1b0a816d989734ea056b3e8479a6402056956

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39b7d22f1bca681d8866b61ff50d5fa1099b998c0179ddc2d993cb081cf95480
MD5 6038afb461d74481b6a98a6b9d806663
BLAKE2b-256 f1137a8ea3ef3800e19ae5de3ed0862f9438b47932a330a3838189b021c9d24c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f5f375fc7c8f22066de5499d3a579775f28a2f9153ecaa148d3290ff646e739b
MD5 e69090a1f228757c43fa32b2c4e4d3e2
BLAKE2b-256 5389013a7d724f6e0e1fb61f211026908308735becd46ab39c0259c2068601f3

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b2-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.0b2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c693b1cdb70fef5fbf08b6bd9197deb181ffb01e45f3f51e74280f369bb22852
MD5 7f181c3e36f1b044869ed2fa241794f9
BLAKE2b-256 9ed57020502f2db10ab4c2befef33d74d53e84ed67f22e35213163da26a8eaf1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 854fdb5f668d0ae7010b1d05a673dace00559164988dd5bb704b19aa1706205b
MD5 e359c2dab683456063ee40fb26d87458
BLAKE2b-256 bdcf2b8a2b204207d6e49697f88a21d9c99b785fa60719240648a635b95ed5df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63ccdd072c405199ee35c4433f10eee3bc429045022d5eef366851d710163896
MD5 e694c25f4db949d846e711744613cbd9
BLAKE2b-256 2b17d5184294c284d34b45e4477a5a08513aeb6115135df6fc4977f1873f0b13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 681dd0cd93ecde9dd42631cf88f2a5b4968f10b8bb62cebc6032c7d8a86c6a0b
MD5 976a03ba42eece0ce9b6b69c2696429a
BLAKE2b-256 d5b88702960ed94ecfbea42c4fbbb5de8b79731142e165074192bbb306d49a78

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b2-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.0b2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9537e63fe9fb012a99917e1eb580082f1a696771dce7170771930c3394bc8672
MD5 21b39ba897fab8da785138d247cdaac8
BLAKE2b-256 9029b013153631cc7090a2b018651bc8a58c689d6432868b3d3ed255c604a13d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 657baf36450881d150a3d6b2eb547bbdeb27cbdcbfa64fe1d4b24becc0a1d6bd
MD5 d3f8e6e57e66b4c09d6abcb7e558ff53
BLAKE2b-256 3c1b8f69775ece035b0c7a3129b88cb90cae4611c261356e14f2447d238669fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 225d8d255f9d9750d068da1ff47d84def528afd8f44285d8e7f09b1f70594bd9
MD5 d87778fad4020ed3dcf830777c6bfced
BLAKE2b-256 8ae4289cbfeb524fa9df8a64c569a3bde08fa1db0298edc3cfb57a0e44a52775

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cb8be999a110e371c9e85284a1b47571228fa31b2d12dfea3144c65a1bf35490
MD5 e31962687688c0e2277a732233947780
BLAKE2b-256 9bc57633e93a28ace04c726634746ef580f02ee3267400295289bbd3ab9041aa

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b2-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.0b2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e85d1d13096faec4529487693d8b8a5676006634d7fee3553ed607287472a7d3
MD5 58a175a8ac8b3bf1059b0f4f692a25e3
BLAKE2b-256 f72075d9cfd5b56e6941c0ed58483b0a1dd8aab01896600de76b654549ade3f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 2380b91d16fb6d68ee089f468fe2fa9c8789320aebcfc437563798beb58b851a
MD5 437d8302c4d6eb908797a9f3721a45a4
BLAKE2b-256 3c7353164460794bb3e0090e2753ac71e478f253d778b36f3e197aaa3f2d5201

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d87e21c73f42e45f1327bf005443842a4d5e8935fc1ae124fe19e4f53420665e
MD5 6e1294c42be90931a743507ae8ff49f3
BLAKE2b-256 cad77460ad8fe37306b22cf45f28ed7c67e18374c24dbdd6e010a7f08718c900

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e18b33462224314d49e2b851ab85782d13c4776c3be274ed8360b6cb98c26fe0
MD5 ffd8eda7623330ae7bcb35cb703eae7d
BLAKE2b-256 10d1fc4622e1f3b20050158d4514eac126f62b304c7d89a0df997d59a8c96cb0

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b2-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.0b2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 09c95778ed0abbdb68ad7713bb5d23379e1b9b330edbbed600ae28979c434f50
MD5 eb6967e0a8c95f2f0faebc098e24aa2f
BLAKE2b-256 70aeb3086940baa520ba112d345a783b2767931a7dab03ad33f7c5a2d64d43d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 c70c058396850bd73e004ceedff47cb5be010bced76feb85cadb91aab76f7d4b
MD5 9883b2d55d069c8a567845c994b59b70
BLAKE2b-256 a5e713689c4497a7f51eb2f93bbe222c0b9ff570321c683c519d9913bf5ab5a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 04b42cf846ecdf5a18f9dee8bb6bf385d06bcad4a44b2ab97215f6688d507c2b
MD5 f45c8b9be41fc4f8fd3eb6f2d7ab07f0
BLAKE2b-256 1628c07fd4068ce7a412a18dd60cee212a3831c88100b2f9d3d56bed9ca53b85

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