Skip to main content

In-memory LSM-style time-indexed storage engine with CPython bindings.

Project description

Timelog

In-memory, LSM-inspired, time-indexed multimap for Python.

Timelog stores many Python objects per timestamp, supports out-of-order ingest, and answers timestamp/range queries from a native C17 engine through a CPython extension. Current package version: 1.3.0.

License PyPI version Python versions Tests (PR) Packaging (PR) Dependency Review Release (PyPI) Coverage CodeQL Sanitizers OpenSSF Scorecard Python 3.12+

Why Timelog

Timelog is built for timestamp-first workloads where the core operation is "everything in [t1, t2)".
It provides a native in-memory index with snapshot-consistent reads, out-of-order ingestion support, and sequenced range deletes.

At a high level, writes flow through mutable ingest state into immutable layers (memrun, L0, L1), while reads merge across layers with tombstone-aware filtering.
The design is LSM-inspired, but explicitly scoped to an embedded in-memory engine.

Use it when you want a local Python object index optimized for:

  • append-heavy event streams,
  • range scans over integer timestamps,
  • retention via logical deletes/tombstones,
  • concurrent snapshot readers over live Python objects,
  • zero-copy timestamp views for analytics-style scans.

Installation

Install from PyPI:

pip install timelog-lib

Or with uv:

uv add timelog-lib

Distribution name is timelog-lib, import namespace stays timelog:

from timelog import Timelog

Runtime Support

  • Regular CPython 3.12-3.14.
  • Isolated subinterpreters with a per-interpreter GIL.
  • Free-threaded CPython 3.14t (Py_GIL_DISABLED=1) on the supported wheel set; importing Timelog does not re-enable the GIL.
  • Typed package metadata is included (py.typed and _timelog.pyi).

The Python API remains single-writer at the instance level: writes and lifecycle operations must be externally serialized. Independent snapshot readers can run concurrently.

What Changed in 1.2 and 1.3

1.2.0 rebuilt the CPython runtime boundary: _timelog now uses multi-phase module initialization, module-local exceptions and heap types, per-interpreter-safe state recovery, and explicit synchronization for the supported free-threaded wheel family.

1.3.0 keeps that runtime contract and focuses on the hot user paths: auto-timestamp append(obj) moved from Python into C, common positional methods use lower-overhead dispatch, bulk_append() ingests typed timestamp buffers directly, and core lower/upper-bound searches use a measured size-gated branchless path.

Quickstart: Streaming

from timelog import Timelog

log = Timelog.for_streaming(time_unit="ms")

# Auto-timestamp append
log.append({"event": "boot"})

# Operator-style explicit timestamp append
log[1_700_000_000_000] = {"event": "tick"}

# Half-open range query [t1, t2)
rows = list(log[1_700_000_000_000:1_700_000_000_001])
print(rows)

log.close()  # deterministic cleanup; finalizer cleanup is best-effort

Quickstart: Correctness Semantics

from timelog import Timelog

log = Timelog(time_unit="ms")
log[10] = "A"
del log[5:15]              # delete [5, 15)
log[10] = "B"              # later insert at same ts

print(log[10])             # ['B']
print(list(log[0:20]))     # [(10, 'B')]

log.close()  # optional explicit cleanup

Timelog uses sequenced tombstones, so later inserts are not hidden by earlier deletes.

Core Guarantees

  • Time ranges are half-open: [t1, t2).
  • Reads are snapshot-consistent.
  • Concurrency model is single writer plus concurrent readers.
  • Duplicate timestamps are allowed (multimap semantics).
  • Write-path backpressure (TimelogBusyError) indicates the write was accepted; do not blind-retry the same write.
  • close() discards all data. Timelog is in-memory; flush() improves open-instance visibility for readers, not durability.

What Timelog Is (and Isn’t)

Timelog is:

  • an embedded, in-memory timestamp index,
  • optimized for append-heavy ingest and time-range retrieval,
  • implemented in C17 with first-party CPython bindings.

Timelog is not:

  • a durable storage engine,
  • a distributed TSDB,
  • a SQL query engine.

close() discards all data — the engine is in-memory, so nothing survives it. flush() matters while the log is OPEN: it materializes pending writes into immutable segments so zero-copy views() readers can see them.

API Snapshot

