steve-cli 0.3.9__tar.gz → 0.3.11__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.
- {steve_cli-0.3.9 → steve_cli-0.3.11}/PKG-INFO +1 -1
- {steve_cli-0.3.9 → steve_cli-0.3.11}/pyproject.toml +1 -1
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/decorators/lineage_job.py +4 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/lineage/collector.py +9 -4
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/lineage/storage.py +11 -4
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli.egg-info/PKG-INFO +1 -1
- {steve_cli-0.3.9 → steve_cli-0.3.11}/README.md +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/setup.cfg +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/__init__.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/cli.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/decorators/__init__.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/lineage/__init__.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/lineage/adapters/__init__.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/lineage/adapters/logging.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/lineage/adapters/null.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/lineage/adapters/openlineage.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/lineage/port.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/lineage/registry.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/__init__.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/metadata/__init__.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/metadata/extractors/__init__.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/metadata/extractors/csv.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/metadata/extractors/excel.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/metadata/extractors/generic.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/metadata/extractors/json.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/metadata/extractors/parquet.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/metadata/port.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/metadata/registry.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/parquet.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/protocol.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage/s3.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/storage.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/validation/__init__.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/validation/adapters/__init__.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/validation/adapters/great_expectations.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/validation/adapters/null.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/validation/adapters/validoopsie.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/validation/port.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli/validation/registry.py +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli.egg-info/SOURCES.txt +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli.egg-info/dependency_links.txt +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli.egg-info/entry_points.txt +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli.egg-info/requires.txt +0 -0
- {steve_cli-0.3.9 → steve_cli-0.3.11}/steve_cli.egg-info/top_level.txt +0 -0
|
@@ -26,6 +26,10 @@ def lineage_job(
|
|
|
26
26
|
|
|
27
27
|
@functools.wraps(fn)
|
|
28
28
|
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
29
|
+
from dotenv import load_dotenv
|
|
30
|
+
load_dotenv(".env", override=False)
|
|
31
|
+
load_dotenv(".workspaces.env", override=False)
|
|
32
|
+
|
|
29
33
|
session = make_session(
|
|
30
34
|
namespace=namespace,
|
|
31
35
|
job_name=job_name,
|
|
@@ -18,16 +18,21 @@ class LineageSession:
|
|
|
18
18
|
_inputs: set[str] = field(default_factory=set)
|
|
19
19
|
_outputs: set[str] = field(default_factory=set)
|
|
20
20
|
_facets: Dict[str, Dict[str, Any]] = field(default_factory=dict)
|
|
21
|
+
_dataset_namespaces: Dict[str, str] = field(default_factory=dict)
|
|
21
22
|
|
|
22
|
-
def record_read(self, dataset: str, facets: Dict[str, Any] | None = None) -> None:
|
|
23
|
+
def record_read(self, dataset: str, facets: Dict[str, Any] | None = None, namespace: str | None = None) -> None:
|
|
23
24
|
self._inputs.add(dataset)
|
|
24
25
|
if facets:
|
|
25
26
|
self._facets.setdefault(dataset, {}).update(facets)
|
|
27
|
+
if namespace:
|
|
28
|
+
self._dataset_namespaces[dataset] = namespace
|
|
26
29
|
|
|
27
|
-
def record_write(self, dataset: str, facets: Dict[str, Any] | None = None) -> None:
|
|
30
|
+
def record_write(self, dataset: str, facets: Dict[str, Any] | None = None, namespace: str | None = None) -> None:
|
|
28
31
|
self._outputs.add(dataset)
|
|
29
32
|
if facets:
|
|
30
33
|
self._facets.setdefault(dataset, {}).update(facets)
|
|
34
|
+
if namespace:
|
|
35
|
+
self._dataset_namespaces[dataset] = namespace
|
|
31
36
|
|
|
32
37
|
def attach_facets(self, dataset: str, facets: Dict[str, Any]) -> None:
|
|
33
38
|
self._facets.setdefault(dataset, {}).update(facets)
|
|
@@ -42,8 +47,8 @@ class LineageSession:
|
|
|
42
47
|
namespace=self.namespace,
|
|
43
48
|
run_id=self.run_id,
|
|
44
49
|
state=state,
|
|
45
|
-
inputs=[DatasetRef(namespace=self.namespace, name=x, facets=self._facets.get(x, {})) for x in self._inputs],
|
|
46
|
-
outputs=[DatasetRef(namespace=self.namespace, name=x, facets=self._facets.get(x, {})) for x in self._outputs],
|
|
50
|
+
inputs=[DatasetRef(namespace=self._dataset_namespaces.get(x, self.namespace), name=x, facets=self._facets.get(x, {})) for x in self._inputs],
|
|
51
|
+
outputs=[DatasetRef(namespace=self._dataset_namespaces.get(x, self.namespace), name=x, facets=self._facets.get(x, {})) for x in self._outputs],
|
|
47
52
|
run_facets=run_facets or {},
|
|
48
53
|
)
|
|
49
54
|
|
|
@@ -58,23 +58,30 @@ class LineageStorage:
|
|
|
58
58
|
self.__resolved = self._storage_or_factory # type: ignore[assignment]
|
|
59
59
|
return self.__resolved
|
|
60
60
|
|
|
61
|
+
@property
|
|
62
|
+
def _dataset_namespace(self) -> str | None:
|
|
63
|
+
s = self._storage
|
|
64
|
+
if hasattr(s, 'endpoint') and hasattr(s, 'bucket'):
|
|
65
|
+
return f"{s.endpoint.rstrip('/')}/{s.bucket}"
|
|
66
|
+
return None
|
|
67
|
+
|
|
61
68
|
def put_file(self, local_path: str, path: str) -> None:
|
|
62
69
|
self._storage.put_file(local_path, path)
|
|
63
|
-
self._session.record_write(path)
|
|
70
|
+
self._session.record_write(path, namespace=self._dataset_namespace)
|
|
64
71
|
|
|
65
72
|
def get_file(self, path: str, local_path: str) -> None:
|
|
66
73
|
self._storage.get_file(path, local_path)
|
|
67
|
-
self._session.record_read(path)
|
|
74
|
+
self._session.record_read(path, namespace=self._dataset_namespace)
|
|
68
75
|
|
|
69
76
|
def put_bytes(self, data: bytes, path: str) -> None:
|
|
70
77
|
self._storage.put_bytes(data, path)
|
|
71
78
|
facets = _extract_facets(data, path)
|
|
72
|
-
self._session.record_write(path, facets or None)
|
|
79
|
+
self._session.record_write(path, facets or None, namespace=self._dataset_namespace)
|
|
73
80
|
|
|
74
81
|
def get_bytes(self, path: str) -> bytes:
|
|
75
82
|
data = self._storage.get_bytes(path)
|
|
76
83
|
facets = _extract_facets(data, path)
|
|
77
|
-
self._session.record_read(path, facets or None)
|
|
84
|
+
self._session.record_read(path, facets or None, namespace=self._dataset_namespace)
|
|
78
85
|
return data
|
|
79
86
|
|
|
80
87
|
def read(self, path: str) -> DatasetHandle:
|
|
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
|