adiumentum 0.3.1__py3-none-any.whl → 0.3.3__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.
@@ -1,19 +1,67 @@
1
- from abc import abstractmethod
1
+ from abc import ABC, abstractmethod
2
2
  from pathlib import Path
3
3
  from typing import Self
4
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: ...
5
22
 
6
- class PathsManager:
7
- @abstractmethod
8
- def setup(self) -> None: ...
9
23
 
24
+
25
+ class PathsManager(BaseModel, ABC):
10
26
  @classmethod
11
27
  @abstractmethod
12
- def auto(cls, root_dir: Path): ...
28
+ def create(cls, *args, **kwargs) -> Self:
29
+ """
30
+ Create directories first if they do not already exist.
31
+ """
32
+ ...
13
33
 
14
34
  @classmethod
15
35
  @abstractmethod
16
- def read(cls, config_file_path: Path) -> Self: ...
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
+
17
42
 
43
+ @classmethod
18
44
  @abstractmethod
19
- def write(self, config_file_path: Path) -> None: ...
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,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>
@@ -13,14 +13,14 @@ adiumentum/io_utils.py,sha256=033110e6b9335ad4270cf62c86a0df53c5c43954521a814729
13
13
  adiumentum/markers.py,sha256=988f0b7ef80d61871165f30b601f05c9981cfd353c235eb314de5271e8040900,2959
14
14
  adiumentum/merge.py,sha256=b1894b08e906ead6f423dfb6d637df553eeed4f894c197f771f3569854044c32,3877
15
15
  adiumentum/numerical.py,sha256=adad3335e7220c8bf9666ce8c79f01ca4f1a0933316bb8e6fbfc0440293fbbed,704
16
- adiumentum/paths_manager.py,sha256=7098bf8bd71cbe93eb60eb8c145a3f02d3e3470c2f236e8bb579c08cf0db5579,403
16
+ adiumentum/paths_manager.py,sha256=875679909583a0a89fc3213f30618c8a0b3215eec949501c4057ef19a103857d,1565
17
17
  adiumentum/performance_logging.py,sha256=bd0c42337fb5c77921700e5487d366ea103e8cd25825138962bfb44c1b54773b,1471
18
18
  adiumentum/pydantic_extensions.md,sha256=6f5fe7fc9f10e0f6a87e2861dd16d066892099542dbaca3764944c6a27635706,24936
19
- adiumentum/pydantic_extensions.py,sha256=8e49c80f4be42b71986ec93195172af2d83986598de3f1bffe4c64505dc03729,12599
19
+ adiumentum/pydantic_extensions.py,sha256=1cb110bf9fd8a4834463d070fd3539a6b4e7ac9f467c27ca7cae04d2507e9ca3,12837
20
20
  adiumentum/string_utils.py,sha256=459576481a67d1f078ffcbb0606ba235d0694cb0911905174239312224953f66,5321
21
21
  adiumentum/timestamping.py,sha256=87729ac9dd7dac614fbb7bb1995e321bd860202a4c2f435e044f4af23dd545a0,556
22
22
  adiumentum/typing_utils.py,sha256=81e01e90a60fe397c5211493fb4446af5f59fbd4b364c98f377962f4bd67ff8b,3894
23
- adiumentum-0.3.1.dist-info/WHEEL,sha256=ab6157bc637547491fb4567cd7ddf26b04d63382916ca16c29a5c8e94c9c9ef7,79
24
- adiumentum-0.3.1.dist-info/entry_points.txt,sha256=8d158243687a1102f915d2091f19bdc1443ec58709954317c4edff9edb9e5be8,57
25
- adiumentum-0.3.1.dist-info/METADATA,sha256=ca600da9feaa1c5346895161b9cd661cf894e05b2e8b601b6e082165a32c6afc,1104
26
- adiumentum-0.3.1.dist-info/RECORD,,
23
+ adiumentum-0.3.3.dist-info/WHEEL,sha256=ab6157bc637547491fb4567cd7ddf26b04d63382916ca16c29a5c8e94c9c9ef7,79
24
+ adiumentum-0.3.3.dist-info/entry_points.txt,sha256=8d158243687a1102f915d2091f19bdc1443ec58709954317c4edff9edb9e5be8,57
25
+ adiumentum-0.3.3.dist-info/METADATA,sha256=403790211f3cea6589e2fdc337facfb1553b26f910889b4cea6ce5e7003a43f0,1104
26
+ adiumentum-0.3.3.dist-info/RECORD,,