Skip to main content
Pre-release

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

eTiKeT Sync Agent

A Python library for synchronizing scientific data from various connector sources to the eTiKeT platform.

Overview

The eTiKeT Sync Agent provides a unified interface for automatically discovering and synchronizing experimental datasets from different data acquisition systems. It supports both database-backed sources (e.g., QCoDeS, Core-tools) and file-based sources (e.g., Quantify, Labber, generic folder structures).

Key Features

  • Plugin-based connector system — Easily extensible architecture using Python entry points
  • Multiple data source support — Native eTiKeT, QCodes, Quantify, Labber, Core-tools, and generic folder-based sources
  • Live dataset synchronization — Real-time sync for ongoing measurements
  • File converters — Transform data formats during synchronization
  • Persistent tracking — SQLite database for tracking the sync state of each dataset
  • Manifest-based file monitoring — Efficient change detection for file-based sources

Supported Connectors

Connector Type Description
etiket_sync_agent_native Native eTiKeT native datasets
etiket_sync_agent_folderbase File-based Generic folder structures
etiket_sync_agent_qcodes Database QCoDeS measurement databases
etiket_sync_agent_quantify File-based Quantify scheduler data
etiket_sync_agent_labber File-based Labber measurement files
etiket_sync_agent_core_tools Database Core-tools measurements

Installation

We recommend using the qdrive package to install and manage the sync agent as a background service. See the QHarbor documentation for setup instructions.

For standalone installation:

pip install etiket_sync_agent

Install connectors as needed:

pip install etiket_sync_agent_qcodes
pip install etiket_sync_agent_quantify

Usage

The sync agent is typically run as a background service managed by the qdrive package. Once configured, it continuously monitors your data sources and synchronizes new datasets to eTiKeT.

Running Manually

To run the sync agent manually:

python -m etiket_sync_agent

For more control (e.g., enabling debug logging), you can run the sync loop directly:

import logging
import sys

# Configure logging
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    handlers=[logging.StreamHandler(sys.stdout)]
)

from etiket_sync_agent.run import sync_loop

# Run sync loop: 0 = run indefinitely, N = run N iterations
sync_loop(0)

CLI Tools

The package provides CLI tools to scaffold new connectors and converters. These scaffolds give you a ready-to-use package structure with all the boilerplate code in place—just fill in your implementation logic.

How It Works

The generated packages include pre-configured entry points in their pyproject.toml. Once installed, the sync agent automatically discovers and registers these connectors or converters via Python's entry points mechanism.

Tip: For working examples, check out the existing connector packages like etiket-sync-agent-qcodes on PyPI.

Need help? Contact us at support@qharbor.nl.


Generate Connector Scaffold

Creates a new sync agent connector package for synchronizing data from a specific source (e.g., a database, file system, or instrument).

generate_sync_agent_scaffold <connector> [options]

Arguments:

Argument Description
connector Identifier for your connector (e.g., qcodes, labber, my-instrument)

Options:

Option Default Description
--version 0.0.1 Initial package version
--dependency Add a dependency (repeatable). You can also edit pyproject.toml manually.
--base database Base class template: database or file (see below)
--default-scope REQUIRED Scope assignment policy (see below)
--live-sync False Set to True if you plan to implement live synchronization
--level -1 File-based only. Directory level for dataset detection (see below)

Understanding --base:

  • database — Use when syncing from a database (e.g., SQLite from QCoDeS). The sync agent queries the database for new datasets.
  • file — Use when syncing folder-based datasets where each folder or file represents a dataset.

Understanding --default-scope:

  • REQUIRED — Users must specify the target scope (project/folder) for each sync source.
  • OPTIONAL — A default scope can be inferred, but users may override it.
  • DISABLED — The connector determines the scope automatically; users cannot change it.

Understanding --level (file-based only):

  • -1 — Every folder containing a _QH_dataset_info.yaml file becomes a dataset.
  • 1 — Each immediate subfolder of the root is a dataset.
  • 2+ — Folders at that depth level become datasets.

Example — Database Connector:

# Create a connector for a custom SQLite database
generate_sync_agent_scaffold my-connector \
    --base database \
    --dependency "sqlalchemy>=2.0" \
    --default-scope REQUIRED

This generates:

etiket-sync-agent-my-connector/
├── pyproject.toml                      # Package config with entry points
└── etiket_sync_agent_my_connector/
    ├── __init__.py                     # Exports sync and config classes
    ├── my_connector_config_class.py   # Configuration dataclass
    └── my_connector_sync_class.py     # Sync logic (implement this)

