dagster-datacontract 0.3.0__tar.gz → 0.3.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 (19) hide show
  1. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/PKG-INFO +1 -1
  2. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract/__init__.py +18 -12
  3. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract/metadata/server_information.py +22 -13
  4. dagster_datacontract-0.3.1/dagster_datacontract/utils/__init__.py +28 -0
  5. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract.egg-info/PKG-INFO +1 -1
  6. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract.egg-info/SOURCES.txt +2 -1
  7. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/pyproject.toml +1 -1
  8. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/LICENSE +0 -0
  9. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/README.md +0 -0
  10. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract/description/__init__.py +0 -0
  11. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract/description/description.py +0 -0
  12. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract/metadata/__init__.py +0 -0
  13. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract/metadata/table_colums.py +0 -0
  14. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract/tags/__init__.py +0 -0
  15. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract/tags/tags.py +0 -0
  16. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract.egg-info/dependency_links.txt +0 -0
  17. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract.egg-info/requires.txt +0 -0
  18. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/dagster_datacontract.egg-info/top_level.txt +0 -0
  19. {dagster_datacontract-0.3.0 → dagster_datacontract-0.3.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-datacontract
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Load metadata and asset check spesifications from data contracts.
5
5
  Author-email: Fredrik Bakken <fredrik@dataheim.io>
6
6
  Requires-Python: >=3.10.0
@@ -14,6 +14,7 @@ from dagster_datacontract.metadata import (
14
14
  get_table_column,
15
15
  )
16
16
  from dagster_datacontract.tags import get_tags
17
+ from dagster_datacontract.utils import normalize_path
17
18
 
18
19
 
19
20
  class DataContractLoader:
@@ -41,6 +42,15 @@ class DataContractLoader:
41
42
  def _load_metadata(
42
43
  self,
43
44
  ) -> dict[str, TableColumnLineage | TableSchema | Any] | None:
45
+ metadata = (
46
+ {
47
+ "data contract path": dg.MetadataValue.url(
48
+ normalize_path(self.data_contract._data_contract_file)
49
+ ),
50
+ }
51
+ if self.data_contract._data_contract_file
52
+ else {}
53
+ )
44
54
  columns = []
45
55
  deps_by_column = {}
46
56
 
@@ -53,19 +63,19 @@ class DataContractLoader:
53
63
  table_column_lineage = get_column_lineage(column_field)
54
64
  deps_by_column[column_name] = table_column_lineage
55
65
 
66
+ metadata["dagster/column_schema"] = dg.TableSchema(columns=columns)
67
+ metadata["dagster/column_lineage"] = dg.TableColumnLineage(
68
+ deps_by_column=deps_by_column
69
+ )
70
+
56
71
  server_information = get_server_information(
57
72
  self.data_contract_specification,
58
73
  self.data_contract._server,
59
74
  self.asset_name,
60
75
  )
76
+ metadata.update(server_information)
61
77
 
62
- return {
63
- "dagster/column_schema": dg.TableSchema(columns=columns),
64
- "dagster/column_lineage": dg.TableColumnLineage(
65
- deps_by_column=deps_by_column
66
- ),
67
- **server_information,
68
- }
78
+ return metadata
69
79
 
70
80
  def _load_owner(self) -> list[str] | None:
71
81
  owner = self.data_contract_specification.info.owner
@@ -108,11 +118,7 @@ class DataContractLoader:
108
118
  blocking=True,
109
119
  )
110
120
  def check_asset():
111
- data_contract = DataContract(
112
- data_contract=self.data_contract_specification,
113
- server=self.server_name,
114
- )
115
- run = data_contract.test()
121
+ run = self.data_contract.test()
116
122
 
