dagster-datacontract 0.2.2__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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-datacontract
3
- Version: 0.2.2
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
6
  Requires-Python: >=3.10.0
@@ -8,6 +8,7 @@ Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
9
  Requires-Dist: dagster>=1.10.10
10
10
  Requires-Dist: datacontract-cli>=0.10.23
11
+ Requires-Dist: loguru>=0.7.3
11
12
  Dynamic: license-file
12
13
 
13
14
  # dagster-datacontract
@@ -31,18 +32,18 @@ from datetime import timedelta
31
32
  from pathlib import Path
32
33
 
33
34
  import dagster as dg
34
- import requests
35
35
  import polars as pl
36
+ import requests
36
37
  from datacontract.data_contract import DataContract
37
38
 
38
39
  from dagster_datacontract import DataContractLoader
39
40
 
40
-
41
41
  asset_name = "yellow_taxi_trip_records"
42
42
  data_contract = DataContractLoader(
43
43
  asset_name=asset_name,
44
44
  data_contract=DataContract(
45
45
  data_contract_file="./example/datacontract.yml",
46
+ server="production",
46
47
  ),
47
48
  )
48
49
 
@@ -51,7 +52,7 @@ data_contract = DataContractLoader(
51
52
  name=asset_name,
52
53
  metadata=data_contract.metadata,
53
54
  tags=data_contract.tags,
54
- description=data_contract.load_description(),
55
+ description=data_contract.description,
55
56
  owners=data_contract.owner,
56
57
  code_version=data_contract.version,
57
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:
@@ -67,12 +69,26 @@ class DataContractLoader:
67
69
  }
68
70
 
69
71
  def _load_tags(self) -> dict[str, str]:
70
- tags = {
71
- item.split(":")[0].strip(): item.split(":")[1].strip()
72
- if ":" in item
73
- else ""
74
- for item in self.data_contract_specification.tags
75
- }
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}")
76
92
 
77
93
  return tags
78
94
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster-datacontract
3
- Version: 0.2.2
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
6
  Requires-Python: >=3.10.0
@@ -8,6 +8,7 @@ Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
9
  Requires-Dist: dagster>=1.10.10
10
10
  Requires-Dist: datacontract-cli>=0.10.23
11
+ Requires-Dist: loguru>=0.7.3
11
12
  Dynamic: license-file
12
13
 
13
14
  # dagster-datacontract
@@ -31,18 +32,18 @@ from datetime import timedelta
31
32
  from pathlib import Path
32
33
 
33
34
  import dagster as dg
34
- import requests
35
35
  import polars as pl
36
+ import requests
36
37
  from datacontract.data_contract import DataContract
37
38
 
38
39
  from dagster_datacontract import DataContractLoader
39
40
 
40
-
41
41
  asset_name = "yellow_taxi_trip_records"
42
42
  data_contract = DataContractLoader(
43
43
  asset_name=asset_name,
44
44
  data_contract=DataContract(
45
45
  data_contract_file="./example/datacontract.yml",
46
+ server="production",
46
47
  ),
47
48
  )
48
49
 
@@ -51,7 +52,7 @@ data_contract = DataContractLoader(
51
52
  name=asset_name,
52
53
  metadata=data_contract.metadata,
53
54
  tags=data_contract.tags,
54
- description=data_contract.load_description(),
55
+ description=data_contract.description,
55
56
  owners=data_contract.owner,
56
57
  code_version=data_contract.version,
57
58
  )
@@ -1,2 +1,3 @@
1
1
  dagster>=1.10.10
2
2
  datacontract-cli>=0.10.23
3
+ loguru>=0.7.3
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dagster-datacontract"
3
- version = "0.2.2"
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" }
@@ -10,6 +10,7 @@ requires-python = ">=3.10.0"
10
10
  dependencies = [
11
11
  "dagster>=1.10.10",
12
12
  "datacontract-cli>=0.10.23",
13
+ "loguru>=0.7.3",
13
14
  ]
14
15
 
15
16
  [dependency-groups]
@@ -23,3 +24,9 @@ dev = [
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
+ ]