v440 1.1.0.dev5__tar.gz → 2.0.0.dev0__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 (34) hide show
  1. {v440-1.1.0.dev5/src/v440.egg-info → v440-2.0.0.dev0}/PKG-INFO +1 -1
  2. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/pyproject.toml +1 -1
  3. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/core/Version.py +42 -81
  4. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/tests/test_testdata.py +0 -2
  5. {v440-1.1.0.dev5 → v440-2.0.0.dev0/src/v440.egg-info}/PKG-INFO +1 -1
  6. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/LICENSE.txt +0 -0
  7. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/MANIFEST.in +0 -0
  8. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/README.rst +0 -0
  9. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/setup.cfg +0 -0
  10. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/__init__.py +0 -0
  11. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/_utils/Base.py +0 -0
  12. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/_utils/Digest.py +0 -0
  13. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/_utils/Pattern.py +0 -0
  14. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/_utils/PhasedQualifierParser.py +0 -0
  15. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/_utils/SimpleQualifierParser.py +0 -0
  16. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/_utils/VList.py +0 -0
  17. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/_utils/WList.py +0 -0
  18. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/_utils/__init__.py +0 -0
  19. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/_utils/utils.py +0 -0
  20. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/core/Base_.py +0 -0
  21. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/core/Local.py +0 -0
  22. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/core/Pre.py +0 -0
  23. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/core/Public_.py +0 -0
  24. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/core/Qualification.py +0 -0
  25. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/core/Release.py +0 -0
  26. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/core/VersionError.py +0 -0
  27. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/core/__init__.py +0 -0
  28. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/tests/__init__.py +0 -0
  29. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/tests/test_version.py +0 -0
  30. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440/tests/testdata.toml +1 -1
  31. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440.egg-info/SOURCES.txt +0 -0
  32. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440.egg-info/dependency_links.txt +0 -0
  33. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440.egg-info/requires.txt +0 -0
  34. {v440-1.1.0.dev5 → v440-2.0.0.dev0}/src/v440.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: v440
3
- Version: 1.1.0.dev5
3
+ Version: 2.0.0.dev0
4
4
  Summary: This project provides mutable version objects in accordance with PEP440.
5
5
  Author-email: Johannes <johannes.programming@gmail.com>
6
6
  License: The MIT License (MIT)
@@ -34,7 +34,7 @@ keywords = []
34
34
  name = "v440"
35
35
  readme = "README.rst"
36
36
  requires-python = ">=3.11"
37
- version = "1.1.0.dev5"
37
+ version = "2.0.0.dev0"
38
38
 
39
39
  [project.license]
40
40
  file = "LICENSE.txt"
@@ -8,6 +8,7 @@ from catchlib import Catcher
8
8
 
9
9
  from v440._utils.Base import Base
10
10
  from v440._utils.Digest import Digest
11
+ from v440._utils.WList import WList
11
12
  from v440.core.Base_ import Base_
12
13
  from v440.core.Local import Local
13
14
  from v440.core.Pre import Pre
@@ -16,23 +17,37 @@ from v440.core.Qualification import Qualification
16
17
  from v440.core.Release import Release
17
18
  from v440.core.VersionError import VersionError
18
19
 
20
+ parse_data: Digest = Digest("parse_data")
19
21
 
20
- @dataclasses.dataclass(order=True)
21
- class _Version:
22
- public_: Public_ = dataclasses.field(default_factory=Public_)
23
- local: Local = dataclasses.field(default_factory=Local)
24
22
 
25
- def copy(self: Self) -> Self:
26
- return dataclasses.replace(self)
23
+ @parse_data.overload()
24
+ def parse_data() -> list:
25
+ return [None, None]
27
26
 
28
- def todict(self: Self) -> dict:
29
- return dataclasses.asdict(self)
30
27
 
28
+ @parse_data.overload(int)
29
+ def parse_data(value: int) -> list:
30
+ return [value, None]
31
31
 
32
- class Version(Base):
32
+
33
+ @parse_data.overload(list)
34
+ def parse_data(value: list) -> list:
35
+ return value
36
+
37
+
38
+ @parse_data.overload(str)
39
+ def parse_data(value: str) -> list:
40
+ if "+" in value:
41
+ return value.split("+")
42
+ else:
43
+ return [value, None]
44
+
45
+
46
+ class Version(WList):
47
+ __slots__ = ("_public_", "_local")
33
48
  base: Self
34
49
  base_: Base_
35
- data: str
50
+ data: list
36
51
  dev: Optional[int]
37
52
  epoch: int
38
53
  local: Local
@@ -43,58 +58,14 @@ class Version(Base):
43
58
  qualification: Qualification
44
59
  release: Release
45
60
 
46
- def __bool__(self: Self) -> bool:
47
- return self._data != _Version()
48
-
49
61
  def __init__(self: Self, data: Any = "0", /, **kwargs: Any) -> None:
50
- object.__setattr__(self, "_data", _Version())
62
+ self._public_ = Public_()
63
+ self._local = Local()
51
64
  self.data = data
52
65
  self.update(**kwargs)
53
66
 
54
- def __le__(self: Self, other: Any) -> bool:
55
- return self._data <= type(self)(other)._data
56
-
57
- def __setattr__(self: Self, name: str, value: Any) -> None:
58
- a: dict = dict()
59
- b: dict = dict()
60
- catcher: Catcher = Catcher()
61
- x: Any
62
- y: Any
63
- for x, y in self._data.todict().items():
64
- with catcher.catch(AttributeError):
65
- a[x] = y.data
66
- if catcher.caught is not None:
67
- b[x] = y
68
- try:
69
- Base.__setattr__(self, name, value)
70
- except VersionError:
71
- for x, y in a.items():
72
- getattr(self._data, x).data = y
73
- for x, y in b.items():
74
- setattr(self._data, x, y)
75
- raise
76
-
77
67
  def __str__(self: Self) -> str:
