Skip to main content
Pre-release

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

eTiKeT API

REST and Python API for the eTiKeT platform. This package provides the local API service that allows external tools (like the eTiKeT SDK) to interact with the sync agent and manage local authentication.

Overview

The eTiKeT API runs as a local service. It provides:

  • REST API: HTTP endpoints for authentication, sync management, and more
  • Python API: Direct Python functions for internal use

Note: Most users should use the eTiKeT SDK instead of calling this API directly. The SDK provides a simpler, higher-level interface.

Installation

pip install etiket-api

Running the Service

Normally, the sync API runs as a system service in the background (managed by the eTiKeT installer). However, you can run it manually for development or debugging:

python3.11 -m etiket_api

By default, the service runs on http://localhost:10410. The interactive API documentation is available at http://localhost:10410/docs (Swagger UI).


REST API Overview

The REST API is available at http://localhost:10410/api/v1/. Interactive API documentation is available at http://localhost:10410/docs (Swagger UI).

Local API Tokens

Manage API tokens stored on this machine. Tokens allow background sync to authenticate with the server without an active login session.

Method Endpoint Description
POST /auth/local/api-tokens Create a new API token for the current user
GET /auth/local/api-tokens List all locally stored API tokens
DELETE /auth/local/api-tokens/{uid} Revoke a token on the server and delete it locally
GET /auth/local/api-tokens/{uid}/check Check if a token is still valid

Sync Agent

Manage the background sync agent service.

Method Endpoint Description
GET /sync/agent/status Get current sync agent status
GET /sync/agent/errors Get sync agent errors (paginated, optional viewed filter)
PATCH /sync/agent/errors/{error_id} Update a sync-agent error record (currently only the viewed flag)
POST /sync/agent/errors/mark-all-viewed Mark all sync-agent errors as viewed. Returns the number flipped
POST /sync/agent/start Start the sync agent
POST /sync/agent/stop Stop the sync agent
POST /sync/agent/report-error Send an error report to qHarbor
GET /sync/agent/error-report Get an error report for manual sending

Sync Sources

Manage sync sources — configurations that define where data comes from.

Method Endpoint Description
GET /sync/sources List all sync sources
POST /sync/sources Create a new sync source
GET /sync/sources/{id} Get a sync source by ID
GET /sync/sources/name/{name} Get a sync source by name
PATCH /sync/sources/{id} Update a sync source
DELETE /sync/sources/{id} Delete a sync source
POST /sync/sources/{id}/start Start a sync source
POST /sync/sources/{id}/stop Stop a sync source
POST /sync/sources/{id}/take-ownership Claim ownership of a sync source for the current user (overwrites any existing owner)
POST /sync/sources/{id}/release-ownership Release ownership of a sync source. Idempotent — any logged-in user may call (no-op when already unowned)
POST /sync/sources/{id}/reset-sync-items Reset sync items (retry failed or all)
GET /sync/sources/{id}/errors Get sync source errors (paginated, optional viewed filter)
PATCH /sync/sources/{id}/errors/{error_id} Update a sync-source error record (currently only the viewed flag)
POST /sync/sources/{id}/errors/mark-all-viewed Mark all errors of a sync source as viewed. Returns the number flipped
GET /sync/sources/connectors List available connectors
POST /sync/sources/{id}/report-error Send an error report to qHarbor
GET /sync/sources/{id}/error-report Get an error report for manual sending
POST /sync/sources/{id}/scope-mappings Create a new scope mapping
PATCH /sync/sources/{id}/scope-mappings/{identifier} Update a scope mapping
DELETE /sync/sources/{id}/scope-mappings/{identifier} Delete a scope mapping
GET /sync/sources/{id}/scope-mappings/unmapped Get unmapped scope identifiers
POST /sync/sources/{id}/scope-mappings/autoassign Auto-assign scope mappings

Sync Items

Manage sync items — individual datasets to be synchronized.