Core Python facade surface:

  • Constructors: Timelog(...), for_streaming(...), for_bulk_ingest(...), for_low_latency(...).
  • Writes:
    • append(obj), append(obj, ts=...), append(ts, obj).
    • extend([(ts, obj), ...], mostly_ordered=..., insert_on_error=...).
    • bulk_append(timestamps, objects) for contiguous native-endian int64 buffers plus a same-length list/tuple of payloads.
    • log[ts] = obj, delete(t1, t2), delete(ts), cutoff(ts).
  • Reads:
    • log[t1:t2], log[t1:], log[:t2], log[:].
    • log[ts] / at(ts).
    • named iterators: range, since, until, all, point / equal.
    • iterator helpers: len(it), next_batch(n), and it.view().
  • Introspection and views:
    • stats(), busy_events, extend_skipped, retired_queue_len.
    • views(...) / page_spans(...) for zero-copy timestamp spans.
    • PageSpan.timestamps is a read-only memoryview; PageSpan.objects() lazily exposes the corresponding Python payloads.

See docs/python-api.md for the full behavior contract.

Lifecycle, Threading, and Backpressure

  • Most users should write log = Timelog(...) or use a preset constructor and keep the object for the required scope. A context manager is available but not required.
  • Explicit close() gives deterministic cleanup. If omitted, collection auto-closes on a best-effort basis.
  • Do not call close() concurrently with other operations on the same instance.
  • Release active iterators, PageSpan objects, object views, and exported memoryviews before closing; they hold snapshot pins.
  • Background maintenance can run automatically (maintenance="background") or be controlled manually (maintenance="disabled" + flush() / compact() / maint_step()).
  • TimelogBusyError on write operations means accepted write + pressure signal, not "write lost".

Architecture

Write Path                               Read Path
----------                               ---------
append/extend/delete                     snapshot + query([t1, t2))
      |                                           |
      v                                           v
  Memtable (mutable)  <--------------------  Snapshot view
      | seal
      v
  Memrun (immutable)
      | flush
      v
  L0 Segments (overlap)
      | compact
      v
  L1 Segments (windowed, non-overlap)

Reads plan sources across active + immutable layers, then run k-way merge with tombstone filtering based on sequencing/watermark state.
Flush and compaction bound read fan-out over time.
Deletes are logical tombstones; physical cleanup is deferred to maintenance.

flush() is a visibility operation, not durability: it publishes pending writes into immutable in-memory segments so readers and zero-copy views() can see them. close() always tears down the in-memory engine and discards all records.

Performance at a Glance

Same-harness v1.3 A/B against the v1.2.0 wheel, Linux x86_64, pinned CPU, CPython 3.13.12, median of 5:

Operation v1.2.0 v1.3.0 Change
append(obj) 513.9 ns 117.1 ns 4.39x faster
append(ts, obj) 352.1 ns 103.9 ns 3.39x faster
append(obj, ts=...) 364.7 ns 109.6 ns 3.33x faster
point(ts) 457.1 ns 337.1 ns 1.36x faster
equal(ts) 548.8 ns 429.3 ns 1.28x faster
next_ts(ts) 393.8 ns 299.8 ns 1.31x faster
range(t1, t2) 575.9 ns 458.0 ns 1.26x faster
delete_range(t1, t2) 18,059.6 ns 13,289.3 ns 1.36x faster
delete_before(ts) 109.7 ns 80.8 ns 1.36x faster

New v1.3 ingest fast path:

  • bulk_append(np.int64 array, list): 113.3 ns/record on a 200k-record measured batch.
  • In that benchmark, bulk_append was 2.23x faster than a post-v1.3 per-record append loop and 3.51x faster than extend(zip(...)).

Search-path optimization:

  • Size-gated branchless lower/upper-bound search measured 1.9x-5.0x faster at gated sizes up to 262,144 records, and falls back to the neutral path for very large arrays where it no longer wins.

Historical scale snapshot (2026-02-15, Linux x86_64, CPython 3.13.12, dataset 11,550,000 rows):

  • Batch ingest (A2): 191,105 records/sec.
  • Full scan (B4): 18,088,679 records/sec.
  • Append latency (K1, background): p99 = 672 ns.
  • PageSpan iteration (F1): 1.48B timestamps/sec on the timestamp-only span path.

Results are workload-, configuration-, and hardware-dependent. The current publishable benchmark framing is docs/performance.md; older reports are retained as historical snapshots.

Methodology and context:

  • docs/PERFORMANCE_METHODOLOGY.md
  • docs/performance.md
  • docs/benchmarks/bulk_append.md
  • docs/benchmarks/max_delta_segments.md
  • docs/BENCHMARK_1GB_7PCT_OOO_UNIX.md
  • docs/BENCHMARK_REPORT.md