Example — File-based Connector:

# Create a connector for experiment folders at depth level 2
generate_sync_agent_scaffold lab-data \
    --base file \
    --level 2 \
    --live-sync

Generate Converter Scaffold

Creates a new file converter package for transforming file formats during synchronization (e.g., CSV → HDF5). Converters are used by default in the folderbase connector, but you can also use them in your own custom connectors.

generate_converter_scaffold <converter> [options]

Arguments:

Argument Description
converter Identifier for your converter (e.g., csv-to-hdf5, mat-to-zarr)

Options:

Option Default Description
--version 0.0.1 Initial package version
--dependency Add a dependency (repeatable)
--entry-name Custom entry point name (defaults to sanitized converter name)

Example:

# Create a converter for CSV to HDF5
generate_converter_scaffold csv-to-hdf5 \
    --dependency h5py \
    --dependency pandas

This generates:

etiket-sync-agent-csv-to-hdf5-converters/
├── pyproject.toml                           # Package config with entry points
└── etiket_sync_agent_csv_to_hdf5_converters/
    ├── __init__.py                          # Exports converter class
    └── csv_to_hdf5_converter.py             # Converter logic (implement this)

After implementing your converter, install it and the sync agent will automatically use it for matching file types.

License

See LICENCE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

etiket_sync_agent-0.3.0b3-cp314-cp314-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.14Windows x86-64

etiket_sync_agent-0.3.0b3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.5 MB view details)

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

etiket_sync_agent-0.3.0b3-cp314-cp314-macosx_11_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

etiket_sync_agent-0.3.0b3-cp314-cp314-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

etiket_sync_agent-0.3.0b3-cp313-cp313-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.13Windows x86-64

etiket_sync_agent-0.3.0b3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.6 MB view details)

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

etiket_sync_agent-0.3.0b3-cp313-cp313-macosx_11_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

etiket_sync_agent-0.3.0b3-cp313-cp313-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

etiket_sync_agent-0.3.0b3-cp312-cp312-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.12Windows x86-64

etiket_sync_agent-0.3.0b3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.8 MB view details)

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

etiket_sync_agent-0.3.0b3-cp312-cp312-macosx_11_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

etiket_sync_agent-0.3.0b3-cp312-cp312-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

etiket_sync_agent-0.3.0b3-cp311-cp311-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.11Windows x86-64

etiket_sync_agent-0.3.0b3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.5 MB view details)

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

etiket_sync_agent-0.3.0b3-cp311-cp311-macosx_11_0_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

etiket_sync_agent-0.3.0b3-cp311-cp311-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

etiket_sync_agent-0.3.0b3-cp310-cp310-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.10Windows x86-64

etiket_sync_agent-0.3.0b3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (8.2 MB view details)

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

etiket_sync_agent-0.3.0b3-cp310-cp310-macosx_11_0_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

