fairagro-middleware-shared 9.1.1.dev14__tar.gz → 9.1.1.dev15__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/.gitignore +1 -0
  2. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/PKG-INFO +1 -1
  3. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/common/rocrate.py +2 -0
  4. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/tests/unit/test_rocrate.py +24 -0
  5. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/README.md +0 -0
  6. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/pyproject.toml +0 -0
  7. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/__init__.py +0 -0
  8. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/__init__.py +0 -0
  9. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/common/__init__.py +0 -0
  10. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/common/models.py +0 -0
  11. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/py.typed +0 -0
  12. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/v1/__init__.py +0 -0
  13. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/v1/models.py +0 -0
  14. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/v2/__init__.py +0 -0
  15. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/v2/models.py +0 -0
  16. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/v3/__init__.py +0 -0
  17. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/api_models/v3/models.py +0 -0
  18. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/config/__init__.py +0 -0
  19. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/config/config_base.py +0 -0
  20. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/config/config_wrapper.py +0 -0
  21. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/config/logging.py +0 -0
  22. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/py.typed +0 -0
  23. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/src/middleware/shared/tracing.py +0 -0
  24. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/tests/unit/test_api_models.py +0 -0
  25. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/tests/unit/test_config_base.py +0 -0
  26. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/tests/unit/test_config_wrapper.py +0 -0
  27. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/tests/unit/test_logging.py +0 -0
  28. {fairagro_middleware_shared-9.1.1.dev14 → fairagro_middleware_shared-9.1.1.dev15}/tests/unit/test_tracing.py +0 -0
@@ -213,6 +213,7 @@ scratch/
213
213
  **/*.csv
214
214
  **/*.stats
215
215
 
216
+ # Local decrypt artifacts (CLI or legacy editor temp files; do not commit)
216
217
  **/*.decrypted.*
217
218
 
218
219
  # Cryptographic keys and certificates for testing that are not meant to be committed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fairagro-middleware-shared
3
- Version: 9.1.1.dev14
3
+ Version: 9.1.1.dev15
4
4
  Summary: The FAIRagro advanced middleware shared components
5
5
  Requires-Python: >=3.12
6
6
  Requires-Dist: opentelemetry-api>=1.26.0
@@ -17,6 +17,8 @@ def _root_dataset_entity(graph: list[dict[str, Any]]) -> dict[str, Any] | None:
17
17
  def _normalize_text_field(value: object) -> str | None:
18
18
  if isinstance(value, list):
19
19
  value = value[0] if value else None
20
+ if isinstance(value, dict):
21
+ value = value.get("@value")
20
22
  if value is None:
21
23
  return None
22
24
  text = str(value).strip()
@@ -61,6 +61,30 @@ def test_rocrate_payload_description() -> None:
61
61
  assert RoCratePayload.model_validate(arc).description == "Cold stress experiment"
62
62
 
63
63
 
64
+ @pytest.mark.parametrize(
65
+ ("field", "wire_value", "expected"),
66
+ [
67
+ ("identifier", {"@value": "dataset-jsonld"}, "dataset-jsonld"),
68
+ ("name", {"@value": "Study title"}, "Study title"),
69
+ ("description", {"@value": "Study summary"}, "Study summary"),
70
+ ],
71
+ )
72
+ def test_rocrate_payload_jsonld_value_objects(field: str, wire_value: object, expected: str) -> None:
73
+ """JSON-LD value objects for text fields are normalized to plain strings."""
74
+ root: dict[str, object] = {"@id": "./"}
75
+ if field == "identifier":
76
+ root["identifier"] = wire_value
77
+ else:
78
+ root["identifier"] = "dataset-1"
79
+ root[field] = wire_value
80
+ arc = {
81
+ "@context": "https://w3id.org/ro/crate/1.1/context",
82
+ "@graph": [root],
83
+ }
84
+ payload = RoCratePayload.model_validate(arc)
85
+ assert getattr(payload, field) == expected
86
+
87
+
64
88
  def test_rocrate_payload_preserves_extra_root_fields() -> None:
65
89
  """Root entity fields beyond the API contract remain in ``@graph`` unchanged."""
66
90
  arc = {