Skip to content

feat(metadata): dtype-Registry + Robustheit (PR1/4)#37

Merged
lepy merged 1 commit into
masterfrom
refactor/metadata-dtype-registry
Jun 26, 2026
Merged

feat(metadata): dtype-Registry + Robustheit (PR1/4)#37
lepy merged 1 commit into
masterfrom
refactor/metadata-dtype-registry

Conversation

@lepy

@lepy lepy commented Jun 26, 2026

Copy link
Copy Markdown
Owner

Erster PR des Metadaten-Rückgrat-Programms (Scope: Robustheit + Maschinenlesbarkeit, PR1–PR4). Robustheit & Korrektheit — strikt additiv, lenient-Verhalten byte-genau erhalten.

Neu: sdata/dtypes.py (pure stdlib)

Single Source of Truth für Coercion, JSON-(De)Serialisierung, Python-Klasse und XSD-Typ-Mapping (Grundlage der JSON-LD-Schicht in PR2/PR3).

Verbesserungen

  • timestamp dtype implementiert (via TimeStamp, ISO-8601/UTC) — war bisher kaputt.
  • bool robuster: lenient unverändert; strict=True case-insensitiv (yes/no/on/off…), wirft bei Mehrdeutigkeit.
  • dtype = Klasse ODER String (resolve); dtype-Wechsel castet den Wert um (bisheriger TODO).
  • neue dtypes bytes (base64), json (dict/list), uri (+ XSD base64Binary/anyURI).
  • opt-in strict= wirft DtypeError statt still zu degradieren.

Bugfixes

  • Metadata.name_sdata_name als Single Source of Truth (keine Desync).
  • relabel() schlüsselt explizit um (kein Präfix-Verlust).
  • update_hash() gibt das Hash-Objekt zurück (statt der builtin-hash-Klasse).
  • to_json() serialisiert timestamp/bytes JSON-sicher.

Kompatibilität & Tests

Keine neuen Dependencies. Attribute/Metadata-Public-API unverändert; base.py unberührt. Die bestehenden test_metadata*/test_attribute/test_base*-Tests laufen unverändert grün. Neu: tests/test_dtypes.py. 418 passed, 8 skipped, Coverage 100 %.

Neues pure-stdlib-Modul sdata/dtypes.py als Single Source of Truth für
Wert-Coercion, JSON-(De)Serialisierung, Python-Klasse und XSD-Typ-Mapping
(Grundlage der späteren JSON-LD-Schicht).

Verbesserungen (strikt additiv, lenient-Verhalten byte-genau erhalten):
- timestamp-dtype jetzt implementiert (via sdata.timestamp.TimeStamp, ISO-8601/UTC).
- bool-Coercion: lenient unverändert; strict=True case-insensitiv (yes/no/on/off…)
  und wirft bei Mehrdeutigkeit.
- dtype akzeptiert Klasse ODER String (resolve); Wechsel des dtype castet den
  vorhandenen Wert um (bisheriger TODO).
- neue dtypes bytes (base64), json (dict/list), uri (+ XSD: base64Binary/anyURI).
- opt-in strict= (Attribute/set_attr) wirft DtypeError statt still zu degradieren.

Bugfixes:
- Metadata.name <-> _sdata_name als Single Source of Truth (keine Desync mehr).
- relabel() schlüsselt explizit um (kein Präfix-Verlust).
- update_hash() liefert das Hash-Objekt zurück (statt der builtin-hash-Klasse).
- to_json() serialisiert timestamp/bytes JSON-sicher (default=json_default).

Tests: tests/test_dtypes.py (Registry, alle dtypes lenient+strict, Re-Cast,
Bug-Regressionen, JSON-Roundtrip). Bestehende metadata/attribute/base-Tests
laufen unverändert grün. Coverage 100%.
@lepy lepy merged commit b9b91dc into master Jun 26, 2026
1 of 2 checks passed
@lepy lepy deleted the refactor/metadata-dtype-registry branch June 26, 2026 08:21
@codacy-production

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 50 high · 6 minor

Alerts:
⚠ 56 issues (≤ 0 issues of at least minor severity)

Results:
56 new issues

Category Results
Documentation 6 minor
Security 50 high

View in Codacy

🟢 Metrics 86 complexity · 0 duplication

Metric Results
Complexity 86
Duplication 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

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