floe-python 0.8.1__py3-none-any.whl → 0.8.2__py3-none-any.whl
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.
- floe/config/validate.py +2 -0
- floe/iceberg/sink.py +8 -5
- {floe_python-0.8.1.dist-info → floe_python-0.8.2.dist-info}/METADATA +1 -1
- {floe_python-0.8.1.dist-info → floe_python-0.8.2.dist-info}/RECORD +7 -7
- {floe_python-0.8.1.dist-info → floe_python-0.8.2.dist-info}/WHEEL +0 -0
- {floe_python-0.8.1.dist-info → floe_python-0.8.2.dist-info}/entry_points.txt +0 -0
- {floe_python-0.8.1.dist-info → floe_python-0.8.2.dist-info}/licenses/LICENSE +0 -0
floe/config/validate.py
CHANGED
|
@@ -330,6 +330,8 @@ def _check_iceberg(
|
|
|
330
330
|
raise _fail(
|
|
331
331
|
entity, f"sink.accepted.iceberg.catalog references unknown catalog {name}"
|
|
332
332
|
)
|
|
333
|
+
if definition.type == "glue" and "{domain}" in (definition.database or "") and not (iceberg.namespace or entity.domain): # fmt: skip
|
|
334
|
+
raise _fail(entity, f"sink.accepted.iceberg.namespace or domain is required for catalog {name} database containing {{domain}}") # fmt: skip
|
|
333
335
|
# Unity is rejected at parse (D1); the registry checked `warehouse_storage`.
|
|
334
336
|
if definition.type == "glue" and entity.sink.write_mode.startswith("merge"):
|
|
335
337
|
# ponytail: merges run through DuckDB, attached to REST catalogs only; attach Glue when a merge needs it
|
floe/iceberg/sink.py
CHANGED
|
@@ -70,9 +70,12 @@ def resolve_target(storages: StoragesConfig | None, catalogs: CatalogsConfig | N
|
|
|
70
70
|
catalog = next((c for c in (catalogs.definitions if catalogs else []) if c.name == name), None) # fmt: skip
|
|
71
71
|
if catalog is None: # validated; kept for callers that skip validation
|
|
72
72
|
raise FloeConfigError(f"entity.name={entity.name} sink.accepted.iceberg.catalog references unknown catalog {name}") # fmt: skip
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
# what `{domain}` in the database stands for (validated: set when the database has the token)
|
|
74
|
+
scope = sink.iceberg.namespace or entity.domain
|
|
75
|
+
database = catalog.database
|
|
76
|
+
if database is not None:
|
|
77
|
+
database = database.replace("{domain}", catalog_ident(scope or ""))
|
|
78
|
+
namespace = catalog_ident(scope or database or "default")
|
|
76
79
|
table = catalog_ident(sink.iceberg.table or entity.name)
|
|
77
80
|
field = f"entity.name={entity.name} sink.accepted.storage"
|
|
78
81
|
accepted_uri, storage = resolve_path(storages, config_dir, sink.storage, sink.path, field) # fmt: skip
|
|
@@ -85,8 +88,8 @@ def resolve_target(storages: StoragesConfig | None, catalogs: CatalogsConfig | N
|
|
|
85
88
|
else:
|
|
86
89
|
location = accepted_uri
|
|
87
90
|
# Rust: the Glue database holds the table; the namespace only names its location
|
|
88
|
-
if
|
|
89
|
-
namespace =
|
|
91
|
+
if database is not None:
|
|
92
|
+
namespace = database
|
|
90
93
|
return IcebergTarget(catalog, storage, namespace, table, location, accepted_uri) # fmt: skip
|
|
91
94
|
|
|
92
95
|
|
|
@@ -24,13 +24,13 @@ floe/config/profile.py,sha256=mYbyFse2pBUFuV5TMtl0RFrfyPUnJhdklbAX5eSAM88,15564
|
|
|
24
24
|
floe/config/project.py,sha256=zgTOhTDlbMr1chViMEZyv0drozZdumTaIoKDL0vv9sw,14141
|
|
25
25
|
floe/config/storage.py,sha256=BK3P65ukFqNgmbjCcuYmXR04OScf1yD8f19vGJq-aDI,6234
|
|
26
26
|
floe/config/types.py,sha256=4eveoOlyGmNxyZpI1PSjli9lnXLPc1-jYj4fL8qHN_8,5038
|
|
27
|
-
floe/config/validate.py,sha256
|
|
27
|
+
floe/config/validate.py,sha256=-cDn9CKfR1BmAATgYy1PWlTWSkpu4mjt4PMKNL7k2FE,35858
|
|
28
28
|
floe/config/vars.py,sha256=7Bq0IU0KrFeRlyA8W9-F0gDSDKfXCfFpBrX08H8Flvw,4577
|
|
29
29
|
floe/config/yaml.py,sha256=HeFGhKFxYkiqQOwljYOgUD5naJyxL_ZIX6hUIS36tzU,10071
|
|
30
30
|
floe/iceberg/catalog.py,sha256=TeINK-jVZJAurROEeovVNK3s4PY-czeWih1y_KWohP8,14455
|
|
31
31
|
floe/iceberg/compact.py,sha256=5O372vAIsvgRc2PGihryAsrQ0otn0F30AQu-cetRCP0,7123
|
|
32
32
|
floe/iceberg/merge.py,sha256=VE1Odf2B34Gxj7ZcuhbrfbgTGM9AdiDz6_2BbcQ-kSQ,12448
|
|
33
|
-
floe/iceberg/sink.py,sha256=
|
|
33
|
+
floe/iceberg/sink.py,sha256=uE0jLhhxRFOeKi7ChAzstKexy1ZrovE4EKATGTYn-Gk,11255
|
|
34
34
|
floe/iceberg/unique.py,sha256=PKUFEcCkU71k66__KfUE7NTos73ZYlZbb8GJPn0yFoo,2958
|
|
35
35
|
floe/iceberg/write.py,sha256=zrFeeJu-YT4Pxo9u-fRujUtFb1Epx1KFoq2qFyP1iGs,11036
|
|
36
36
|
floe/lineage/events.py,sha256=4txd8bGUwKBZd-8Aw_ebTurhlxAYk8SVMgH8vSjC3bs,6682
|
|
@@ -59,8 +59,8 @@ floe/storage/s3.py,sha256=XcG1qJTEY3KLSMLT950mUdrAxuCA8-Gx3fpNSzyV_Xo,7508
|
|
|
59
59
|
floe/storage/types.py,sha256=FvAEXWMdVdopRK276JyETRYGOva2-uR8pZvsWj6Xvy0,993
|
|
60
60
|
floe/write/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
61
|
floe/write/outputs.py,sha256=5LgN_8PMPPOgkRVZw_KvxYXmc02-meL7iZLeMKVtufQ,4932
|
|
62
|
-
floe_python-0.8.
|
|
63
|
-
floe_python-0.8.
|
|
64
|
-
floe_python-0.8.
|
|
65
|
-
floe_python-0.8.
|
|
66
|
-
floe_python-0.8.
|
|
62
|
+
floe_python-0.8.2.dist-info/METADATA,sha256=O9qNqOIcnbGRrkwUAcPGKh35ayNq0bG4YwZMpQ-z90g,442
|
|
63
|
+
floe_python-0.8.2.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
|
|
64
|
+
floe_python-0.8.2.dist-info/entry_points.txt,sha256=DU75r-E3zcK0quvwg5iT5DeWbUJck_Tz80bEj1IIzHA,40
|
|
65
|
+
floe_python-0.8.2.dist-info/licenses/LICENSE,sha256=dUhuoK-TCRQMpuLEAdfme-qPSJI0TlcH9jlNxeg9_EQ,1056
|
|
66
|
+
floe_python-0.8.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|