Complexity claims should be interpreted with stated assumptions. In practice:

  • append path is amortized O(1) at memtable layer,
  • point/range behavior approaches logarithmic seek + linear output scan when source fan-out is bounded by maintenance,
  • delete cost depends on tombstone interval state.

Documentation

  • Index: docs/index.md
  • Release notes: docs/release-notes.md
  • Python API: docs/python-api.md
  • Configuration: docs/configuration.md
  • Error and retry semantics: docs/errors-and-retry-semantics.md
  • Performance methodology: docs/PERFORMANCE_METHODOLOGY.md
  • PyPI/release operations: docs/pypi-release.md

License

MIT. See LICENSE.

Contributing

PRs are welcome. Run core validation locally:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DTIMELOG_BUILD_PYTHON=ON -DTIMELOG_BUILD_PY_TESTS=ON
cmake --build build --target timelog_e2e_build --config Release -j 2
ctest --test-dir build -C Release --output-on-failure -R '^py_.*_tests$'
cmake -E env PYTHONPATH="$PWD/python" python -m pytest python/tests -q

Package build sanity:

python -m build
python -m twine check dist/*

Project details


Download files

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

Source Distribution

timelog_lib-1.3.0.tar.gz (680.8 kB view details)

Uploaded Source

Built Distributions

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

timelog_lib-1.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (117.2 kB view details)

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

timelog_lib-1.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (116.2 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

timelog_lib-1.3.0-cp314-cp314-win_amd64.whl (114.3 kB view details)

Uploaded CPython 3.14Windows x86-64

timelog_lib-1.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (117.9 kB view details)

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

timelog_lib-1.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (117.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

timelog_lib-1.3.0-cp314-cp314-macosx_11_0_arm64.whl (99.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

timelog_lib-1.3.0-cp314-cp314-macosx_10_15_x86_64.whl (108.5 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

timelog_lib-1.3.0-cp313-cp313-win_amd64.whl (111.8 kB view details)

Uploaded CPython 3.13Windows x86-64

timelog_lib-1.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (117.8 kB view details)

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

timelog_lib-1.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (116.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

timelog_lib-1.3.0-cp313-cp313-macosx_11_0_arm64.whl (99.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

timelog_lib-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl (108.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

timelog_lib-1.3.0-cp312-cp312-win_amd64.whl (111.8 kB view details)

Uploaded CPython 3.12Windows x86-64

timelog_lib-1.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (116.6 kB view details)

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

timelog_lib-1.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (115.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

timelog_lib-1.3.0-cp312-cp312-macosx_11_0_arm64.whl (99.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

timelog_lib-1.3.0-cp312-cp312-macosx_10_13_x86_64.whl (108.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

File details

Details for the file timelog_lib-1.3.0.tar.gz.

File metadata

  • Download URL: timelog_lib-1.3.0.tar.gz
  • Upload date:
  • Size: 680.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_lib-1.3.0.tar.gz
Algorithm Hash digest
SHA256 d33813602f3230ed5ead4583e44813ee05963c7db6ca504b72de4728b4451a0b
MD5 08a1e68903798f4627cb4880a769e719
BLAKE2b-256 2be0d8beb0ed819592334ae20e1302680a286e44a0f680e9672d2688640a3361

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0.tar.gz:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 05032d89c8fe20436d2dca14388e45fbb848a68e573c52e91d41b2374eadaf6f
MD5 6b11a4df294d870829d6ac48ea2954f1
BLAKE2b-256 1060b6b208ee41a7b4e66e1a4adb8287ab82c1d836c35f5f4435242ed679fa1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 10966e98cbc1f72c9d8901d611d5fd41cb0af7eb92b33e61bf051b8eb81a9198
MD5 0ff2fa07400694e2a8f81d706ae24cff
BLAKE2b-256 f1a088e554f35113f1c4b98c5bf09e9e29bb487d0f699cea4c209641c7c94439

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: timelog_lib-1.3.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 114.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_lib-1.3.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e4ec4875078a80f4ea8fc37d89f1676d90fe3a2a096b8f5e8a1e469585833b2f
MD5 06be88800eec26675ac3fd8920c8d312
BLAKE2b-256 1d25407b7e5b355aac55e2eab068c22ea562be8cc52b845cf7bd1216eb8bb251

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp314-cp314-win_amd64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 147a97e08ec24484dbf7a6c02ec3ea2d445ef87ae6e3bcf6a382596dd391b4ba
MD5 c4ac94f226107c23c3084a93226a98bd
BLAKE2b-256 45f0e728f662e2421f8bb647dab78ecc573dae8b2e18a513ee602acb5520bf7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 978f84ccc49708b51c6128b9b186915d385837b5e394c9741036325914fc7c3d
MD5 7afd2533c0a1a0bedbe3c6d93de95e9d
BLAKE2b-256 960a6c24cb783cdf487c0920bbd386c9bfbb7dc3c3ff7fc609b14cefe64acac4

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2506ea4ae55b82ad6cf7a0537eb195afb80b49b5ba9bb78918aac4b5add25d97
MD5 0294652c574d0d35aa6f3bf5f666800f
BLAKE2b-256 2526e62173ce8fb5fe7c2299e1a4859e80c580f1806ef31173ad2fc77c7793a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 d397253f103ebcf66f469a7cc6449a43dfc59d33fe8d9e6ac4f1cacc8c76e7cd
MD5 4da7b0e8ae6a1386d9e3f0cee7aba6e8
BLAKE2b-256 e5e97901909dbbc24239d154b7d76cfa932ed6847acc7705ef0a0b1bf51807f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: timelog_lib-1.3.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 111.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_lib-1.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7bca963b0a491f333b97c8651ac2a1b25376144c8240df8b808c62f27c8ca49b
MD5 fda3c340380d9e30539cb22c8b61bd36
BLAKE2b-256 3da57f23f6b051317773bf81848251a7693b00fb32150ce0f163bab2054e27ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp313-cp313-win_amd64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 368d648a9068e16c49daf3a7e2948017fc4fc40752aa32711abf6006eeebd97c
MD5 acaf012d1548f8048691d03033bf9478
BLAKE2b-256 e5633c61b5659b4f90f00cc08a68f1361338720303b75f925bd1a14b949e410f

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 21ec09fbeeb165ea8f77935e5a75f6931a08c8d08bd38404ecc2a88c70fb7a4b
MD5 09dbea24716fc57b1a25a734a40cf0f1
BLAKE2b-256 9a2d1f0b4d10920f76abc997614680d46df2d40007f033a06b8252e90b75bf70

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3a9d34aeca15afc1b636e67660befa03ad6318f8ddae58b105d0b52c2091ed06
MD5 d690cbf699ed9a6892931332b6794965
BLAKE2b-256 2959e95ea469810929bbb1b678f4d2d0c6f97e6b5f3c0bcc35919aab2becaba1

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7265b7910e27d3b2a7c8f1d4f94235d183e822a163a9fedb9275fadbefdc993d
MD5 639680b8e34b7c974c13f0cb8e5b8067
BLAKE2b-256 7051dcf7a50fc5435bfbbb221b3f55cbc623ae9a2bc6739267b71726a4596642

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: timelog_lib-1.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 111.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_lib-1.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5ad266900d8090f3df59f8f889e9e1c46ed77cf9662bd8c3cf2dba2ffbb128ca
MD5 f1f937ea0381e50d9f6798e9accbaf81
BLAKE2b-256 774b3272d1752c6dc2b3dfc56fa6dfa8bcdb97fa9342471027998ff267bca3e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp312-cp312-win_amd64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2b57b08b0ff27b57b8a472b81186396884063dd0fab51e424fd0001006a9e87e
MD5 c5944748fc1c466d1ef09f0c63668a0f
BLAKE2b-256 fbcc3ff9e33a243be2bff4f2b2bb287e6edd10ef96f5cd62d0895422e34a81ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 88de2101f640bc1e7faee229ee88125ec3d21aa07c046f0aebb6a379997fe19a
MD5 9d3cdd217449c7db06cc2a2e76fb421c
BLAKE2b-256 a402be2f3bf9353640d2dcec2dd8da27126de796a560bca7201295c4047254d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 91071fc5d730e1eaa10b05418618601ec3ef28f35acace03812c7c5d11d9603d
MD5 fd145af3da0a028d602c21e0f957695c
BLAKE2b-256 40969b09a8d08504887152d84a050193a893ece1df6cfd72c04ffe676e4e36be

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.3.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.3.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 683b1555c4ff2eb1ecf6a4e73d208353619b9eee6561594e3bece128b07f3ea5
MD5 52486c23840dc6f1b610b70ad912d22b
BLAKE2b-256 a95f888c3634a0a54951994a825442ec10e4b55a0fd04a7b3b7471a449b9a0f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.3.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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