dagster-shared 1.12.5__tar.gz → 1.12.7__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 (62) hide show
  1. {dagster_shared-1.12.5/dagster_shared.egg-info → dagster_shared-1.12.7}/PKG-INFO +2 -2
  2. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/dagster_model/pydantic_compat_layer.py +4 -0
  3. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/record/__init__.py +5 -8
  4. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/utils/__init__.py +40 -1
  5. dagster_shared-1.12.7/dagster_shared/version.py +1 -0
  6. {dagster_shared-1.12.5 → dagster_shared-1.12.7/dagster_shared.egg-info}/PKG-INFO +2 -2
  7. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared.egg-info/requires.txt +0 -1
  8. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/setup.py +1 -1
  9. dagster_shared-1.12.5/dagster_shared/version.py +0 -1
  10. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/LICENSE +0 -0
  11. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/MANIFEST.in +0 -0
  12. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/README.md +0 -0
  13. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/__init__.py +0 -0
  14. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/check/README.md +0 -0
  15. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/check/__init__.py +0 -0
  16. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/check/builder.py +0 -0
  17. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/check/decorator.py +0 -0
  18. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/check/functions.py +0 -0
  19. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/check/record.py +0 -0
  20. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/cli/__init__.py +0 -0
  21. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/dagster_model/__init__.py +0 -0
  22. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/error.py +0 -0
  23. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/ipc.py +0 -0
  24. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/libraries/__init__.py +0 -0
  25. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/match.py +0 -0
  26. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/merger.py +0 -0
  27. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/modules.py +0 -0
  28. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/plus/__init__.py +0 -0
  29. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/plus/config.py +0 -0
  30. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/plus/config_utils.py +0 -0
  31. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/plus/login_server.py +0 -0
  32. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/py.typed +0 -0
  33. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/scaffold/__init__.py +0 -0
  34. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/serdes/__init__.py +0 -0
  35. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/serdes/errors.py +0 -0
  36. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/serdes/objects/__init__.py +0 -0
  37. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/serdes/objects/definition_metadata.py +0 -0
  38. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/serdes/objects/models/__init__.py +0 -0
  39. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/serdes/objects/models/defs_state_info.py +0 -0
  40. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/serdes/objects/package_entry.py +0 -0
  41. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/serdes/serdes.py +0 -0
  42. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/serdes/utils.py +0 -0
  43. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/seven/__init__.py +0 -0
  44. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/seven/abc.py +0 -0
  45. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/seven/compat/__init__.py +0 -0
  46. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/seven/json.py +0 -0
  47. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/seven/temp_dir.py +0 -0
  48. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/telemetry/__init__.py +0 -0
  49. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/utils/cached_method.py +0 -0
  50. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/utils/config.py +0 -0
  51. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/utils/hash.py +0 -0
  52. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/utils/test.py +0 -0
  53. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/utils/timing.py +0 -0
  54. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/utils/warnings.py +0 -0
  55. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/yaml_utils/__init__.py +0 -0
  56. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/yaml_utils/sample_yaml.py +0 -0
  57. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared/yaml_utils/source_position.py +0 -0
  58. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared.egg-info/SOURCES.txt +0 -0
  59. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared.egg-info/dependency_links.txt +0 -0
  60. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared.egg-info/not-zip-safe +0 -0
  61. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/dagster_shared.egg-info/top_level.txt +0 -0
  62. {dagster_shared-1.12.5 → dagster_shared-1.12.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster_shared
3
- Version: 1.12.5
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
@@ -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
- if hasattr(cls, _CHECKED_NEW):
493
- target = _CHECKED_NEW
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
 
@@ -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
@@ -0,0 +1 @@
1
+ __version__ = "1.12.7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dagster_shared
3
- Version: 1.12.5
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
@@ -7,5 +7,4 @@ tomlkit
7
7
 
8
8
  [test]
9
9
  pytest
10
- buildkite-test-collector
11
10
  flaky
@@ -29,6 +29,7 @@ setup(
29
29
  "Programming Language :: Python :: 3.11",
30
30
  "Programming Language :: Python :: 3.12",
31
31
  "Programming Language :: Python :: 3.13",
32
+ "Programming Language :: Python :: 3.14",
32
33
  "License :: OSI Approved :: Apache Software License",
33
34
  "Operating System :: OS Independent",
34
35
  ],
@@ -45,7 +46,6 @@ setup(
45
46
  extras_require={
46
47
  "test": [
47
48
  "pytest",
48
- "buildkite-test-collector",
49
49
  "flaky",
50
50
  ],
51
51
  },
@@ -1 +0,0 @@
1
- __version__ = "1.12.5"
File without changes