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/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.

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

Uploaded CPython 3.14Windows x86-64

etiket_service_manager-0.3.0b3-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.0b3-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.0b3-cp314-cp314-macosx_11_0_arm64.whl (706.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

etiket_service_manager-0.3.0b3-cp313-cp313-win_amd64.whl (674.3 kB view details)

Uploaded CPython 3.13Windows x86-64

etiket_service_manager-0.3.0b3-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.0b3-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.0b3-cp313-cp313-macosx_11_0_arm64.whl (701.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

etiket_service_manager-0.3.0b3-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.0b3-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.0b3-cp312-cp312-macosx_11_0_arm64.whl (712.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

etiket_service_manager-0.3.0b3-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.0b3-cp311-cp311-macosx_11_0_x86_64.whl (779.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

etiket_service_manager-0.3.0b3-cp311-cp311-macosx_11_0_arm64.whl (724.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

etiket_service_manager-0.3.0b3-cp310-cp310-win_amd64.whl (703.4 kB view details)

Uploaded CPython 3.10Windows x86-64

etiket_service_manager-0.3.0b3-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.0b3-cp310-cp310-macosx_11_0_x86_64.whl (786.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

etiket_service_manager-0.3.0b3-cp310-cp310-macosx_11_0_arm64.whl (732.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d3e69fec27c12880480db6fc98eca4d924626cef75e44c47af6ab57781ddb037
MD5 8bd775fb89811f104e850cd5262917c7
BLAKE2b-256 62881ac0304360c4b01bc349a0fb283f3e84691465d1681232c3a3c19ebb8ef9

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b3-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.0b3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 04d2c66ba21b7630ba905f40af2b89621cb67b5a8c7843dfcdd807237e3db1c5
MD5 730a4e4508c497b20458abf99cb54da7
BLAKE2b-256 1395f868610f439c89deb468b36ee1096a5a365bf28d4998bdc25c54ff6ca3eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 2c5d6889aee5790b9e9b1a13221c9b6a27f2bf7aa2fc2a4587385f4231813e20
MD5 5fed9fbf8ccf50da1dc534a165b5074e
BLAKE2b-256 e81862d20813c8bb4968f8efb25e3051e7ded23ebc0c269e1175b121659b4190

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d9c9ff905b899b5cdddb69e5a9f1663d35a4a67df6580943e628a7fd034c38a5
MD5 c57f4f42a4617aa87136776da0c541e7
BLAKE2b-256 c864a761c6eed4c668e6d0bf800e4a13b7ff2fbc9f41da0d475383a60216a991

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8c8cb2c1eb6d086402c145f35672dd3adbbf4dee93d883b43af7f75cce308ba8
MD5 0c3afa50ccac79c986bb068759e5832b
BLAKE2b-256 2c2a86611cc709918e976d9f5eb1cf02dc18deea5c9b59c03f2b7df1f1a443bd

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b3-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.0b3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b643bcb2a2dca9296d019a8d065b4c2c05e171aeeff9f26c6d1006ac20f42fde
MD5 c11614e62cb6359863be82ce7d45b7d3
BLAKE2b-256 6ff1d82defc51a73ce8b377501cc5444d1e6bf1e8ee0d401da1da6b9135cafd8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 134067410a6e942e933b4dd07be940f4785d71b963b806ec08c1e3172b60c9fc
MD5 5227b309378377b4efa7126f5dd928cc
BLAKE2b-256 50f5d6059f42073e2b6407ea4ac4129e702eeabe542b87087211b4a550e5d4a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e7e7850b0e7c508adf30156d011746dd5a94516375a9f08a1733eb9a7f6ee0ce
MD5 53838279db2d3a974e1c154bf1f37fff
BLAKE2b-256 99c74d3bd7e1a13538a8986db6b764f304d1a5adbe5c34b8126710db0c71971f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4cdd4770e1e6d1e0c307d7f283de356af1cb0543cbaa3266d266e00fe841b547
MD5 fd0180ad3764cda0acdbe37b64b26f95
BLAKE2b-256 7e2655aac6c76901c20d06869d3ca70aa0160897467ebfe9b5f6e3792f6aac91

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b3-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.0b3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2d919c86ccd803901f18e17e807f77cd9114251a929e3ca4fd87e39b9e926c40
MD5 e56dbc2acd2dbbdb21c2f03353727e20
BLAKE2b-256 1baa1240f4c20fb92faae29bf8908fc89c2a125577169c9d5d731f5c993b9e73

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 2d21b2562f09de5b5e5a86867fbe325d32852ea808402ad8916d1ae5b800e257
MD5 d14b40ab71c5061eff436aec4a70753d
BLAKE2b-256 421d34f4919c2a3a4a74bcbd706ee03afb64e604be6e646540bdcab2ef3cea90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bbf28b34d5f4a4e1b762d9881982798130ca64437aab1ca058a1616d2a559cc7
MD5 16f33b040a5c9102aed476b65fa645d0
BLAKE2b-256 98bb45104d1acd05bca9d758ab689c5a42b5451e334eda6ef5003c7c85f9a12a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fd5bcd51852961daca9951f0c9edb4039b39254e0cf1fb3200c93f2660fe3088
MD5 1cdf663c3399a56dc71f376669edb26f
BLAKE2b-256 bf5dcf3c13f03943446986fe426cb36102660f7ea4fa61815d2739645a502324

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b3-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.0b3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1cbfbcd64beefc3b88e33771223d33cbf59b1f0b759ae7661261e742798fc88f
MD5 37da4cdc8e1ebdb4a58d7069be37fb51
BLAKE2b-256 f097dcb740876e9742e9105486ae73d56eb082899561153571d1af3d9b617527

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b771415d08cbdf1349feb6b44b75db9913fb660c07552789acda1b8220642701
MD5 a60107458bd60af128352f3e71242d36
BLAKE2b-256 b079396c20b068822722b6d39f22b3212c7f94f0d4f55e58e8ff11fb036d60b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db52350f3754973f00ab579bfb6befa79904cba3128df17eb5f8a31b8112c208
MD5 297ae66366d26e04642c613c154362b8
BLAKE2b-256 2e722aac6e3e860ae96c1c8c18257d0368de595bb6477c388deb07e1d76a1783

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c6489829f2e7586bd39e6031d38528ff01bd1f9f841c41e43485a6422c6d6669
MD5 dc0e2f36e1ed2644ce8167ea0b797676
BLAKE2b-256 d5171690f80d9391a769820f93c768502a0eed831817ce4ba14c1158529ea2b6

See more details on using hashes here.

File details

Details for the file etiket_service_manager-0.3.0b3-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.0b3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8adbf03b4bf62a35a2c428115ba07f0041bf878f96705bd3a2545979ba47eee4
MD5 890523d0839102c7a82c15bcd3bce527
BLAKE2b-256 192e55140b2d84cfd24bacfcdc7014958949ac2729ca9ad7f008f9df5be54314

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 75a92fe5ad8fb1deb2023e6c1b062c737d9c63b2e4f16883ec18a81f2ba6c9f2
MD5 a97e806a57324a778bf3334b573d8bba
BLAKE2b-256 5d991c5e3f7aeae03804c965892376976fab7a7591d7ce42163bed480e5015c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_service_manager-0.3.0b3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0bb3a403be1ed3f238e19a621ea6b34879a1729b1a552b6b10e14b7be35ccd12
MD5 4330a71ccc145d13073077e4cc27ed5e
BLAKE2b-256 21e55bcb848341e6794c7990437bfd171cd38765d04929899dd9518deb1fc4c7

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