Method Endpoint Description
GET /sync/items?source_id=... List sync items (with filtering and pagination)
GET /sync/items/{id} Get a sync item by ID
PATCH /sync/items/{id}/reset Reset a sync item for retry
PATCH /sync/items/{id}/prioritize Prioritize a sync item
POST /sync/items/{id}/report-error Send an error report to qHarbor
GET /sync/items/{id}/error-report Get an error report for manual sending

Sync Connectors

Manage sync connector packages.

Method Endpoint Description
GET /sync/connectors List installed connectors
POST /sync/connectors/install/pypi Install a connector from PyPI
POST /sync/connectors/install/local Install a connector from local path
POST /sync/connectors/update/pypi Update a connector from PyPI
POST /sync/connectors/update/local Update a connector from local path
DELETE /sync/connectors/{name} Uninstall a connector

Sync Converters

Manage converter packages for file format conversion.

Method Endpoint Description
GET /sync/converters List installed converters
POST /sync/converters/install/pypi Install a converter from PyPI
POST /sync/converters/install/local Install a converter from local path
POST /sync/converters/update/pypi Update a converter from PyPI
POST /sync/converters/update/local Update a converter from local path
DELETE /sync/converters/{name} Uninstall a converter

Admin

Inspect service state for support and debugging.

Method Endpoint Description
GET /admin/logs/{service}?n=... Return the most recent N lines of a service's log file. service is api or sync_agent. Pass n=-1 to return the full file (default n=500)

Error Handling

All API errors return a consistent JSON error model:

{
  "error": "sync_source_not_found",
  "detail": "Sync source with id 123 not found"
}
  • error: A machine-readable error code (snake_case)
  • detail: A human-readable error message (optional)

Error Codes Reference

General Errors

Error Code Status Description
server_error 500 An internal server error occurred
server_unreachable 502 The remote server cannot be reached

Auth Errors

Error Code Status Description
no_user_logged_in 401 No user is currently logged in
user_already_has_token 409 User already has a local token (delete first)
token_not_found 404 Token uid not found in local database

Sync Agent Errors

Error Code Status Description
sync_agent_not_installed 503 Sync agent service is not installed
sync_agent_already_running 409 Sync agent is already running
sync_agent_already_stopped 409 Sync agent is already stopped
sync_status_error_not_found 404 Sync-status error record not found by id

Sync Source Errors

Error Code Status Description
sync_source_not_found 404 Sync source not found
sync_source_scope_not_found 404 Default scope not found
sync_source_connector_not_found 404 Connector not found
sync_source_name_already_taken 409 Source name already exists
sync_source_already_running 409 Sync source is already running
sync_source_already_stopped 409 Sync source is already stopped
sync_source_config_error 422 Invalid configuration
sync_source_connector_has_no_owner 422 Take-ownership called on a source whose connector does not support ownership (has_owner=False)
sync_source_error_not_found 404 Sync-source error record not found by id
scope_mapping_not_found 404 Scope mapping not found for identifier
scope_mapping_already_exists 409 Scope mapping already exists for identifier
scope_mapping_invalid_scope 404 Target scope UUID does not exist

Sync Item Errors

Error Code Status Description
sync_item_not_found 404 Sync item not found
sync_item_scope_mapping_not_found 404 Sync item has a scopeIdentifier but no mapping exists

Connector Errors

Error Code Status Description
connector_not_found 404 Connector not found
connector_install_failed 422 Connector installation failed
connector_update_failed 422 Connector update failed
connector_uninstall_failed 422 Connector uninstall failed
connector_invalid_package_path 422 Invalid local package path

Converter Errors

Error Code Status Description
converter_not_found 404 Converter not found
converter_install_failed 422 Converter installation failed
converter_update_failed 422 Converter update failed
converter_uninstall_failed 422 Converter uninstall failed
converter_invalid_package_path 422 Invalid local package path

Admin Errors

Error Code Status Description
log_file_not_found 404 Requested service's log file does not exist on disk

Python API

The Python API provides direct access to functionality. It's primarily intended for internal use by the REST API layer and the sync agent itself.

Local API Tokens

from etiket_api.python_api.auth.local.api_tokens import (
    create_api_token,
    list_api_tokens,
    delete_api_token,
    check_api_token,
)