117
123
  return dg.AssetCheckResult(
118
124
  passed=run.result == ResultEnum.passed,
@@ -1,17 +1,6 @@
1
- import os
2
- import urllib.parse
3
-
4
1
  from datacontract.data_contract import DataContractSpecification
5
2
 
6
-
7
- def _normalize_path(path: str) -> str:
8
- parsed = urllib.parse.urlparse(path)
9
-
10
- if not parsed.scheme or parsed.scheme == "file":
11
- full_path = os.path.abspath(os.path.expanduser(path))
12
- return f"file://{full_path}"
13
- else:
14
- return path
3
+ from dagster_datacontract.utils import normalize_path
15
4
 
16
5
 
17
6
  def get_server_information(
@@ -19,6 +8,26 @@ def get_server_information(
19
8
  server_name: str | None,
20
9
  asset_name: str,
21
10
  ) -> dict[str, str]:
11
+ """Returns a dictionary containing server-specific information to be used
12
+ by Dagster for identifying asset locations or connections.
13
+
14
+ This function inspects the provided `DataContractSpecification` to locate
15
+ the specified server by name and constructs a dictionary with keys such as
16
+ "dagster/uri" and "dagster/table_name" depending on the server type.
17
+
18
+ Parameters:
19
+ data_contract_specification (DataContractSpecification):
20
+ The data contract specification containing server configurations.
21
+ server_name (str | None):
22
+ The name of the server to retrieve information for. If None or not found, returns an empty dict.
23
+ asset_name (str):
24
+ The name of the asset, used for constructing fully qualified table names for certain server types.
25
+
26
+ Returns:
27
+ dict[str, str]: A dictionary with keys like "dagster/uri" and/or "dagster/table_name"
28
+ depending on the server type. Returns an empty dictionary if the server is not found
29
+ or if the server type is not recognized or unsupported.
30
+ """
22
31
  server = data_contract_specification.servers.get(server_name)
23
32
  if not server:
24
33
  return {}
@@ -37,7 +46,7 @@ def get_server_information(
37
46
  case "kinesis":
38
47
  server_information = {}
39
48
  case "local":
40
- server_information["dagster/uri"] = _normalize_path(server.path)
49
+ server_information["dagster/uri"] = normalize_path(server.path)
41
50
  case "oracle":
42
51
  server_information["dagster/uri"] = f"{server.host}:{server.port}"
43
52
  case "postgres":
@@ -0,0 +1,28 @@
1
+ import os
2
+ import urllib.parse
3
+
4
+
5
+ def normalize_path(path: str) -> str:
6
+ """Normalizes a file path to ensure it is returned in a consistent URI format.
7
+
8
+ This function checks if the provided path is a local file path (with no scheme
9
+ or with the 'file' scheme) and converts it into a fully qualified file URI.
10
+ If the path already has a non-'file' scheme (e.g., 's3://', 'http://'),
11
+ it is returned unchanged.
12
+
13
+ Parameters:
14
+ path (str): The input file path. This can be a relative or absolute local path,
15
+ a path starting with `~`, or a URI with a supported scheme.
16
+
17
+ Returns:
18
+ str: A normalized path string:
19
+ - If the input is a local path or has a "file" scheme, returns it in the form "file:///absolute/path".
20
+ - If the input has another scheme (e.g., "s3://", "http://"), returns it unchanged.
21
+ """
22
+ parsed = urllib.parse.urlparse(path)
23
+
24
+ if not parsed.scheme or parsed.scheme == "file":
25
+ full_path = os.path.abspath(os.path.expanduser(path))
26
+ return f"file://{full_path}"
27
+ else:
28
+ return path
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-datacontract
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Load metadata and asset check spesifications from data contracts.
5
5
  Author-email: Fredrik Bakken <fredrik@dataheim.io>
6
6
  Requires-Python: >=3.10.0
@@ -13,4 +13,5 @@ dagster_datacontract/metadata/__init__.py
13
13
  dagster_datacontract/metadata/server_information.py
14
14
  dagster_datacontract/metadata/table_colums.py
15
15
  dagster_datacontract/tags/__init__.py
16
- dagster_datacontract/tags/tags.py
16
+ dagster_datacontract/tags/tags.py
17
+ dagster_datacontract/utils/__init__.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dagster-datacontract"
3
- version = "0.3.0"
3
+ version = "0.3.1"
4
4
  description = "Load metadata and asset check spesifications from data contracts."
5
5
  authors = [
6
6
  { name = "Fredrik Bakken", email = "fredrik@dataheim.io" }