sdmxlib 0.28.2__tar.gz → 0.28.3__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.
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/PKG-INFO +1 -1
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/pyproject.toml +1 -1
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/local/_data_store.py +22 -3
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/README.md +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/api/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/api/client.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/api/federated.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/api/filters.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/api/policy.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/api/providers.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/api/query.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/api/registry.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/api/session.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/catalog.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/data_store.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_csv/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_csv/reader.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_csv/writer.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_json/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_json/metadata.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_json/reader.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_json/writer.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_ml21/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_ml21/namespaces.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_ml21/reader.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_ml21/writer.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_ml30/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_ml30/metadata.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_ml30/namespaces.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_ml30/reader.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/formats/sdmx_ml30/writer.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/local/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/local/_registry.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/annotations.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/base.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/binding.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/category.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/code_query.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/codelist.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/collections.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/concept.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/constraint.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/convert.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/dataflow.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/dataset.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/datastructure.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/expr.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/hierarchy.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/hierarchy_query.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/in_memory_registry.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/istring.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/mapping.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/message.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/metadataflow.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/metadataset.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/metadatastructure.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/organisation.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/provision.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/ref.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/registry.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/representation.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/urn.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/model/validation.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/polars.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/py.typed +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/rest.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/sql.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/storage/__init__.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/storage/lazy.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/storage/readers.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/storage/schema.py +0 -0
- {sdmxlib-0.28.2 → sdmxlib-0.28.3}/src/sdmxlib/storage/writers.py +0 -0
|
@@ -203,7 +203,15 @@ class DuckDBDataStore:
|
|
|
203
203
|
# any image whose CA store is at a non-default path. The
|
|
204
204
|
# ``curl`` adapter delegates to libcurl, which reads those
|
|
205
205
|
# env vars at handshake time.
|
|
206
|
-
|
|
206
|
+
#
|
|
207
|
+
# ``SET GLOBAL`` (not bare ``SET``) is required because the
|
|
208
|
+
# data-plane uses per-thread cursors (Phase 5 of #75). A
|
|
209
|
+
# bare ``SET`` is session-scoped and bypassed by every cursor
|
|
210
|
+
# opened later, so the curl transport wouldn't take effect on
|
|
211
|
+
# the codepath where abfss reads actually happen — surfacing
|
|
212
|
+
# as "Problem with the SSL CA cert" on every data query. See
|
|
213
|
+
# issue #81.
|
|
214
|
+
self._conn.execute("SET GLOBAL azure_transport_option_type = 'curl'")
|
|
207
215
|
if self._azure_credentials:
|
|
208
216
|
sql = _azure_create_secret_sql(self._azure_credentials)
|
|
209
217
|
self._conn.execute(sql)
|
|
@@ -217,13 +225,24 @@ class DuckDBDataStore:
|
|
|
217
225
|
self._conn.execute("SET search_path = 'sdmx'")
|
|
218
226
|
|
|
219
227
|
def _needs_azure(self) -> bool:
|
|
220
|
-
"""True if Azure secret/extension setup is required for this session.
|
|
228
|
+
"""True if Azure secret/extension setup is required for this session.
|
|
229
|
+
|
|
230
|
+
Matches against ATTACH specs that either (a) name an ``abfss://``
|
|
231
|
+
path directly or (b) ATTACH a DuckLake catalog (``ducklake:``)
|
|
232
|
+
whose ``data_path`` is stored inside the lake metadata file —
|
|
233
|
+
invisible to the ATTACH SQL but routed through the Azure backend
|
|
234
|
+
on first read. Catching ``ducklake:`` here is over-broad for
|
|
235
|
+
purely local lakes, but the cost of a spurious curl-transport SET
|
|
236
|
+
is zero (DuckDB ignores it until something talks to Azure); the
|
|
237
|
+
cost of a false negative is a TLS handshake failure on every data
|
|
238
|
+
query. See issue #81.
|
|
239
|
+
"""
|
|
221
240
|
if self._azure_credentials:
|
|
222
241
|
return True
|
|
223
242
|
if self._attach:
|
|
224
243
|
for spec in self._attach.values():
|
|
225
244
|
spec_text = spec if isinstance(spec, str) else " ".join(s for s in spec if s)
|
|
226
|
-
if "abfss://" in spec_text:
|
|
245
|
+
if "abfss://" in spec_text or "ducklake:" in spec_text:
|
|
227
246
|
return True
|
|
228
247
|
return False
|
|
229
248
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|