78
- return self.data
79
-
80
- _data_fset: Digest = Digest("_data_fset")
81
-
82
- @_data_fset.overload()
83
- def _data_fset(self: Self) -> None:
84
- self.public_ = None
85
- self.local = None
86
-
87
- @_data_fset.overload(int)
88
- def _data_fset(self: Self, value: int) -> None:
89
- self.public_ = value
90
- self.local = None
91
-
92
- @_data_fset.overload(str)
93
- def _data_fset(self: Self, value: str) -> None:
94
- if "+" in value:
95
- self.public_, self.local = value.split("+", 1)
96
- else:
97
- self.public_, self.local = value, None
68
+ return self.format()
98
69
 
99
70
  @property
100
71
  def base(self: Self) -> Self:
@@ -102,27 +73,23 @@ class Version(Base):
102
73
 
103
74
  @base.setter
104
75
  def base(self: Self, value: Any) -> None:
105
- self.public_.base_ = value
76
+ self.base_ = value
106
77
 
107
78
  @property
108
79
  def base_(self: Self) -> Base_:
109
- return self._data.public_.base_
80
+ return self.public_.base_
110
81
 
111
82
  @base_.setter
112
83
  def base_(self: Self, value: Any) -> None:
113
84
  self.base_.data = value
114
85
 
115
- def clear(self: Self) -> None:
116
- self.data = None
117
-
118
- def copy(self: Self) -> Self:
119
- return type(self)(self)
120
-
121
86
  @property
122
87
  def data(self: Self) -> str:
123
- return self.format()
88
+ return [self.public_, self.local]
124
89
 
125
- data = data.setter(_data_fset)
90
+ @data.setter
91
+ def data(self: Self, value: Any) -> None:
92
+ self.public_, self.local = parse_data(value)
126
93
 
127
94
  @property
128
95
  def dev(self: Self) -> Optional[int]:
@@ -141,15 +108,7 @@ class Version(Base):
141
108
  self.base_.epoch = value
142
109
 
143
110
  def format(self: Self, cutoff: Any = None) -> str:
144
- ans: str = ""
145
- if self.epoch:
146
- ans += "%s!" % self.epoch
147
- ans += self.release.format(cutoff)
148
- ans += str(self.pre)
149
- if self.post is not None:
150
- ans += ".post%s" % self.post
151
- if self.dev is not None:
152
- ans += ".dev%s" % self.dev
111
+ ans: str = self.public_.format(cutoff)
153
112
  if self.local:
154
113
  ans += "+%s" % self.local
155
114
  return ans
@@ -165,11 +124,11 @@ class Version(Base):
165
124
 
166
125
  @property
167
126
  def local(self: Self) -> Local:
168
- return self._data.local
127
+ return self._local
169
128
 
170
129
  @local.setter
171
130
  def local(self: Self, value: Any) -> None:
172
- self._data.local.data = value
131
+ self.local.data = value
173
132
 
174
133
  def packaging(self: Self) -> packaging.version.Version:
175
134
  return packaging.version.Version(str(self))
@@ -196,11 +155,11 @@ class Version(Base):
196
155
 
197
156
  @public.setter
198
157
  def public(self: Self, value: Any) -> None:
199
- self.public_.data = value
158
+ self.public_ = value
200
159
 
201
160
  @property
202
161
  def public_(self: Self) -> Self:
203
- return self._data.public_
162
+ return self._public_
204
163
 
205
164
  @public_.setter
206
165
  def public_(self: Self, value: Any) -> None:
@@ -208,7 +167,7 @@ class Version(Base):
208
167
 
209
168
  @property
210
169
  def qualification(self: Self) -> Qualification:
211
- return self._data.public_.qualification
170
+ return self.public_.qualification
212
171
 
213
172
  @qualification.setter
214
173
  def qualification(self: Self, value: Any) -> None:
@@ -235,3 +194,5 @@ class Version(Base):
235
194
  m: str = "%r is not a property"
236
195
  m %= x
237
196
  raise AttributeError(m)
197
+
198
+ _data = data
@@ -191,8 +191,6 @@ class TestDataProperty(unittest.TestCase):
191
191
  msg: str = "data_property %r" % key
192
192
  self.v.data = query
193
193
  self.assertEqual(solution, str(self.v), msg=msg)
194
- self.assertEqual(self.v.data, str(self.v), msg=msg)
195
- self.assertEqual(type(self.v.data), str, msg=msg)
196
194
 
197
195
 
198
196
  class TestVersionRelease(unittest.TestCase):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: v440
3
- Version: 1.1.0.dev5
3
+ Version: 2.0.0.dev0
4
4
  Summary: This project provides mutable version objects in accordance with PEP440.
5
5
  Author-email: Johannes <johannes.programming@gmail.com>
6
6
  License: The MIT License (MIT)
File without changes
File without changes
File without changes
File without changes
@@ -721,7 +721,6 @@ Post-releases = [
721
721
  "Invalid cases (testing error handling for extreme cases)" = [
722
722
  "1.0.0alpha_beta",
723
723
  "1!2.0.0+",
724
- "1.0.0++local.version.doubleplus",
725
724
  ]
726
725
  "Cases with inconsistent pre-release and post-release ordering" = [
727
726
  "1.0.0.post1a1",
@@ -741,6 +740,7 @@ Post-releases = [
741
740
  "1.0.0a1..post2",
742
741
  "2!1..0",
743
742
  "1.0.0+build@sha.123",
743
+ "1.0.0++local.version.doubleplus",
744
744
  ]
745
745
 
746
746
  [devint.test_dev_as_int]