Skip to main content

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 scope_identifier 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 scope_identifier 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

Metadata

Release files for etiket-api 0.3.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for etiket-api 0.3.3
File Actions
etiket_api-0.3.3-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for etiket_api-0.3.3-cp314-cp314-win_amd64.whl
etiket_api-0.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for etiket_api-0.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.3-cp314-cp314-macosx_11_0_x86_64.whl CPython 3.14 CPython 3.14 macOS 11.0+ x86-64 Details for etiket_api-0.3.3-cp314-cp314-macosx_11_0_x86_64.whl
etiket_api-0.3.3-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for etiket_api-0.3.3-cp314-cp314-macosx_11_0_arm64.whl
etiket_api-0.3.3-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for etiket_api-0.3.3-cp313-cp313-win_amd64.whl
etiket_api-0.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for etiket_api-0.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.3-cp313-cp313-macosx_11_0_x86_64.whl CPython 3.13 CPython 3.13 macOS 11.0+ x86-64 Details for etiket_api-0.3.3-cp313-cp313-macosx_11_0_x86_64.whl
etiket_api-0.3.3-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for etiket_api-0.3.3-cp313-cp313-macosx_11_0_arm64.whl
etiket_api-0.3.3-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for etiket_api-0.3.3-cp312-cp312-win_amd64.whl
etiket_api-0.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for etiket_api-0.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.3-cp312-cp312-macosx_11_0_x86_64.whl CPython 3.12 CPython 3.12 macOS 11.0+ x86-64 Details for etiket_api-0.3.3-cp312-cp312-macosx_11_0_x86_64.whl
etiket_api-0.3.3-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for etiket_api-0.3.3-cp312-cp312-macosx_11_0_arm64.whl
etiket_api-0.3.3-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for etiket_api-0.3.3-cp311-cp311-win_amd64.whl
etiket_api-0.3.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for etiket_api-0.3.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.3-cp311-cp311-macosx_11_0_x86_64.whl CPython 3.11 CPython 3.11 macOS 11.0+ x86-64 Details for etiket_api-0.3.3-cp311-cp311-macosx_11_0_x86_64.whl
etiket_api-0.3.3-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for etiket_api-0.3.3-cp311-cp311-macosx_11_0_arm64.whl
etiket_api-0.3.3-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for etiket_api-0.3.3-cp310-cp310-win_amd64.whl
etiket_api-0.3.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for etiket_api-0.3.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.3-cp310-cp310-macosx_11_0_x86_64.whl CPython 3.10 CPython 3.10 macOS 11.0+ x86-64 Details for etiket_api-0.3.3-cp310-cp310-macosx_11_0_x86_64.whl
etiket_api-0.3.3-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for etiket_api-0.3.3-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 25.9 MB

Release files / etiket_api-0.3.3-cp314-cp314-win_amd64.whl

Download URL etiket_api-0.3.3-cp314-cp314-win_amd64.whl
Size 518.8 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
ee64204a552a0936adf2f0267e768abdf10df81e88edc79a63393c7be62de160
BLAKE2b-256 checksum
How to use checksums
993b2c5522d46b6b97ffce9eeacf8369de6783d9a7965ee4f624f91cb18162af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.5 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
63e7b1fc712f737cea33bb3461aa5af07a1e85f9848993fefcb6af2a4d1b7ac6
BLAKE2b-256 checksum
How to use checksums
25a45a764cf3d99c0cbeac6adad9bd06ceed63602a139a366b614eb2501b0cfa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp314-cp314-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.3-cp314-cp314-macosx_11_0_x86_64.whl
Size 617.3 kB
Tags CPython 3.14 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
17781958fea9c3110df0e8f61ae783e47e6eb8c461f7e783b8ff96334d907efc
BLAKE2b-256 checksum
How to use checksums
a3074dd860366188db78261feed4dea93d8afad7034fabde08666c01ea4788c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp314-cp314-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.3-cp314-cp314-macosx_11_0_arm64.whl
Size 552.9 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
054de25dccbffa630b791a83507529291898345b3eb11407aaf134d15246804e
BLAKE2b-256 checksum
How to use checksums
cf2faae9d81fb27a819a66c52ed0f649de0fc29cd86db15a5ec907ef898a1076
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp313-cp313-win_amd64.whl

Download URL etiket_api-0.3.3-cp313-cp313-win_amd64.whl
Size 507.6 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
9f72e94681f52c357b6dd44e7b6f7da3fe828e89b033b50e36fa7c25789419b7
BLAKE2b-256 checksum
How to use checksums
62d6fcb1f5ccc7e8fbefce2308e3886e035f31cdcf9e2ab8f1487736262d9849
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.5 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e58f2f1a87d08281c2bc2d868c8df70f222742c05010fcdfcc825de4c61356c3
BLAKE2b-256 checksum
How to use checksums
3eb8783ea72a9e80ed8f70da8c4966b8fa78fe597a6dd6cc01e296cccf651259
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp313-cp313-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.3-cp313-cp313-macosx_11_0_x86_64.whl
Size 614.0 kB
Tags CPython 3.13 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
2c7087ff0bfe6e7f25af0af7da3924ca4e04d8a8a71ffcf2e4e07134201df329
BLAKE2b-256 checksum
How to use checksums
26c8fa3a61f331997f0ba7dde40aca95bede27a66ac814d6af3e9fe7b4814702
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp313-cp313-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.3-cp313-cp313-macosx_11_0_arm64.whl
Size 550.1 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2c9728a15a325d8dbbc3cda6238972a477797115b658d21bedae526b84706e83
BLAKE2b-256 checksum
How to use checksums
e3b806f8a1c3bef5754e053695829c91d12b88d71276f82dbce482f882331dd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp312-cp312-win_amd64.whl

