adiumentum 0.3.1__tar.gz → 0.3.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.
Files changed (26) hide show
  1. {adiumentum-0.3.1 → adiumentum-0.3.3}/PKG-INFO +1 -1
  2. {adiumentum-0.3.1 → adiumentum-0.3.3}/pyproject.toml +1 -1
  3. adiumentum-0.3.3/src/adiumentum/paths_manager.py +67 -0
  4. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/pydantic_extensions.py +16 -9
  5. adiumentum-0.3.1/src/adiumentum/paths_manager.py +0 -19
  6. {adiumentum-0.3.1 → adiumentum-0.3.3}/README.md +0 -0
  7. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/__init__.py +0 -0
  8. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/color.py +0 -0
  9. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/comparison.py +0 -0
  10. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/converters.py +0 -0
  11. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/dependency_sorting.py +0 -0
  12. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/display.py +0 -0
  13. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/elementary_types.py +0 -0
  14. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/exceptions.py +0 -0
  15. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/file_modification_time.py +0 -0
  16. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/frozendict.py +0 -0
  17. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/functional.py +0 -0
  18. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/io_utils.py +0 -0
  19. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/markers.py +0 -0
  20. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/merge.py +0 -0
  21. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/numerical.py +0 -0
  22. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/performance_logging.py +0 -0
  23. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/pydantic_extensions.md +0 -0
  24. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/string_utils.py +0 -0
  25. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/timestamping.py +0 -0
  26. {adiumentum-0.3.1 → adiumentum-0.3.3}/src/adiumentum/typing_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: adiumentum
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary:
5
5
  Author: Isaac Riley
6
6
  Author-email: Isaac Riley <yelircaasi@proton.me>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "adiumentum"
3
- version = "0.3.1"
3
+ version = "0.3.3"
4
4
  description = ""
5
5
  authors = [{name = "Isaac Riley", email = "yelircaasi@proton.me"}]
6
6
  readme = "README.md"
@@ -0,0 +1,67 @@
1
+ from abc import ABC, abstractmethod
2
+ from pathlib import Path
3
+ from typing import Self
4
+
5
+ from pydantic import BaseModel
6
+
7
+
8
+ # class PathsManager:
9
+ # @abstractmethod
10
+ # def setup(self) -> None: ...
11
+
12
+ # @classmethod
13
+ # @abstractmethod
14
+ # def auto(cls, root_dir: Path): ...
15
+
16
+ # @classmethod
17
+ # @abstractmethod
18
+ # def read(cls, config_file_path: Path) -> Self: ...
19
+
20
+ # @abstractmethod
21
+ # def write(self, config_file_path: Path) -> None: ...
22
+
23
+
24
+
25
+ class PathsManager(BaseModel, ABC):
26
+ @classmethod
27
+ @abstractmethod
28
+ def create(cls, *args, **kwargs) -> Self:
29
+ """
30
+ Create directories first if they do not already exist.
31
+ """
32
+ ...
33
+
34
+ @classmethod
35
+ @abstractmethod
36
+ def auto(cls, root_dir: Path, **kwargs) -> Self:
37
+ """
38
+ Create directories and files in the default location if they do not alreay exist.
39
+ """
40
+ ...
41
+
42
+
43
+ @classmethod
44
+ @abstractmethod
45
+ def read(cls, config_file_path: Path) -> Self:
46
+ ...
47
+
48
+ @abstractmethod
49
+ def write(self, config_file_path: Path) -> None:
50
+ ...
51
+
52
+ @staticmethod
53
+ def ensure_file_exists(p: Path, content_if_empty: str = "") -> Path:
54
+ if not p.exists():
55
+ p.touch()
56
+ if content_if_empty:
57
+ p.write_text(content_if_empty)
58
+ return p
59
+
60
+ @staticmethod
61
+ def ensure_directory_exists(p: Path) -> Path:
62
+ for parent in p.parents:
63
+ if not parent.exists():
64
+ parent.mkdir()
65
+ if not p.exists():
66
+ p.mkdir()
67
+ return p
@@ -67,7 +67,6 @@ class AbstractCustom(ABC):
67
67
  json_schema = handler.resolve_ref_schema(json_schema)
68
68
  return json_schema
69
69
 
70
- @abstractmethod
71
70
  def __init__(self, *args, **kwargs) -> None:
72
71
  TypeError(f"Use `model_validate` to instantiate {self.__class__.__name__}")
73
72
 
@@ -97,13 +96,14 @@ class AbstractCustom(ABC):
97
96
  return set()
98
97
 
99
98
  @classmethod
100
- @abstractmethod
101
- def model_construct(cls, _fields_set: set[str] | None = None, **values: Any) -> Self: ...
99
+ def model_construct(cls, _fields_set: set[str] | None = None, **values: Any) -> Self:
100
+ raise NotImplementedError
102
101
 
103
- @abstractmethod
104
102
  def model_copy(
105
103
  self, *, update: Mapping[str, Any] | None = None, deep: bool = False
106
- ) -> Self: ...
104
+ ) -> Self:
105
+ return self.__class__.model_validate(self.model_dump())
106
+
107
107
 
108
108
  def model_dump(
109
109
  self,
@@ -258,7 +258,6 @@ class AbstractCustom(ABC):
258
258
  return cls.post_validation_hook(validated)
259
259
 
260
260
  @classmethod
261
- @abstractmethod
262
261
  def model_validate_strings(
263
262
  cls,
264
263
  obj: Any,
@@ -268,17 +267,25 @@ class AbstractCustom(ABC):
268
267
  context: Any | None = None,
269
268
  by_alias: bool | None = None,
270
269
  by_name: bool | None = None,
271
- ) -> Self: ...
270
+ ) -> Self:
271
+ return cls.model_validate(
272
+ obj,
273
+ strict=strict,
274
+ extra=extra,
275
+ context=context,
276
+ by_alias=by_alias,
277
+ by_name=by_name,
278
+ )
272
279
 
273
280
  @property
274
281
  def __annotations__(self) -> dict[str, Any]: # type: ignore
275
282
  return self.get_adapter().__annotations__
276
283
 
277
284
  @classmethod
278
- def read(cls, read_path: Path) -> Self:
285
+ def read_json_file(cls, read_path: Path) -> Self:
279
286
  return cls.model_validate_json(read_path.read_text())
280
287
 
281
- def write(self, write_path: Path) -> None:
288
+ def write_json_file(self, write_path: Path) -> None:
282
289
  write_json(cast(JSONDict, self.model_dump(mode="json")), write_path)
283
290
 
284
291
  @staticmethod
@@ -1,19 +0,0 @@
1
- from abc import abstractmethod
2
- from pathlib import Path
3
- from typing import Self
4
-
5
-
6
- class PathsManager:
7
- @abstractmethod
8
- def setup(self) -> None: ...
9
-
10
- @classmethod
11
- @abstractmethod
12
- def auto(cls, root_dir: Path): ...
13
-
14
- @classmethod
15
- @abstractmethod
16
- def read(cls, config_file_path: Path) -> Self: ...
17
-
18
- @abstractmethod
19
- def write(self, config_file_path: Path) -> None: ...
File without changes