sunstone-data-platform 1.4.0__tar.gz → 1.4.1__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 (73) hide show
  1. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/PKG-INFO +1 -1
  2. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/_version.py +2 -2
  3. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/graph/client.py +31 -2
  4. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_pipeline/assets/mirrors.py +1 -1
  5. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/.gitignore +0 -0
  6. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/README.md +0 -0
  7. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/pyproject.toml +0 -0
  8. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/__init__.py +0 -0
  9. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/auth/__init__.py +0 -0
  10. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/auth/client_creds.py +0 -0
  11. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/auth/pkce.py +0 -0
  12. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/auth/stepup.py +0 -0
  13. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/auth/store.py +0 -0
  14. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/branch.py +0 -0
  15. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/catalog.py +0 -0
  16. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/__init__.py +0 -0
  17. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/_app.py +0 -0
  18. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/_errors.py +0 -0
  19. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/__init__.py +0 -0
  20. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/conceptmap.py +0 -0
  21. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/data_auth.py +0 -0
  22. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/data_import.py +0 -0
  23. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/data_info.py +0 -0
  24. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/data_publish.py +0 -0
  25. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/ls.py +0 -0
  26. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/prov.py +0 -0
  27. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/refs.py +0 -0
  28. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/show.py +0 -0
  29. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/snapshots.py +0 -0
  30. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/commands/sparql.py +0 -0
  31. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/cli/main.py +0 -0
  32. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/conceptmap.py +0 -0
  33. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/config.py +0 -0
  34. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/discovery.py +0 -0
  35. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/env_commands.py +0 -0
  36. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/env_section.py +0 -0
  37. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/graph/__init__.py +0 -0
  38. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/graph/dataset.py +0 -0
  39. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/graph/terms.py +0 -0
  40. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/identifiers.py +0 -0
  41. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/import_/__init__.py +0 -0
  42. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/import_/fetcher.py +0 -0
  43. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/import_/owner.py +0 -0
  44. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/import_/parser.py +0 -0
  45. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/import_/pipeline.py +0 -0
  46. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/import_/storage.py +0 -0
  47. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/metadata/__init__.py +0 -0
  48. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/metadata/builder.py +0 -0
  49. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/metadata/models.py +0 -0
  50. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/metadata/provenance.py +0 -0
  51. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/metadata/provenance_rdf.py +0 -0
  52. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/plugin.py +0 -0
  53. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/publish.py +0 -0
  54. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/push.py +0 -0
  55. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/queries/conceptmap-mappings.rq +0 -0
  56. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/query.py +0 -0
  57. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/resolve.py +0 -0
  58. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/sssom.py +0 -0
  59. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/url.py +0 -0
  60. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/utils/__init__.py +0 -0
  61. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/utils/checksum.py +0 -0
  62. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/utils/encoding.py +0 -0
  63. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/utils/naming.py +0 -0
  64. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/versioning/__init__.py +0 -0
  65. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_data/versioning/schema_evolution.py +0 -0
  66. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_pipeline/__init__.py +0 -0
  67. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_pipeline/assets/__init__.py +0 -0
  68. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_pipeline/assets/transforms.py +0 -0
  69. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_pipeline/definitions.py +0 -0
  70. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_pipeline/io_manager.py +0 -0
  71. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_pipeline/resources/__init__.py +0 -0
  72. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_pipeline/resources/iceberg.py +0 -0
  73. {sunstone_data_platform-1.4.0 → sunstone_data_platform-1.4.1}/src/sunstone_pipeline/resources/refs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sunstone-data-platform
3
- Version: 1.4.0
3
+ Version: 1.4.1
4
4
  Summary: Sunstone Data Platform - Data lakehouse with semantic metadata
5
5
  Author-email: Sunstone Institute <stig@sunstone.institute>
6
6
  License-Expression: MIT
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.4.0'
22
- __version_tuple__ = version_tuple = (1, 4, 0)
21
+ __version__ = version = '1.4.1'
22
+ __version_tuple__ = version_tuple = (1, 4, 1)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -14,6 +14,7 @@ or the sentinel ``*`` for "whatever is current".
14
14
  from __future__ import annotations
15
15
 
16
16
  import fnmatch
17
+ import json
17
18
  import re
18
19
  from collections.abc import Callable
19
20
 
@@ -107,11 +108,39 @@ class PushRejected(RuntimeError):
107
108
 
108
109
 
109
110
  class Unavailable(RuntimeError):
110
- """graph SoR unavailable; safe to retry."""
111
+ """graph-server answered 503.
112
+
113
+ With no server message the text is the generic "safe to retry" line. When the
114
+ server gave a reason, the text is "graph-server unavailable: <reason>" and
115
+ makes no retry claim, because some 503s are configuration errors.
116
+ """
111
117
 
112
118
  def __init__(self, message: str = "graph SoR unavailable; safe to retry"):
113
119
  super().__init__(message)
114
120
 
121
+ @classmethod
122
+ def from_response(cls, resp: httpx.Response) -> "Unavailable":
123
+ """Build from a 503 response, using the server's reason when it sent one."""
124
+ detail = _server_message(resp)
125
+ if not detail:
126
+ return cls()
127
+ return cls(f"graph-server unavailable: {detail}")
128
+
129
+
130
+ def _server_message(resp: httpx.Response) -> str:
131
+ """The JSON ``error`` string if the body has one, else the stripped text body."""
132
+ try:
133
+ text = resp.text.strip()
134
+ except Exception:
135
+ return ""
136
+ try:
137
+ body = json.loads(text)
138
+ except ValueError:
139
+ return text
140
+ if isinstance(body, dict) and isinstance(body.get("error"), str) and body["error"].strip():
141
+ return body["error"].strip()
142
+ return text
143
+
115
144
 
116
145
  # graph-server's default protected-ref globs (DP-SPEC-14 D9). The deployed
117
146
  # rules file may differ; this client only uses them to word its 403s.
@@ -447,7 +476,7 @@ class GraphClient:
447
476
  if status == 415:
448
477
  return UnsupportedMedia()
449
478
  if status == 503:
450
- return Unavailable()
479
+ return Unavailable.from_response(resp)
451
480
  return None
452
481
 
453
482
 
@@ -76,7 +76,7 @@ def build_mirror_asset(config: SourceConfig) -> dg.AssetsDefinition:
76
76
  new_hash = compute_checksum_bytes(raw)
77
77
 
78
78
  # Compare with stored hash
79
- current_hash = iceberg.get_table_property(config.table_ref, "sunstone.import.content_hash")
79
+ current_hash = iceberg.get_table_property(config.table_ref, "sunstone.import.checksum")
80
80
 
81
81
  if new_hash == current_hash:
82
82
  context.log.info(f"No change for {config.table_ref} (hash: {new_hash[:12]}...)")