# Create a token for the current user
token = await create_api_token(name="my-sync-token")
print(token.api_token)  # only shown on create

# List all local tokens
tokens = await list_api_tokens()
for t in tokens:
    print(f"{t.user_name}: {t.api_key_name} ({t.server_url})")

# Check if a token is still valid
result = await check_api_token(api_key_uid="...")
print(result.valid)

# Delete a token (revokes on server first)
await delete_api_token(api_key_uid="...")

Sync Agent

from etiket_api.python_api.sync.sync_agent import (
    get_sync_status,
    get_sync_errors,
    start_sync_agent,
    stop_sync_agent,
    set_sync_status_error_viewed,
    mark_all_sync_status_errors_viewed,
)

# Get current status
status = await get_sync_status()

# Fetch only unviewed errors (UI "unread" pane)
unread = await get_sync_errors(limit=10, skip=0, viewed=False)

# Mark one as viewed; or mark all of them
await set_sync_status_error_viewed(error_id=unread[0].id, viewed=True)
flipped = await mark_all_sync_status_errors_viewed()

# Start/stop the agent
await start_sync_agent()
await stop_sync_agent()

Sync Sources

from etiket_api.python_api.sync.sync_sources import (
    list_sync_sources,
    get_sync_source,
    get_sync_source_by_name,
    update_sync_source,
    delete_sync_source,
    start_sync_source,
    stop_sync_source,
    list_sync_source_definitions,
    reset_sync_source_sync_items,
    take_ownership,
    release_ownership,
    # Scope mapping functions
    create_scope_mapping,
    update_scope_mapping,
    delete_scope_mapping,
    get_unmapped_scope_identifiers,
    autoassign_scope_mappings,
    # Exceptions
    SyncSourceAlreadyRunningError,
    SyncSourceAlreadyStoppedError,
)

# List all sources
sources = list_sync_sources()

# Get a specific source
source = get_sync_source(source_id=1)
source = get_sync_source_by_name("my_source")

# Start/stop a sync source
try:
    source = start_sync_source(source_id=1)
except SyncSourceAlreadyRunningError:
    print("Source is already running")

try:
    source = stop_sync_source(source_id=1)
except SyncSourceAlreadyStoppedError:
    print("Source is already stopped")

# Reset failed sync items for a source (to retry them)
reset_count = reset_sync_source_sync_items(source_id=1)
print(f"Reset {reset_count} failed items")

# Reset ALL sync items (including successful ones)
reset_count = reset_sync_source_sync_items(source_id=1, include_successful=True)
print(f"Reset {reset_count} items (all)")

# List available connectors
connectors = list_sync_source_definitions()

# Claim ownership of a sync source for the current user (overwrites any existing owner)
source = await take_ownership(source_id=1)
print(source.owner)

# Release your own ownership (errors if you are not the current owner)
source = await release_ownership(source_id=1)
assert source.owner is None

# Error-log "viewed" management
from etiket_api.python_api.sync.sync_sources import (
    read_sync_source_errors,
    set_sync_source_error_viewed,
    mark_all_sync_source_errors_viewed,
)

# Fetch only unviewed errors (UI "unread" pane)
unread = await read_sync_source_errors(source_id=1, viewed=False)

# Mark one error as viewed, or un-view it
await set_sync_source_error_viewed(error_id=unread[0].id, viewed=True)

# Mark everything as viewed in one shot; returns the count flipped
flipped = await mark_all_sync_source_errors_viewed(source_id=1)

Scope Mappings

Scope mappings are used when a connector provides per-item scope routing. Each sync item may have a scopeIdentifier string that needs to be mapped to an actual scope UUID.

import uuid
from etiket_api.python_api.sync.sync_sources import (
    create_scope_mapping,
    update_scope_mapping,
    delete_scope_mapping,
    get_unmapped_scope_identifiers,
    autoassign_scope_mappings,
)

# Find identifiers that don't have a mapping yet
unmapped = get_unmapped_scope_identifiers(sync_source_id=1)
print(f"Unmapped identifiers: {unmapped}")