etiket_sync_agent-0.3.0b3-cp310-cp310-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 97df2975a332268f3ab5ea3cd7b203e320c13ad192c60f62a58dfc9f247f835e
MD5 db8a77193dbefc1a72aa0b2705aa96c2
BLAKE2b-256 8583d70d2112c364e5622b0722b2766d10224094969362b284ccaed30f919d22

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0d2d142978f37e820409b97b857fd8dc0d60e263a63347031b8ea252a80c187c
MD5 04e4df1f0e930a9d18ec6fc573f4a184
BLAKE2b-256 fb51277f322340f904d097e28b2ec240381adae4b5396f016be55db5dbbdbcd3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 1c5fdb3359555b17bcd3d43f757502e78c91fd3c445f157388e224b6bc1f67bd
MD5 b0c5201b07a105f79f5e0e3f5fd84d15
BLAKE2b-256 6a5cf601172ce716d26dfa06aa3913ef6ac0c3da4d43ee4d6469667399d451b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0277f3eb32245c3b265da04dc45e28874abfbbb2264f07186bdfdbb92558a2e6
MD5 387206585244bfe021bc48bbe2c15cde
BLAKE2b-256 2922b67fa34c03886169e771045fe5e8001b44449de2a5d6ed244561415da6ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3583d8a104ee6261b83ab776fe7d1ca59d22c178eccdb55fe2c97c77830144f0
MD5 eca364cd48ebbc233d6e4d0709db5054
BLAKE2b-256 ba70466728842cbbb8e2a26bc88a0d51bc2e4ba81232c4ff42dd9965970c8575

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9c5a3a31cf9ae2f73f75fbad2f75fc53bb3490a5979d805b8441510a0db6a527
MD5 dba7a69b72165d440082380107ebbb4c
BLAKE2b-256 312dc4e2924022bdf6c98f51a5bb20dc5223173a73f13de0fa948bca49519ea1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 dfb3799c5b3345fa1ce85b315ab7eb46ba0508ca4a32b8bc80ec71425e324827
MD5 403d03a0c83b78e85c2adfa41ea5b9b6
BLAKE2b-256 52fc63e9e5f5f6ba4a534b46ca81212249f372ce2f17f10593e78256c1c98d5d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dee369ad2ece1434b3a5a3b2d5b87984e8a08910882b622a727d0c4be032e2fb
MD5 212a70ac9d59ef1e2350634631847664
BLAKE2b-256 e6c28ab75d732f5e19003dc6a9808393a7d4a81c537971c7b84d19dd4244174e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 da31909fc2dc4c65df0450ca5188c068801a797bd451455ff4e96b1dd825f612
MD5 085b52216ad78f7108cb3a8867dea581
BLAKE2b-256 4ac11b177b87859ba49547de8b03bcd97a948dd9754e333f2d595ef4c56e6ec4

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7a026099f59220daf0e4baf6af61964fccb39593d3b8871c5df6c3513d54f5df
MD5 ffb3faa3d830f46d0b08d203f08a8aae
BLAKE2b-256 abd21022c74e46b4e34cf7eecd1f8f19677113bdf516f7ef5d3a614d44c7d87b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 a1ab364778934bad785d952c8475d39b4912dff3f75a93172a57e768814df455
MD5 22925926089b31423a42e3d0a35dbefc
BLAKE2b-256 bdb49958e9fddf290bedb95d6df1c770fe6a0aeea8c8860cf098139643809903

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2bf522ac22e4c02cc54b41b747c27fcdeb1710ea672dba5b7264379f02f8463e
MD5 099f12002f3f726945767eadf3ca0584
BLAKE2b-256 50ebad5d63ee80f1a2765b3e411a530f37bdcf4edfa7f465a4fd549e0975b90c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9d258ffe6bb0d6e284a801372ec48612067096fc55150fd38be6de79df17bdab
MD5 7948caee2e7b84ebfef1d5540be9539b
BLAKE2b-256 39c9f9ed6ede7b1d68f826af3ac6a3089273380ab0c08afb7a669fe11531420b

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3778f4050e1bce2babdcce2e24e6b20050efd26bf8873989c9efff60ee2ce6ab
MD5 ab9bf3f07965b4913ac89f55a6992249
BLAKE2b-256 18c8928a08c23143bc584a014da171992204f7bd63ab3f0eeebd0e20c12921e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 243145b132c7d3c710ee8e9a88c56ff8b99c57b3876dd0662cee6fa5f0519951
MD5 e3af64e3efa0fa5ffa173d545d503967
BLAKE2b-256 96acb696a44b9c5d7d1a5a024b3ab1b967e8c0d7391575757baf764f97145d6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ffa203b69050f9332b1852596561db7c5bb134a7d8b1dc918b5d22d1a57210fc
MD5 4bc708e10763c473a52c9e14b545638a
BLAKE2b-256 0c9007cb9c1ae7344ba761f696415210d42b5e6a97865ce28fb0f5a4150bc5f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7fa920a471787f8a62169bee57feedc78c78708bead0872abd4d939dbcb4989f
MD5 2237febadc89b1ff9129e0e4ed70de75
BLAKE2b-256 fae1b51b4ee706432c5e4d39d6a98717296342919c0c915109a668fdb5c25fbe

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8be8bdd9d06f5175b1a7ec9596cf001036df912549c6c293d4674232aacbe995
MD5 9dad313c08fe7794aad90a0b0a13fb50
BLAKE2b-256 31d530e6fbaf4de8e9f02eb15da58950fd88986dcb557bfd8b646f361adae026

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 2efa0e02684e8e9267bc776d439ffc20083fcfaa2f264c659bb0170f33a1f6d8
MD5 295fe277e5822c38dca3c165d2b13ca6
BLAKE2b-256 66f3afb5c46586cc4dcf979c9250df58c628f7876ad61ecc4d53ac41e18b53d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9de58a2d0b1b6e9b5f0b314efca1979b49d3a7699541f46f1a9ba4c1283d8199
MD5 9d41ea6e65d0242f96427d7256c4b7bc
BLAKE2b-256 2ebd6afc8c2032939cf51977e9a5129395006700f7fdc8af7f6b9569929d924c

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