dagster-datacontract 0.2.1__tar.gz → 0.2.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.
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-datacontract
3
- Version: 0.2.1
3
+ Version: 0.2.3
4
4
  Summary: Load metadata and asset check spesifications from data contracts.
5
5
  Author-email: Fredrik Bakken <fredrik@dataheim.io>
6
- Requires-Python: >=3.11.10
6
+ Requires-Python: >=3.10.0
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
- Requires-Dist: dagster>=1.10.9
10
- Requires-Dist: dagster-webserver>=1.10.9
9
+ Requires-Dist: dagster>=1.10.10
11
10
  Requires-Dist: datacontract-cli>=0.10.23
11
+ Requires-Dist: loguru>=0.7.3
12
12
  Dynamic: license-file
13
13
 
14
14
  # dagster-datacontract
@@ -32,18 +32,18 @@ from datetime import timedelta
32
32
  from pathlib import Path
33
33
 
34
34
  import dagster as dg
35
- import requests
36
35
  import polars as pl
36
+ import requests
37
37
  from datacontract.data_contract import DataContract
38
38
 
39
39
  from dagster_datacontract import DataContractLoader
40
40
 
41
-
42
41
  asset_name = "yellow_taxi_trip_records"
43
42
  data_contract = DataContractLoader(
44
43
  asset_name=asset_name,
45
44
  data_contract=DataContract(
46
45
  data_contract_file="./example/datacontract.yml",
46
+ server="production",
47
47
  ),
48
48
  )
49
49
 
@@ -52,7 +52,7 @@ data_contract = DataContractLoader(
52
52
  name=asset_name,
53
53
  metadata=data_contract.metadata,
54
54
  tags=data_contract.tags,
55
- description=data_contract.load_description(),
55
+ description=data_contract.description,
56
56
  owners=data_contract.owner,
57
57
  code_version=data_contract.version,
58
58
  )
@@ -19,18 +19,18 @@ from datetime import timedelta
19
19
  from pathlib import Path
20
20
 
21
21
  import dagster as dg
22
- import requests
23
22
  import polars as pl
23
+ import requests
24
24
  from datacontract.data_contract import DataContract
25
25
 
26
26
  from dagster_datacontract import DataContractLoader
27
27
 
28
-
29
28
  asset_name = "yellow_taxi_trip_records"
30
29
  data_contract = DataContractLoader(
31
30
  asset_name=asset_name,
32
31
  data_contract=DataContract(
33
32
  data_contract_file="./example/datacontract.yml",
33
+ server="production",
34
34
  ),
35
35
  )
36
36
 
@@ -39,7 +39,7 @@ data_contract = DataContractLoader(
39
39
  name=asset_name,
40
40
  metadata=data_contract.metadata,
41
41
  tags=data_contract.tags,
42
- description=data_contract.load_description(),
42
+ description=data_contract.description,
43
43
  owners=data_contract.owner,
44
44
  code_version=data_contract.version,
45
45
  )
@@ -1,4 +1,5 @@
1
1
  import json
2
+ import re
2
3
  import textwrap
3
4
  from datetime import timedelta
4
5
  from typing import Any
@@ -7,6 +8,7 @@ import dagster as dg
7
8
  from dagster import TableColumnLineage, TableSchema
8
9
  from datacontract.data_contract import DataContract
9
10
  from datacontract.model.run import ResultEnum
11
+ from loguru import logger
10
12
 
11
13
 
12
14
  class DataContractLoader:
@@ -23,6 +25,7 @@ class DataContractLoader:
23
25
  )
24
26
  self.metadata = self._load_metadata()
25
27
  self.tags = self._load_tags()
28
+ self.description = self.load_description()
26
29
  self.owner = self._load_owner()
27
30
  self.version = self._load_version()
28
31
  self.cron_schedule = self._load_cron_schedule()
@@ -66,12 +69,26 @@ class DataContractLoader:
66
69
  }
67
70
 
68
71
  def _load_tags(self) -> dict[str, str]:
