dagster-shared 1.12.5__py3-none-any.whl → 1.12.7__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.
- dagster_shared/dagster_model/pydantic_compat_layer.py +4 -0
- dagster_shared/record/__init__.py +5 -8
- dagster_shared/utils/__init__.py +40 -1
- dagster_shared/version.py +1 -1
- {dagster_shared-1.12.5.dist-info → dagster_shared-1.12.7.dist-info}/METADATA +2 -2
- {dagster_shared-1.12.5.dist-info → dagster_shared-1.12.7.dist-info}/RECORD +9 -9
- {dagster_shared-1.12.5.dist-info → dagster_shared-1.12.7.dist-info}/WHEEL +0 -0
- {dagster_shared-1.12.5.dist-info → dagster_shared-1.12.7.dist-info}/licenses/LICENSE +0 -0
- {dagster_shared-1.12.5.dist-info → dagster_shared-1.12.7.dist-info}/top_level.txt +0 -0
|
@@ -60,6 +60,10 @@ class ModelFieldCompat:
|
|
|
60
60
|
if hasattr(self.field, "discriminator"):
|
|
61
61
|
return self.field.discriminator if hasattr(self.field, "discriminator") else None
|
|
62
62
|
|
|
63
|
+
@property
|
|
64
|
+
def json_schema_extra(self) -> Optional[dict[str, Any]]:
|
|
65
|
+
return getattr(self.field, "json_schema_extra", None)
|
|
66
|
+
|
|
63
67
|
|
|
64
68
|
def model_fields(model: type[BaseModel]) -> dict[str, ModelFieldCompat]:
|
|
65
69
|
"""Returns a dictionary of fields for a given pydantic model, wrapped
|
|
@@ -32,7 +32,7 @@ _NAMED_TUPLE_BASE_NEW_FIELD = "__nt_new__"
|
|
|
32
32
|
_REMAPPING_FIELD = "__field_remap__"
|
|
33
33
|
_ORIGINAL_CLASS_FIELD = "__original_class__"
|
|
34
34
|
_KW_ONLY_FIELD = "__kw_only__"
|
|
35
|
-
|
|
35
|
+
_REPLACE_NEW_FIELD = "__replace_new__"
|
|
36
36
|
|
|
37
37
|
_sample_nt = namedtuple("_canary", "x")
|
|
38
38
|
# use a sample to avoid direct private imports (_collections._tuplegetter)
|
|
@@ -173,6 +173,7 @@ def _namedtuple_record_transform(
|
|
|
173
173
|
_REMAPPING_FIELD: field_to_new_mapping or {},
|
|
174
174
|
_ORIGINAL_CLASS_FIELD: cls,
|
|
175
175
|
_KW_ONLY_FIELD: kw_only,
|
|
176
|
+
_REPLACE_NEW_FIELD: generated_new if generated_new else nt_new,
|
|
176
177
|
"__reduce__": _reduce,
|
|
177
178
|
# functools doesn't work, so manually update_wrapper
|
|
178
179
|
"__module__": cls.__module__,
|
|
@@ -489,13 +490,8 @@ def replace(obj: TVal, **kwargs) -> TVal:
|
|
|
489
490
|
cls = obj.__class__
|
|
490
491
|
|
|
491
492
|
# if we have runtime type checking, go through that to vet new field values
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
else:
|
|
495
|
-
target = _NAMED_TUPLE_BASE_NEW_FIELD
|
|
496
|
-
|
|
497
|
-
return getattr(cls, target)(
|
|
498
|
-
obj.__class__,
|
|
493
|
+
return getattr(cls, _REPLACE_NEW_FIELD)(
|
|
494
|
+
cls,
|
|
499
495
|
**{**as_dict(obj), **kwargs},
|
|
500
496
|
)
|
|
501
497
|
|
|
@@ -570,6 +566,7 @@ class JitCheckedNew:
|
|
|
570
566
|
for c in cls.__mro__:
|
|
571
567
|
if c.__new__ is self:
|
|
572
568
|
c.__new__ = compiled_fn
|
|
569
|
+
setattr(cls, _REPLACE_NEW_FIELD, compiled_fn)
|
|
573
570
|
|
|
574
571
|
return compiled_fn(cls, *args, **kwargs)
|
|
575
572
|
|
dagster_shared/utils/__init__.py
CHANGED
|
@@ -3,8 +3,15 @@ import os
|
|
|
3
3
|
import random
|
|
4
4
|
import socket
|
|
5
5
|
from collections.abc import Iterator, Mapping
|
|
6
|
+
from pathlib import Path
|
|
6
7
|
from types import GenericAlias
|
|
7
|
-
from typing import TypeGuard, TypeVar
|
|
8
|
+
from typing import Optional, TypeGuard, TypeVar
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
import tomllib # pyright: ignore[reportMissingImports]
|
|
12
|
+
except ImportError:
|
|
13
|
+
# Python < 3.11 fallback
|
|
14
|
+
import tomli as tomllib
|
|
8
15
|
|
|
9
16
|
T = TypeVar("T")
|
|
10
17
|
|
|
@@ -88,3 +95,35 @@ def safe_is_subclass(obj, cls: type[T]) -> TypeGuard[type[T]]:
|
|
|
88
95
|
and not isinstance(obj, GenericAlias) # prevent exceptions on 3.9
|
|
89
96
|
and issubclass(obj, cls)
|
|
90
97
|
)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _read_pyproject_toml(directory: Path | str) -> Optional[dict]:
|
|
101
|
+
"""Read and parse pyproject.toml from a directory. Returns None if not found."""
|
|
102
|
+
if isinstance(directory, str):
|
|
103
|
+
directory = Path(directory)
|
|
104
|
+
pyproject_path = directory / "pyproject.toml"
|
|
105
|
+
if not pyproject_path.exists():
|
|
106
|
+
return None
|
|
107
|
+
with open(pyproject_path, "rb") as f:
|
|
108
|
+
return tomllib.load(f)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def find_uv_workspace_root(start_path: Path | str) -> Optional[tuple[Path, dict]]:
|
|
112
|
+
"""Walk up directories to find a uv workspace root.
|
|
113
|
+
|
|
114
|
+
Returns (workspace_root_path, workspace_config) or None if not found.
|
|
115
|
+
A uv workspace is identified by [tool.uv.workspace] in pyproject.toml.
|
|
116
|
+
"""
|
|
117
|
+
if isinstance(start_path, str):
|
|
118
|
+
start_path = Path(start_path)
|
|
119
|
+
current = start_path.resolve()
|
|
120
|
+
while True:
|
|
121
|
+
data = _read_pyproject_toml(current)
|
|
122
|
+
if data:
|
|
123
|
+
workspace_config = data.get("tool", {}).get("uv", {}).get("workspace", {})
|
|
124
|
+
if workspace_config:
|
|
125
|
+
return current, workspace_config
|
|
126
|
+
parent = current.parent
|
|
127
|
+
if parent == current:
|
|
128
|
+
return None
|
|
129
|
+
current = parent
|
dagster_shared/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.12.
|
|
1
|
+
__version__ = "1.12.7"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dagster_shared
|
|
3
|
-
Version: 1.12.
|
|
3
|
+
Version: 1.12.7
|
|
4
4
|
Summary: Shared code between dagster and dagster-dg-core.
|
|
5
5
|
Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-shared
|
|
6
6
|
Author: Dagster Labs
|
|
@@ -10,6 +10,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
13
14
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
14
15
|
Classifier: Operating System :: OS Independent
|
|
15
16
|
License-File: LICENSE
|
|
@@ -21,7 +22,6 @@ Requires-Dist: typing_extensions<5,>=4.11.0
|
|
|
21
22
|
Requires-Dist: tomlkit
|
|
22
23
|
Provides-Extra: test
|
|
23
24
|
Requires-Dist: pytest; extra == "test"
|
|
24
|
-
Requires-Dist: buildkite-test-collector; extra == "test"
|
|
25
25
|
Requires-Dist: flaky; extra == "test"
|
|
26
26
|
Dynamic: author
|
|
27
27
|
Dynamic: author-email
|
|
@@ -5,7 +5,7 @@ dagster_shared/match.py,sha256=P9wQSvzb7a03jXlC-0w9msoX5bV_BE1uSvdYvavNO6M,3444
|
|
|
5
5
|
dagster_shared/merger.py,sha256=c9cJTwHtgMXgR9MtB-KwZEMtQSXn13rF08F2ID5aDTg,1758
|
|
6
6
|
dagster_shared/modules.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
dagster_shared/py.typed,sha256=mDShSrm8qg9qjacQc2F-rI8ATllqP6EdgHuEYxuCXZ0,7
|
|
8
|
-
dagster_shared/version.py,sha256=
|
|
8
|
+
dagster_shared/version.py,sha256=2tyzZYgcForADG3tBrJC4WeSTZ1kx005eqIpHCIE71M,23
|
|
9
9
|
dagster_shared/check/README.md,sha256=UlxRVMWJEoVAlaHWDvhobUpuNQGBG5-ddqZ6OIfLYnM,1352
|
|
10
10
|
dagster_shared/check/__init__.py,sha256=CHSOqJpaeWr6skJT7jD8HnN5s4bdnoX4x94sGN55KqA,3482
|
|
11
11
|
dagster_shared/check/builder.py,sha256=2Ne2EM_2tGm2zYMg0vRxqC5r-KLc746UNnXe1Fk_vRc,17311
|
|
@@ -14,13 +14,13 @@ dagster_shared/check/functions.py,sha256=PhFZkMag2q5MKulQjgyIs_O9_t0XqOnzNRdQFZT
|
|
|
14
14
|
dagster_shared/check/record.py,sha256=vzwbmxQNQl3_oG74NRKgjlIDM2xpL5ZbKtKhoFNhNq4,412
|
|
15
15
|
dagster_shared/cli/__init__.py,sha256=y2q8V4gn5IRxq962uGjMkgWqpMK0B3pongr2mMB2vvg,8781
|
|
16
16
|
dagster_shared/dagster_model/__init__.py,sha256=MoUreIsyzBIjn1w2noiyR0CmBg2kiP2VhUGkXvFI5E8,1296
|
|
17
|
-
dagster_shared/dagster_model/pydantic_compat_layer.py,sha256=
|
|
17
|
+
dagster_shared/dagster_model/pydantic_compat_layer.py,sha256=nA3s7rOStkjNAOGNBlS3VhukBawRt1FAXkgLarDtxqY,3030
|
|
18
18
|
dagster_shared/libraries/__init__.py,sha256=VBOVSB2MU2HZzUTarK-3JE-7k7xkhiggPZnaAsEcwNg,4669
|
|
19
19
|
dagster_shared/plus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
20
|
dagster_shared/plus/config.py,sha256=0kAWocZFYh9NmCoOT348YUg0vQe9SEpJ_Ze9R3uyR-w,5756
|
|
21
21
|
dagster_shared/plus/config_utils.py,sha256=eVvahsrGQdcYL1H3_63kXO2NKsVPtWXhlGFajvJPQ5w,6147
|
|
22
22
|
dagster_shared/plus/login_server.py,sha256=zRc85NUHtxpgXGfzV1d4hq-n9ZdXTBiSmagUebwxqdE,3630
|
|
23
|
-
dagster_shared/record/__init__.py,sha256=
|
|
23
|
+
dagster_shared/record/__init__.py,sha256=yfmDqHKt1fgwAzz9ACKicF61eRqcYqBLGY49F6JtliQ,22621
|
|
24
24
|
dagster_shared/scaffold/__init__.py,sha256=xb5-ZdbZ5wSYYJy8VA1KGDnPodM6bKTCSBPS85Wqi_w,3759
|
|
25
25
|
dagster_shared/serdes/__init__.py,sha256=BInlrdN_14uwPz0t32Dl1VH4D-7_rG1vUfZ0rw5DQc0,649
|
|
26
26
|
dagster_shared/serdes/errors.py,sha256=qg_VZqtuYAlAXIjOp96bGs_z309ifDoHuT4sVnxJ6nA,142
|
|
@@ -37,7 +37,7 @@ dagster_shared/seven/json.py,sha256=TElHKCmD71QJSDKvFP4e_vLMoSAFsAllPAbmplzSN30,
|
|
|
37
37
|
dagster_shared/seven/temp_dir.py,sha256=L03xfE14yxlcmjCI9NrViY36r4MMjaahfexJygMPaJo,354
|
|
38
38
|
dagster_shared/seven/compat/__init__.py,sha256=8BqkAab5uZGmSyvBFpePjAaXR9seNDobs3TYI45nt5k,105
|
|
39
39
|
dagster_shared/telemetry/__init__.py,sha256=_SLCyZSLGFmaZLujii-z7FK642ewI78Nm4eV8n-3Xxs,11335
|
|
40
|
-
dagster_shared/utils/__init__.py,sha256=
|
|
40
|
+
dagster_shared/utils/__init__.py,sha256=m4QRhlvU_XCN3BWcUr_mead-7Ui4XvQJo3SIDgljirU,4310
|
|
41
41
|
dagster_shared/utils/cached_method.py,sha256=WQj_xtSTO5qIejFqxnLXpjIMRsiWe8aJ0IcZkkWBWxY,7183
|
|
42
42
|
dagster_shared/utils/config.py,sha256=np_6pJ6r3xRKfV-cPeR6qVXebhj-Oznw3rhWP67miNM,3536
|
|
43
43
|
dagster_shared/utils/hash.py,sha256=WA0FegijIAhMphC0gt30tTqpR6BecRk1GhIMtV71qbU,2060
|
|
@@ -47,8 +47,8 @@ dagster_shared/utils/warnings.py,sha256=yxiG8ghc3RwyomRItwIKQe6TrUdTlJAUX3BssOwe
|
|
|
47
47
|
dagster_shared/yaml_utils/__init__.py,sha256=Ya7qT3aJGPC1TgD-pSkkhLX5U4QbrUkCsrUtZQeACXg,10529
|
|
48
48
|
dagster_shared/yaml_utils/sample_yaml.py,sha256=YC-1h1P48F3QV-Uwo-MqzEkzlrMliXPfZM_X6ynZvTQ,5461
|
|
49
49
|
dagster_shared/yaml_utils/source_position.py,sha256=yVSnHUkBYzWzLzqtyGbqRjH2b7oTeiE4K3b-uokYUIQ,9786
|
|
50
|
-
dagster_shared-1.12.
|
|
51
|
-
dagster_shared-1.12.
|
|
52
|
-
dagster_shared-1.12.
|
|
53
|
-
dagster_shared-1.12.
|
|
54
|
-
dagster_shared-1.12.
|
|
50
|
+
dagster_shared-1.12.7.dist-info/licenses/LICENSE,sha256=hgU51ohULAFKZE2la8sartPYoUaAA14jxFAfFC4Tow0,11347
|
|
51
|
+
dagster_shared-1.12.7.dist-info/METADATA,sha256=FMaGpagh34RNh_wzmfeEFdOIbaRaV0s0kNkikIQrdSg,1147
|
|
52
|
+
dagster_shared-1.12.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
53
|
+
dagster_shared-1.12.7.dist-info/top_level.txt,sha256=S8ADcO4aTW07ONhLHXDxiuSkDzucgYKOlocB2x3r_dY,15
|
|
54
|
+
dagster_shared-1.12.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|