# Create a mapping from identifier to scope UUID
mapping = create_scope_mapping(
    sync_source_id=1,
    scope_identifier="my_scope_identifier",
    scope_uuid=uuid.UUID("12345678-1234-1234-1234-123456789abc"),
)

# Update an existing mapping to point to a different scope
mapping = update_scope_mapping(
    sync_source_id=1,
    scope_identifier="my_scope_identifier",
    scope_uuid=uuid.UUID("87654321-4321-4321-4321-cba987654321"),
)

# Delete a mapping
delete_scope_mapping(sync_source_id=1, scope_identifier="my_scope_identifier")

# Auto-assign mappings based on scope name matching
# (creates mappings where identifier matches exactly one scope name)
created_count = autoassign_scope_mappings(sync_source_id=1)
print(f"Auto-assigned {created_count} mappings")

Sync Items

from etiket_api.python_api.sync.sync_items import (
    list_sync_items,
    get_sync_item,
    reset_sync_item,
    prioritize_sync_item,
)

# List items for a source
items = list_sync_items(source_id=1)

# Get a specific item
item = get_sync_item(sync_item_id=123)

# Reset or prioritize an item
reset_sync_item(sync_item_id=123)
prioritize_sync_item(sync_item_id=123)

Connectors

from etiket_api.python_api.sync.connectors import (
    list_connectors,
    install_connector_from_pypi,
    install_connector_from_local_path,
    update_connector_from_pypi,
    uninstall_connector,
)

# List installed connectors
connectors = list_connectors()

# Install from PyPI
install_connector_from_pypi("etiket-sync-agent-qcodes")

# Install from local path
install_connector_from_local_path("/path/to/my-connector")

# Update from PyPI
update_connector_from_pypi("etiket-sync-agent-qcodes")

# Uninstall
uninstall_connector("etiket_sync_agent_qcodes")

Converters

from etiket_api.python_api.sync.converters import (
    list_converters,
    install_converter_from_pypi,
    install_converter_from_local_path,
    update_converter_from_pypi,
    uninstall_converter,
)

# List installed converters
converters = list_converters()

# Install from PyPI
install_converter_from_pypi("my-converter-package")

# Install from local path
install_converter_from_local_path("/path/to/my-converter")

# Update from PyPI
update_converter_from_pypi("my-converter-package")

# Uninstall
uninstall_converter("my_converter")

Admin / Logs

from etiket_api.python_api.admin.logs import (
    LogService,
    get_recent_log_lines,
)

# Read the last 500 lines of the API's log file
lines = get_recent_log_lines(LogService.api, n=500)
for line in lines:
    print(line)

# Read the entire log file (up to the 10 MB rotation cap)
all_lines = get_recent_log_lines(LogService.sync_agent, n=-1)

Architecture

┌─────────────────────────────────────────────────────────────┐
│                      eTiKeT SDK                             │
│                   (User-facing Python SDK)                  │
└─────────────────────────┬───────────────────────────────────┘
                          │ HTTP
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                      eTiKeT API                             │
│  ┌──────────────────┐   ┌──────────────────────────────┐    │
│  │    REST API      │   │        Python API            │    │
│  │    (FastAPI)     │──▶│   auth/local, sync/agent,    │    │
│  │                  │   │   sync/sources, sync/items.. │    │
│  └──────────────────┘   └──────────────────────────────┘    │
└─────────────────────────────────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                   eTiKeT Sync Agent                         │
│            (Background synchronization service)             │
└─────────────────────────────────────────────────────────────┘

Requirements

  • Python 3.10+
  • etiket_sync_agent
  • etiket_client

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_api-0.3.0b3-cp314-cp314-win_amd64.whl (506.6 kB view details)

Uploaded CPython 3.14Windows x86-64

etiket_api-0.3.0b3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

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

etiket_api-0.3.0b3-cp314-cp314-macosx_11_0_x86_64.whl (583.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

etiket_api-0.3.0b3-cp314-cp314-macosx_11_0_arm64.whl (522.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

etiket_api-0.3.0b3-cp313-cp313-win_amd64.whl (498.2 kB view details)

Uploaded CPython 3.13Windows x86-64

etiket_api-0.3.0b3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (3.4 MB view details)

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

etiket_api-0.3.0b3-cp313-cp313-macosx_11_0_x86_64.whl (583.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

etiket_api-0.3.0b3-cp313-cp313-macosx_11_0_arm64.whl (519.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

etiket_api-0.3.0b3-cp312-cp312-win_amd64.whl (505.0 kB view details)

Uploaded CPython 3.12Windows x86-64

etiket_api-0.3.0b3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (3.5 MB view details)

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

etiket_api-0.3.0b3-cp312-cp312-macosx_11_0_x86_64.whl (585.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

etiket_api-0.3.0b3-cp312-cp312-macosx_11_0_arm64.whl (523.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

etiket_api-0.3.0b3-cp311-cp311-win_amd64.whl (518.9 kB view details)

Uploaded CPython 3.11Windows x86-64

etiket_api-0.3.0b3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (3.4 MB view details)

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

etiket_api-0.3.0b3-cp311-cp311-macosx_11_0_x86_64.whl (590.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

etiket_api-0.3.0b3-cp311-cp311-macosx_11_0_arm64.whl (529.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

etiket_api-0.3.0b3-cp310-cp310-win_amd64.whl (515.8 kB view details)

Uploaded CPython 3.10Windows x86-64

etiket_api-0.3.0b3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (3.2 MB view details)

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

etiket_api-0.3.0b3-cp310-cp310-macosx_11_0_x86_64.whl (599.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

etiket_api-0.3.0b3-cp310-cp310-macosx_11_0_arm64.whl (535.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d858eec233c763d531a519b9d5a9e8779ecd8f9c02ebe1021a979f36ac7823ef
MD5 2643cd95bb197d5a998251c7267e4083
BLAKE2b-256 332bf2ad0be26f94541f7f7e99a382d6e1c2d9018f1d39e47961440e10a23238

See more details on using hashes here.

File details

Details for the file etiket_api-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_api-0.3.0b3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 efca2d457b109474b70ad909ce41d189198aed4588f5d22d7092500b1406e8f9
MD5 e8d3dc018b3baf263abd0ff21038d6bb
BLAKE2b-256 5c7d517f043bbd1aa66ddaf0fdbc59467c522256eec56610367051917aff4d5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0b1a10e5a50a73601e3f3bed1f3bcb6932e5912f762fe343aa0c68b4cb2dd01b
MD5 a3e76769dfa294232197f73ade467968
BLAKE2b-256 7192de671f16d6236b787bfdd12ba64830a688bf35f3b51a49e48cdd2ef4d53e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8bb92c2807e0d361d1dd232c2cc695b63243021d9062f6dadf292a0f44ed602c
MD5 9f17f93e527e5228f08832a7bbe57424
BLAKE2b-256 10e59512c7c684c17df51a5bd5a031faa84558f95d1b79878139a56bff352d4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e97bbd42f825bbd15c2bda56b5f15a5fb4cf3382f537d41d74f910a365761793
MD5 3f06896b3f69dd7428ecd73aa5e19c6e
BLAKE2b-256 b2579fea17c15acbe0db34131b60e901194eae71721e64217775429e4b29a5b9

See more details on using hashes here.

File details

Details for the file etiket_api-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_api-0.3.0b3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ed11b6b741ea99eba9d9313e0733157b6c5fe30e118cdf3eacc06d1bf0ff0abf
MD5 4f551ac8fc49a97d41ae0efcc05fa68c
BLAKE2b-256 903ba7be772c4858cbe34b35ba5de328df3e6c8995770fab0111c1b612163c8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 291a09f6708af63227cfbd1fd5820438a3f17a99c4015254843d4a40cd64268b
MD5 ec118fa6da0a83feb849a884269b5542
BLAKE2b-256 f4baeae25d6f3b97cd37a52aa46cc8411a5a4668f5a1c87d7b12eafcf09b2230

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7ee0f1f5980d25117a4ac6e0cbc8a290ba5b6b38f918ad25e2ee73d6650d3457
MD5 fe85ea036a589268b90e49c7d5506357
BLAKE2b-256 9726b054931cfabd54d8d8aac5bc8cb686cfecf33bd7bcdfc42f5bef872059a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2846d53441cdd57ce070ebb3f5ad12201071d40ec2e3806ef5cc1a044495fc7b
MD5 845598c38c47db13db4af0d16730c14f
BLAKE2b-256 4a58295a1966346536207b796d5cccd81c573ceec032d948aa924bd667290e78

See more details on using hashes here.

File details

Details for the file etiket_api-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_api-0.3.0b3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 042ef7e9f5c4fb66b07ff93a180253468754efaacaa22afaef68155b4abcc884
MD5 903b9ff0170172dc05a96493c9c9fceb
BLAKE2b-256 6bfbd07a502654f38a8e0dcb5eb8d50f76c785e6f08d03536110fa93ca050e31

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4ab1aca2f114875daf36c4c486efe29f5624abea1dfe90a4938714267c7e393f
MD5 964f021606a7ca35576e56fea99d512a
BLAKE2b-256 3fc574ad3723d3c5ea158fb51a4a8a596eea62afc2b1824c5cf0ce94f403805c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a18afa8c11791311d7349203d0e9bb82c07467cfecab784fc0fda3c15eaee5d
MD5 4389cb22f8406dbee1777360d728c4cd
BLAKE2b-256 98dc234832a78d2c8dda4eb4efa0128c24a77684e7f553cf994848677e99f50f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 709e1e0db411162744bea56d54fd23318828f6ec4e75c786564890d20816279e
MD5 29c213a14583ea0b032efcd2eeb77ffd
BLAKE2b-256 594fb211792a969880847d9221e7130befc79668eb63f1206485261b43da4ad6

See more details on using hashes here.

File details

Details for the file etiket_api-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_api-0.3.0b3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 21628054581091bb6165af3eed54fd2103c73db2d792cfdc52e57016c4c64749
MD5 eb5c646ffa4e985dc26ab166bad06cea
BLAKE2b-256 743429e6746ef25afccf80243d5f5a86c56c0f7dfea1fed4c5d713a2f1bf8a7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b1c45b732e22fbfdb5106f1b642cf2846cd69de9723f03068c062fd0fa10276a
MD5 ef88d31b7cbc69a4b6e7c5464590c8c2
BLAKE2b-256 34af0f5f06581ebc62adf54178529baf2aa186c45d1869084ba6bb77510a715d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 62e9e520addae14dfc89b4fe9c3ccc69b4bba25f69b671f498c1c572df750189
MD5 a04704cdac96d718091c45d32fe8f985
BLAKE2b-256 3f1478b089013d5d73504adca2cf878ab42ccaa6c0176e5840c67ab7eacfc961

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d182c92cc9db6ee36dd14df3ae23ae165bb7d24d5555b6d2dc220636850d05ea
MD5 b1c6af7edd7daca96a0629cc0a146b30
BLAKE2b-256 423a3a8fbdbfe06e69ab23d91e3e3781acba5c29762385368c34ad849879cbeb

See more details on using hashes here.

File details

Details for the file etiket_api-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_api-0.3.0b3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 531ab1ccaa7fe50d92a33ea34d862f457f13d87104873ff952d1dc7c217cecca
MD5 9d713f2d41092738a03c0c67add842c4
BLAKE2b-256 7edbb6c0cc833848e26d496faa3428927151fa114a8cd91d3711a184d18ea8a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 3823d22c8240f5e96bb01bfc735b2120b1c2360a3c36baabf7e68f52921b8bfb
MD5 54ece661f5df67bdb1e4d50b77de6dab
BLAKE2b-256 a1fdcf29931a51e38760c69ea9b4a35d52ddd7b9ee6092545d3f531acde73f5c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a7d380440aab1fb42efe0e56bcf6c5c2aa2b0eeb1c30d9f9980c78699df393e5
MD5 6c7d2044dcb2f8e1ba0cf705343a706a
BLAKE2b-256 ba4654dc96f33c1d1906fb2096c490fef16b9d70a3c38d0fd94a4cebd98da2d9

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