69
- tags = {
70
- item.split(":")[0].strip(): item.split(":")[1].strip()
71
- if ":" in item
72
- else ""
73
- for item in self.data_contract_specification.tags
74
- }
72
+ """Safely load tags from data contract.
73
+
74
+ More information about Dagster tags:
75
+ https://docs.dagster.io/guides/build/assets/metadata-and-tags/tags
76
+ """
77
+ key_pattern = re.compile(r"^[\w.-]{1,63}$")
78
+ val_pattern = re.compile(r"^[\w.-]{0,63}$")
79
+
80
+ tags = {}
81
+
82
+ for item in self.data_contract_specification.tags:
83
+ if ":" in item:
84
+ key, val = map(str.strip, item.split(":", 1))
85
+ else:
86
+ key, val = item.strip(), ""
87
+
88
+ if key_pattern.match(key) and val_pattern.match(val):
89
+ tags[key] = val
90
+ else:
91
+ logger.warning(f"Ignoring invalid tag: {item}")
75
92
 
76
93
  return tags
77
94
 
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-datacontract
3
- Version: 0.2.1
3
+ Version: 0.2.3
4
4
  Summary: Load metadata and asset check spesifications from data contracts.
5
5
  Author-email: Fredrik Bakken <fredrik@dataheim.io>
6
- Requires-Python: >=3.11.10
6
+ Requires-Python: >=3.10.0
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
- Requires-Dist: dagster>=1.10.9
10
- Requires-Dist: dagster-webserver>=1.10.9
9
+ Requires-Dist: dagster>=1.10.10
11
10
  Requires-Dist: datacontract-cli>=0.10.23
11
+ Requires-Dist: loguru>=0.7.3
12
12
  Dynamic: license-file
13
13
 
14
14
  # dagster-datacontract
@@ -32,18 +32,18 @@ from datetime import timedelta
32
32
  from pathlib import Path
33
33
 
34
34
  import dagster as dg
35
- import requests
36
35
  import polars as pl
36
+ import requests
37
37
  from datacontract.data_contract import DataContract
38
38
 
39
39
  from dagster_datacontract import DataContractLoader
40
40
 
41
-
42
41
  asset_name = "yellow_taxi_trip_records"
43
42
  data_contract = DataContractLoader(
44
43
  asset_name=asset_name,
45
44
  data_contract=DataContract(
46
45
  data_contract_file="./example/datacontract.yml",
46
+ server="production",
47
47
  ),
48
48
  )
49
49
 
@@ -52,7 +52,7 @@ data_contract = DataContractLoader(
52
52
  name=asset_name,
53
53
  metadata=data_contract.metadata,
54
54
  tags=data_contract.tags,
55
- description=data_contract.load_description(),
55
+ description=data_contract.description,
56
56
  owners=data_contract.owner,
57
57
  code_version=data_contract.version,
58
58
  )
@@ -0,0 +1,3 @@
1
+ dagster>=1.10.10
2
+ datacontract-cli>=0.10.23
3
+ loguru>=0.7.3
@@ -1,25 +1,32 @@
1
1
  [project]
2
2
  name = "dagster-datacontract"
3
- version = "0.2.1"
3
+ version = "0.2.3"
4
4
  description = "Load metadata and asset check spesifications from data contracts."
5
5
  authors = [
6
6
  { name = "Fredrik Bakken", email = "fredrik@dataheim.io" }
7
7
  ]
8
8
  readme = "README.md"
9
- requires-python = ">=3.11.10"
9
+ requires-python = ">=3.10.0"
10
10
  dependencies = [
11
- "dagster>=1.10.9",
12
- "dagster-webserver>=1.10.9",
11
+ "dagster>=1.10.10",
13
12
  "datacontract-cli>=0.10.23",
13
+ "loguru>=0.7.3",
14
14
  ]
15
15
 
16
16
  [dependency-groups]
17
17
  dev = [
18
- "polars>=1.27.0",
18
+ "dagster-webserver>=1.10.10",
19
+ "polars>=1.27.1",
19
20
  "pre-commit>=4.2.0",
20
- "ruff>=0.11.4",
21
+ "ruff>=0.11.5",
21
22
  ]
22
23
 
23
24
  [build-system]
24
25
  requires = ["setuptools"]
25
26
  build-backend = "setuptools.build_meta"
27
+
28
+ [tool.ruff.lint]
29
+ extend-select = [
30
+ "UP", # pyupgrade
31
+ "I", # re-order imports in alphabetic order
32
+ ]
@@ -1,3 +0,0 @@
1
- dagster>=1.10.9
2
- dagster-webserver>=1.10.9
3
- datacontract-cli>=0.10.23