Skip to content

Implement operations module#500

Merged
leoschwarz merged 21 commits into
mainfrom
operations-module
May 19, 2026
Merged

Implement operations module#500
leoschwarz merged 21 commits into
mainfrom
operations-module

Conversation

@leoschwarz
Copy link
Copy Markdown
Member

No description provided.

Introduces the bfabric.operations package with dataset and workunit
operations, migrating logic from bfabric.experimental and adding new
structured validation, transforms, and change-tracking layers.
@leoschwarz leoschwarz changed the title Add operations module initial implementation Implement operations module May 19, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 19, 2026

📝 "TODO" Changes Detected

Summary: ❌ 2 "TODO"s removed

❌ Removed "TODO"s (2)

  • bfabric_app_runner/src/bfabric_app_runner/output_registration/register.py:102: # TODO should not print to stdout in the future
  • bfabric_app_runner/src/bfabric_app_runner/output_registration/register.py:103: # TODO also it should not be imported from bfabric_scripts, but rather the generic functionality should be available

This comment is automatically updated when "TODO" changes are detected.

leoschwarz added 17 commits May 19, 2026 08:58
- create_workunit returns a metadata-only Workunit (client=None) to avoid
  leaking the write client's credentials into lazy reference resolution on
  the returned entity. Callers re-read via client.reader.read_id if needed.
- bfabric-cli dataset update now mirrors dataset upload: csv/tsv/xlsx/parquet
  subcommands, shared forbidden_chars / warn_trailing_spaces validation, and
  the same preview-then-confirm flow.
- update_custom_attributes copies entity.custom_attributes defensively before
  merging.
- Clarify dataset_column_types deprecation shim (privatization, not just a
  move) and tighten the bfabric_save_csv2dataset removal note in the changelog.
- Design doc: add per-domain variation paragraph on payload-vs-params bundling.
  create_dataset / update_dataset docstrings note the metadata-only return.
- Micro fixes: dead elif in transforms, Field(default_factory=list) in
  DatasetChanges, min(value) in row-count validator, import ordering in
  register.py, future annotations in upload.py.
- Tests: classname in fixtures, .uri smoke tests for both operations,
  regression test asserting create_workunit returns _client is None.
@leoschwarz leoschwarz mentioned this pull request May 19, 2026
4 tasks
@leoschwarz leoschwarz marked this pull request as ready for review May 19, 2026 13:05
@leoschwarz leoschwarz merged commit 680ef1d into main May 19, 2026
4 checks passed
@leoschwarz leoschwarz deleted the operations-module branch May 19, 2026 13:08
leoschwarz added a commit that referenced this pull request May 19, 2026
Wires `_save_annotations` to `bfabric.operations.dataset.create_dataset`
(landed in #500) instead of leaving it as a NotImplementedError stub.
Threads `workunit_definition` into the save path so the annotation
dataset is attached to the right workunit/container.

Tightens the annotation spec: adds an optional `name` field,
defaults `IncludeResourceRef.anchor` to `""`, drops the unused
`update_existing` from `IncludeDatasetRef`, and removes the
`UpdateExisting` import (which had created an import cycle).

Reintroduces `OutputsSpec.read_yaml` as a model-returning helper and
switches `register_outputs` and `cmd_validate_outputs_spec` to it.

Fixes a latent bug in `generate_output_table` where an empty
`include_tables` list crashed `pl.concat`; now raises a clear error
when both lists are empty.

Tests: adds `TestSaveAnnotations` with three mock-client cases,
covers `OutputsSpec.read_yaml` round-trip, updates the existing
anchor expectation from None to "".

"Update existing dataset" remains deferred — no `Workunit.output_dataset`
field exists today, so locating a prior dataset needs its own design.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant