adiumentum 0.3.1__tar.gz → 0.3.2__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.2}/PKG-INFO +1 -1
  2. {adiumentum-0.3.1 → adiumentum-0.3.2}/pyproject.toml +1 -1
  3. adiumentum-0.3.2/src/adiumentum/paths_manager.py +67 -0
  4. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/pydantic_extensions.py +7 -6
  5. adiumentum-0.3.1/src/adiumentum/paths_manager.py +0 -19
  6. {adiumentum-0.3.1 → adiumentum-0.3.2}/README.md +0 -0
  7. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/__init__.py +0 -0
  8. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/color.py +0 -0
  9. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/comparison.py +0 -0
  10. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/converters.py +0 -0
  11. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/dependency_sorting.py +0 -0
  12. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/display.py +0 -0
  13. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/elementary_types.py +0 -0
  14. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/exceptions.py +0 -0
  15. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/file_modification_time.py +0 -0
  16. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/frozendict.py +0 -0
  17. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/functional.py +0 -0
  18. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/io_utils.py +0 -0
  19. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/markers.py +0 -0
  20. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/merge.py +0 -0
  21. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/numerical.py +0 -0
  22. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/performance_logging.py +0 -0
  23. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/pydantic_extensions.md +0 -0
  24. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/string_utils.py +0 -0
  25. {adiumentum-0.3.1 → adiumentum-0.3.2}/src/adiumentum/timestamping.py +0 -0
  26. {adiumentum-0.3.1 → adiumentum-0.3.2}/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.2
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.2"
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
+ @abstractmethod
27
+ @classmethod
28
+ def create(cls, *args, **kwargs) -> Self:
29
+ """
30
+ Create directories first if they do not already exist.
31
+ """
32
+ ...
33
+
34
+ @abstractmethod
35
+ @classmethod
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
+ @abstractmethod
44
+ @classmethod
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
@@ -97,13 +97,14 @@ class AbstractCustom(ABC):
97
97
  return set()
98
98
 
99
99
  @classmethod
100
- @abstractmethod
101
- def model_construct(cls, _fields_set: set[str] | None = None, **values: Any) -> Self: ...
100
+ def model_construct(cls, _fields_set: set[str] | None = None, **values: Any) -> Self:
101
+ raise NotImplementedError
102
102
 
103
- @abstractmethod
104
103
  def model_copy(
105
104
  self, *, update: Mapping[str, Any] | None = None, deep: bool = False
106
- ) -> Self: ...
105
+ ) -> Self:
106
+ return self.__class__.model_validate(self.model_dump())
107
+
107
108
 
108
109
  def model_dump(
109
110
  self,
@@ -275,10 +276,10 @@ class AbstractCustom(ABC):
275
276
  return self.get_adapter().__annotations__
276
277
 
277
278
  @classmethod
278
- def read(cls, read_path: Path) -> Self:
279
+ def read_json_file(cls, read_path: Path) -> Self:
279
280
  return cls.model_validate_json(read_path.read_text())
280
281
 
281
- def write(self, write_path: Path) -> None:
282
+ def write_json_file(self, write_path: Path) -> None:
282
283
  write_json(cast(JSONDict, self.model_dump(mode="json")), write_path)
283
284
 
284
285
  @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