Skip to content

Release to staging: SDI metadata extraction, %sdi and %metadata magics (ref #306883) - #71

Merged
oskaresparza merged 8 commits into
stagingfrom
development
Oct 1, 2026
Merged

oskaresparza merged 8 commits into
stagingfrom
development

Conversation

@oskaresparza

Copy link
Copy Markdown
Collaborator

Promotes development to staging. Ref #306883.

What's in it

  • SDI metadata extraction to DDS (SDI metadata extraction to DDS, %sdi and %metadata magics (ref #306883) #70)
    • eea_datalakehouse.sdi: SdiController.get_xml(uuid), push_to_dds() and resolve_series().
    • eea_datalakehouse.dds_documents: DocumentsClient, which uploads documents and never ingests.
    • Notebook magics: %sdi reads SDI (get_xml, resolve_series) and %metadata pushes to DDS (push_to_dds, dds_base_url).
    • Test notebook debugger/sdi_session_example.ipynb, README section, complete debugger/.env.example, and the plan in docs/sdi-integration-plan.md.
  • Test cell added to the catalog magic notebook (ref #308939).

Before the first real upload

  • DDS endpoints are assumptions. The document endpoints in dds_documents/client.py still need confirming with the DDS team.
  • No upload has been tried. The upload is only tested against mocks; extraction from SDI is verified against the live catalogue.

Tests

444 passed, 1 skipped (the live SDI test).

🤖 Generated with Claude Code

oskaresparza and others added 8 commits September 28, 2026 15:05
Release 0.1.18: Redmine notes from local git hooks, ref #308939
Release 0.1.19: remove Redmine hook test file, ref #308939
- sdi: SdiController.get_xml(uuid) downloads a record's ISO 19115-3 XML
  from the SDI (GeoNetwork) REST API and checks it; push_to_dds() uploads
  it to {dds_path}/metadata/{uuid}.xml as a document (not an ingest),
  comparing with the DDS copy first; resolve_series() finds a series'
  current release.
- dds_documents: DocumentsClient (put/get/exists/list) for plain files in
  DDS folders. The endpoints are assumptions to confirm with the DDS team.
- %sdi magic over SdiSession, built like %catalog/%ingest from the kernel
  environment; DDS_BASE_URL is read from the nearest .env.
- Test notebook debugger/sdi_session_example.ipynb, run_sdi_extract() in
  debug_run.py, README section, complete .env.example, and the
  development plan in docs/sdi-integration-plan.md (publication to SDI
  deferred).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Redmine-Hook: v1
- %sdi (SdiSession) now only reads SDI: get_xml, resolve_series.
- %metadata (MetadataSession) pushes metadata files to DDS: push_to_dds
  (defaults to the record %sdi get_xml fetched last) and dds_base_url.
  DDS_BASE_URL is read from the nearest .env when the session is built.
- Tests, test notebook, README and plan updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Redmine-Hook: v1
SDI metadata extraction to DDS, %sdi and %metadata magics (ref #306883)
Comment thread tests/sdi/test_session.py
monkeypatch.chdir(nested)

assert find_dotenv() == tmp_path / ".env"
assert MetadataSession(env={}).dds_base_url().startswith("https://dds.parent.test")
@oskaresparza
oskaresparza merged commit 13ceb0b into staging Oct 1, 2026
13 of 14 checks passed
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.

2 participants