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

Uploaded CPython 3.14Windows x86-64

etiket_api-0.3.0b4-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.0b4-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.0b4-cp314-cp314-macosx_11_0_arm64.whl (522.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

etiket_api-0.3.0b4-cp313-cp313-win_amd64.whl (498.1 kB view details)

Uploaded CPython 3.13Windows x86-64

etiket_api-0.3.0b4-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.0b4-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.0b4-cp313-cp313-macosx_11_0_arm64.whl (519.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

etiket_api-0.3.0b4-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.0b4-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.0b4-cp312-cp312-macosx_11_0_arm64.whl (523.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

etiket_api-0.3.0b4-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.0b4-cp311-cp311-macosx_11_0_x86_64.whl (590.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

etiket_api-0.3.0b4-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.0b4-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.0b4-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.0b4-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1e1853155a6450b4862580d38c20360f51b3b92a552769ed33f2eabc153f4d34
MD5 8c5c23d3a4184165443fc72134677190
BLAKE2b-256 1fe6a4703c5b86f5cf1e395e6d4bac5391e926008508f96f52568cb3c56feab3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bc648809f2504971790a6e2e9f16996e897687301ce5e9839c7b3b22c05bb97b
MD5 37660f95b75e12b2413dd8b866a76c36
BLAKE2b-256 77c7257c6ab964544949dfb4655444f8b5e5d0597f125c9361a9065b6d2b28d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 fc6083c2aee973dedf6856390d4e3b6f88eaf020b716904ec980af1a2461c391
MD5 e57b9bc9d75cfc62de0ec745746b388e
BLAKE2b-256 872ba7e30ee93aa53796a2ed03f7ceeb2d088b60a2ee25506abb38f0904a57a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e4d1bc07578b1ab74358c696369cb0ab17ed369e3e4aa3f20d996a3e038397dd
MD5 337e6b70aedeb8811b7d8f970f015619
BLAKE2b-256 0c607572016a12efc72c7592280ea407bc0f52aa82e446a8e4cedc363a0bfacc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 78bbed70944239fbc1ee283c77c1a175dc7e89e42661c735f880ad9f8fdc2ad6
MD5 9f3c44b2411d1f98a4d83952040268a9
BLAKE2b-256 ab0d56a90f1b92e95891c4b547902eb7db026da23ebd38c56d3ede2a9ae250fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 267e943cb78d5088f8dcd2ddc6775100d8df95140d0d14175197160c2845f85f
MD5 2a2c6f4e11d81cc24e366bc714dd08bf
BLAKE2b-256 53522d90e89dfec09505603bf87079576fa84d9223b7722e1a5a177bae403037

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 79b6780295f34b6f1712459d6c3226de36c071f2f78e12906d75fd8c8e672d3b
MD5 976e3850d9439cdc3a63ffc93744dc2d
BLAKE2b-256 0ac09610d07966c9902bca401cbf58a2cc829872fa34275a471c6e3c2de01132

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80fee4bbc51807b9f6c9993b91b6848c9c02e14136a96711da74b04df2fa8f90
MD5 5b3e8095e07eda797cf80fb89333eca8
BLAKE2b-256 b591f5f62ae93fb42e60a9ec4dfe3acc5d4c992caead98ac60471bd471e941f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 629034e12b1d4c179b91467df88e5ef612078f811b273483f0c066b21c983412
MD5 7e584d73266fbc9a56136f5a41a322f5
BLAKE2b-256 3c3e33a05165e8e9cd84aec4ae1d83baa3a59c5ce685b74c8337a133cc2a5621

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cef36560920ee6ca74dec86d53ccad00dfc36880500f54e2e748a400480dafe0
MD5 951b1d3c9eb9e2b7aa8ae09766a533cc
BLAKE2b-256 3e0b5031d44602aec442867d974c7373ce38b7d31b86cae97993f3327ea20991

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 c2b8f1430324fac78e234a8cfaae9b3fe479c5118a063ac65533145dad347d07
MD5 8a09c918ca377d005365959715eba24b
BLAKE2b-256 ce3e9d049df15a18fae567545b29946234c32114489d14debc79b23d4719f552

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fb581d9ee6f90f19bf0a7dc4a616bb1a4377e1934253cfb02e0ec8f663586e9d
MD5 058155acb006365cd1470f55509e31e5
BLAKE2b-256 354533de9e056bccdda6d0912aa9f9fe5126fb07c1a35f47fe284e592848594b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 154eaaa2dacc1ba22b8f93313e68edaefe540f70c688e1916f10a98455742e71
MD5 fc22b9b7efb36685c534b1534ffcb461
BLAKE2b-256 9ade0ab1ba659b665f94842d776c88ba1867088a8af1b215e3bee71a26086c60

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 57e640576da450c23d447a49a25fded7e1e342d4fbf5db45c962a916178eda66
MD5 14f68413aa444a8c838afe88ef388c2e
BLAKE2b-256 ec85a3d7aa2cfce7327a507320276f8573a7dadb72e54975e97ed78cb45d5560

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 2411581a8d2e425c7c9ccaed8def398bf3668013e791f2014ce892b209ec6eec
MD5 d48864aa41b708a36c0a01a8d19cd65a
BLAKE2b-256 9e7874ddd640411328746bddcb7d4a923d9700b0166acfe1464eb8d2de851d9c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76eda8a0eb982ca520e53cffe8fd2ae95b6df83ca825df0c2dfe6f7e297ba0f4
MD5 6bee2f5d3e0b1d2c9fc59afa03a2ed66
BLAKE2b-256 71d78af4af9173c96d5ce26e3743d4cb442ce3164d4393c4154b6aae84fbf22b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 372f34630a05763b3256c1b2c2f015df69901d66a2019221e86614f86562e19d
MD5 45c7814800dd3557f263f77f424dabd0
BLAKE2b-256 1c9790ccf5615a241ae15e98d161814d05309b8a898559a33f09a31bbf87d039

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 66d30ad14831237503fce7a13c71709ae622b4a952c390caf9a08474e56b8ace
MD5 f43444abde18cf5f0abac95ae053602e
BLAKE2b-256 060a479ef8d4aae185229dd18f309ff5f896756cc45bdbdf041821a6a868f8d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 bd00cdb1bedf788d3c61137fe0b59629a6fab2c1a90f4cc35d36061403f22d4a
MD5 c445db346cf1ae2ad52f21150bea790f
BLAKE2b-256 dadfd27a65d860f8c67b8c560ee0e21f1e1f8a7d787451a614d8270b9c552735

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_api-0.3.0b4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b8fa4558753baa5d7e0f4ca36831dd7ba0b5a5b49dc447e2090aafee2834f1a7
MD5 3461adba9665a304a06896088f4a5c1c
BLAKE2b-256 22654a3d89f94d896b2be46e7eb2e2690743739c8afd9a8f7571c0129fab1318

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