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

Uploaded CPython 3.14Windows x86-64

etiket_sync_agent-0.3.0b4-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.0b4-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.0b4-cp314-cp314-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

etiket_sync_agent-0.3.0b4-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.0b4-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.0b4-cp313-cp313-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

etiket_sync_agent-0.3.0b4-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.0b4-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.0b4-cp312-cp312-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

etiket_sync_agent-0.3.0b4-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.0b4-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.0b4-cp311-cp311-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a577a99509a8809d336ee87a44d061128b7eafbe5524ddb79ca5feb97acdeeea
MD5 c6fc8a6bdd8c2fbd581f9b4d58165b2e
BLAKE2b-256 52c6eb982235a62eae47030048b0b73a8e88357048ea3fdf6422d28bf8aa0f86

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2a62cd7e89c01001476a7a82a8667db8d2dc9190bc2e39db163a206c3527b194
MD5 983d1dbdfdf39d2e46fbfc10533dcd73
BLAKE2b-256 88019fce910a0cdeed2645203cb77c14a82f4d46f0bc1f09d8ad2ecababe935a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0474fefc6c7c23885d4d1ce1ad092e7029049eb108e1519e64154d9bf4b57bfb
MD5 a7daebc505fab4c04cf63f8580ee88e4
BLAKE2b-256 16d0888fa136561151db15ee201ac9c9ea8bd28cacbc8abd411b5bdcbf2f61a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f96246609b935b5f9107d0ccdbc0c781a5d02e617738f208648b6ef80d0ed068
MD5 01b014875f3c1453a15a99b03f92b14d
BLAKE2b-256 87cd9405ee912d78000508685289c2fc485e4035eeaec58b378612981dc4f05e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cc28dc3c036b2fcda788cb56afe98609df3f614fdc608f7bb249eb76e37acfe5
MD5 33b889bad9e3bb897f43889b4c674956
BLAKE2b-256 55f47894246ca47c63e727dc7e2f1640f9b4e36a6823ef7a680e529e71821d21

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3de0d3bc76d515b4b431ac4571832377bf0038e665c60764babfbf68feb872b0
MD5 451ea3ef219fe39e44729e856764072f
BLAKE2b-256 0301368d0f31ae334f52238a156e8a8c3a9da469b64ef690b6ac9719b7f2be36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 fd5fd496b27043bf833cce87bad2290cd72f284c577cfde798fef181ea2c2fb5
MD5 ebaf1d7a2099e66e7b93a9f439077716
BLAKE2b-256 4e82f98839600285a589cbc05e68da6e25f7fc2710cdf47134c58025e31e3ecd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cd6b8573c6a24afe8e44dfad81a58c1f640178b57fd2b6d66794c7b972c4496b
MD5 49e7aa848caec11f1a10a6ab9d65b386
BLAKE2b-256 29f9bddf67e95a27a5ab542e96f6586170acb8eec3b9e468da5f32b4911072dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c6028c206c93cd8385fee0252759dc1e7ffc2c65380fe100585b099c7f517fcd
MD5 e7c13bd21f601fe793ed6ff9eef7069f
BLAKE2b-256 2553565c6ea2309e0838768723025dbdd7596be4f65b3cbbee98aeaa64ecff54

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c1c316625cae3c621b740986bb9e145e619eda30ef2b3430bf9d38acafe43f48
MD5 2082077f406a20f14909fe48c45cb472
BLAKE2b-256 54c0e27552abb27ffcdfef2c0412f0b0040a5abc88718ba4e0494f5d9114524e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 79cedcbb9de82d70a4b26b1208fe964ae25bb270a2e967f401e84f2e939a2cba
MD5 bf0261c2377b4225e34d792654e222c8
BLAKE2b-256 209aed60c599f0318e6132088d39748f5df30e4adbbba561a8992c570066515e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6ab021640fc2439cdce6631521803523b296ec4064df1103397bde11574612f3
MD5 ef6c22754ba876fa36f7976d13c7808d
BLAKE2b-256 93ae612f8d556963b199e3d367d6fffaa2d55c2389f97159ef51cfd1b3bcd51c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b5e30484f8701d216d2e366394a6c1d015560cf67e2a985c1056cb475b5a68d0
MD5 6ee983c7b3f3c18aed3196c04114fd28
BLAKE2b-256 cac6d6a61cb7cb8790b59d1c665bbec4abf5be2909a33f11416a237410f5a681

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 27c57e9aa8ebc1000fec5fbb9e83311feeeb556d649e30d52c0480ce479f610f
MD5 f34323ddae15e3d82792ca07ef6755d7
BLAKE2b-256 155af63fb4af8ba760cd1a7263df3613ef8defb30ea8b9f3e919842c9c4d8bc5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d1a2ba9f9f9d1494583baa565941888f6a523107c54b40c0e4e6f77e6063bf99
MD5 d7454edb0d51757c3c0800b67073fa7b
BLAKE2b-256 f2f73169f580dae5dbcae7096f2f58290645c382e933c14d724c1334b24a754b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a6356840b5a60e3860b874d7a6f68190109955a1370a4c554a78235346abad74
MD5 1b1cb1a589c0d6f3b50138bc3d1b38b3
BLAKE2b-256 daf1017b1bad2f014f01beeb1e879879b7100155d11f6fb289debaddd77aeb38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a09e0419d4701a62e74ded2cef8525a98838fa0967eed7cd656932406a7d7f79
MD5 39527b6e9e0ba0ca3e5881bdb2a26cad
BLAKE2b-256 b906d592aff68904d67afd6c0717aed7840948513c339c12c497582978677651

See more details on using hashes here.

File details

Details for the file etiket_sync_agent-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_sync_agent-0.3.0b4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 45a24287d3d62061a1dd9b7b7ddb4c47b8170debb44c284661b99dcfb7d3ef67
MD5 ce43792c6cbf6c95afaf2bcd8fd1d63b
BLAKE2b-256 d212865bd48d214619fd1e9e4b8628c41a976bbe6df4b96200d190ac649d8e10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 7905683e6a5bf75b25811d2fa33570634982d53394814dafcacb2db97fda5ec5
MD5 d1b94d6193d6c0811add4a0ba44fa57d
BLAKE2b-256 35fbbd187357c15b712610c3976cfeb7074f4e2400fd5ff65ebda5f1d7172b4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for etiket_sync_agent-0.3.0b4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 678edc7c990d04da8d9a7a230d828d2ac6160121b9b262da2eb7b77e89f17fb4
MD5 fbea93c59a96604c490a3addf49ebe4e
BLAKE2b-256 b1460acd57d7ff9396429ba4e4a284e24ab9561b699b8d5115d122987c927e5b

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