Skip to content

Releases: SciQLop/tscat

v0.5.1

10 May 21:19

Choose a tag to compare

Bug fixes

  • remove_events_from_catalogue checked membership by Python id(), which broke whenever the caller resolved the event via get_events(uuid=...) (the 0.5.0 fast path returns wrappers backed by _LazyBackendEntity, a different Python object from the one stored in catalogue.events). Membership is now compared on the SQL primary key, matching add_events_to_catalogue.
  • After event.remove(permanently=True), catalogue.events kept the deleted ORM Event in its in-memory collection. A later add_events_to_catalogue() with a freshly created event reusing the same UUID was wrongly rejected as "already in catalogue". Backend.remove now detaches the event from every catalogue's events collection before session.delete.
  • The fast-path query was leaking _LazyBackendEntity proxies into SQLAlchemy relationships. Wrapper→backend boundaries (add/remove_events_to_catalogue, _BackendBasedEntity.remove) now resolve proxies to identity-mapped ORM entities before handing them to SQLAlchemy.

Two regression tests cover both scenarios.

Full Changelog: v0.5.0...v0.5.1

v0.5.0

10 May 18:56

Choose a tag to compare

Highlights

This release modernizes the internals and migrates the on-disk schema. Existing databases are auto-migrated on first open and a timestamped .sqlite.backup is created next to them.

Storage / migrations

  • Predicates serialized as JSON instead of pickle (Alembic migration 4a1d43bb9936)
  • Tags & products stored as JSON arrays instead of comma-separated strings (Alembic migration df61d8f30e7c); the comma-restriction on tag/product values is removed
  • sqlalchemy_utils dependency dropped
  • event.rating field added (Alembic migration 9a655086fb51)

API / DSL

  • New filtering DSL: from tscat.filtering import event then event.author == "Alice", combinable with & | ~
  • get_catalogue(uuid=...) / get_catalogue(name=...) / get_catalogue(predicate=...) helper
  • existing_tags() returns the union of all tags used across events and catalogues
  • Predicate.to_dict() / Predicate.from_dict() for explicit JSON serialization

Internals

  • Migrated to SQLAlchemy 2.0 (DeclarativeBase, Mapped[T], mapped_column, select())
  • Build system migrated to uv + hatchling
  • Python ≥ 3.10 (3.10 — 3.14 tested in CI)

Performance

  • ~14 % faster event creation, 1.6× faster catalogue reads, 2.1× faster tag filtering on a 10K-event benchmark
  • Raw-SQL fast path for bulk event loads (~2× speedup)

Fixes

  • Eager session.add in Session._track — fixes silent relationship-skip warning on import (#)
  • Mutable default arguments removed
  • Identity-map cleared after rollback()
  • Import dedup for catalogues batched by UUID set
  • Set-based remove_events_from_catalogue (was O(n·m))
  • is_removed() returns False after restore() again
  • Bulk import on large catalogues no longer hits the SQLite bind-variable limit

Full Changelog: v0.4.4...v0.5.0

v0.4.4

06 Nov 16:41

Choose a tag to compare

  • New function to list all tags implemented here
  • New function to get only one catalog implemented here
  • New filtering syntax using a more natural python style implemented here
  • Support for sqlalchemy>2.0 implemented here

Full Changelog: v0.4.3...v0.4.4

v0.4.3

30 Jun 14:56

Choose a tag to compare

  • v0.4.2 did fail to release.

Full Changelog: v0.4.2...v0.4.3

v0.4.2

30 Jun 14:15

Choose a tag to compare

What's Changed

  • is_removed() shall return False after restore()-call by @pboettch in #62

Full Changelog: v0.4.1...v0.4.2

v0.4.1

08 Jun 22:09

Choose a tag to compare

What's Changed

  • Ensure we backup the database before doing migration by @jeandet in #60

Full Changelog: v0.4.0...v0.4.1

v0.4.0

07 Jun 19:31

Choose a tag to compare

What's Changed

  • Exposes the same interface to import JSON or VOTable by @jeandet in #59

Full Changelog: v0.3.0...v0.4.0

v0.3.0

24 May 12:58

Choose a tag to compare

What's Changed

  • list-values: string-list items are not allowed to contain a comma by @pboettch in #45
  • export: allow export of a list of catalogues by @pboettch in #47
  • get_events: option to only assigned get_events of a (dynamic) catalogue by @pboettch in #48
  • VOTable: add import/export-functionality by @pboettch in #51
  • remove and re-create catalogue with same uuid now works correclty by @pboettch in #52
  • is_removed is now cached by @pboettch in #53
  • events: get only events matching the predicate from a catalogue by @pboettch in #54
  • Rating implementation by @pboettch in #55
  • events: get_events now is multi-dispatch, returns query-info for catalogues by @pboettch in #57
  • Alembic integration by @pboettch in #58

Full Changelog: v0.2.0...v0.3.0

v0.2.0

29 Nov 22:56

Choose a tag to compare

What's Changed

  • Replace typeguard with mypy by @pboettch in #40
  • Use bulk action context manager by @pboettch in #41
  • Add CodeQL workflow for GitHub code scanning by @lgtm-com in #42

New Contributors

  • @lgtm-com made their first contribution in #42

Full Changelog: v0.1.0...v0.2.0

Initial release

18 May 07:53

Choose a tag to compare

Initial release Pre-release
Pre-release

Test release.