Download URL etiket_api-0.3.3-cp312-cp312-win_amd64.whl
Size 512.8 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
03953f5fe5620e1536d385ee548272a2193c1fa01e2dc94e9975c81a25628378
BLAKE2b-256 checksum
How to use checksums
bbe8f4e5999c784823120ecafd311441f09bbb652859da7a1bb31ccca677cafa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.6 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
b636c644689b322cf9fbedc0ea8dc1a84af8a64aed1ae9abf064bbd46834a8d4
BLAKE2b-256 checksum
How to use checksums
310837361e435671219843cec79f007404f6877f0b7256a8fa1ba441f01d4d40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp312-cp312-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.3-cp312-cp312-macosx_11_0_x86_64.whl
Size 616.7 kB
Tags CPython 3.12 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
c2992ce0a717e0474729fd09343d8ec3794b9139e1ff603e95f40977968a9037
BLAKE2b-256 checksum
How to use checksums
a42809b2e41f7ea9c23ca9e334c670b68f9886b166326d84a169611c6b528006
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp312-cp312-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.3-cp312-cp312-macosx_11_0_arm64.whl
Size 554.7 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d3a4af118c0be3d4b7b70ff1026dfe4f40d412d4fb9ee9aceb8cc225e8f78f84
BLAKE2b-256 checksum
How to use checksums
5ae192b8614c0c53b4c809da55631d71baef41be6fad332aeaac01c31ab128da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp311-cp311-win_amd64.whl

Download URL etiket_api-0.3.3-cp311-cp311-win_amd64.whl
Size 533.1 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
85025f9dde1a837536b9f9e7b274c87cd0b2a15cf7624b07907971b471285cd8
BLAKE2b-256 checksum
How to use checksums
ba78fe7e2cbac17f8a1b5a85dbe045be939798f28aa4d693c73f432298952ccd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.5 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cf7a3a18e4d0cb0e39d36808b94e80ba639d11de4f4f00e7181bd679db77adbf
BLAKE2b-256 checksum
How to use checksums
4973e657d589d855216f8e3817f2a191c21914f4d4a16c0c0a1eecd9d71df4a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp311-cp311-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.3-cp311-cp311-macosx_11_0_x86_64.whl
Size 607.3 kB
Tags CPython 3.11 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
95b31f4b0141c4d322a8bc6c9c526652248a930ab113d424384b0ae6c5b355e2
BLAKE2b-256 checksum
How to use checksums
84ce2c45b6ef5cfe59f0f8ed2ac0b11987f0e464d22bba8fd19e5e025c7c533c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp311-cp311-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.3-cp311-cp311-macosx_11_0_arm64.whl
Size 550.1 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cbbf0fe6a13784782686ec669f0672fa634625e2d6ded1a199345b06b80b4a39
BLAKE2b-256 checksum
How to use checksums
c984aa3ea7fbd3a534cb4c92509a39c438d521f81f289c79bebab4940b904d92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp310-cp310-win_amd64.whl

Download URL etiket_api-0.3.3-cp310-cp310-win_amd64.whl
Size 537.6 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
4f205327b84974f4f8f311b81a4564a9320eca39ac83fc0ef42defd0f9ea01d1
BLAKE2b-256 checksum
How to use checksums
2b70d6205bdabdcdec2d228433b0a8e2d6a511ff5ab6579678965d4ed5aacffc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.4 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3c4b989ad715d282ef8231ecabdfb8acb2b36569723653fcd2258acf6ba0bf0d
BLAKE2b-256 checksum
How to use checksums
52edd694d7aff225f9d19d202b7a53fd5ac23824defc46eca47524cb69f76785
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp310-cp310-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.3-cp310-cp310-macosx_11_0_x86_64.whl
Size 620.0 kB
Tags CPython 3.10 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
f435631911c0142e155c1d5fd11fea00cdddef394372224e3c0725afa55292f9
BLAKE2b-256 checksum
How to use checksums
fef3f1815195bfa190b33632c4cd2abcfc522babeb3667b2c3575d6b5d7f6e86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / etiket_api-0.3.3-cp310-cp310-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.3-cp310-cp310-macosx_11_0_arm64.whl
Size 560.3 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6b18beea8557e02903ec31da6cc734cb2af7770b9a60bddc843ca13c88cde775
BLAKE2b-256 checksum
How to use checksums
fee494ecf6203639dc534fef9953fed33874b1f11d33bcd372d2af27f6b0a94f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for etiket-api 0.3.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page