v440 2.0.0.dev59__tar.gz → 2.0.0.dev60__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.
- {v440-2.0.0.dev59/src/v440.egg-info → v440-2.0.0.dev60}/PKG-INFO +1 -1
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/pyproject.toml +1 -1
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/BaseList.py +15 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/SlotList.py +1 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/VList.py +1 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/core/Base.py +9 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/core/Local.py +9 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/core/Public.py +6 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/core/Qual.py +22 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/core/Release.py +7 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/core/Version.py +9 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/tests/test_version.py +35 -21
- {v440-2.0.0.dev59 → v440-2.0.0.dev60/src/v440.egg-info}/PKG-INFO +1 -1
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/LICENSE.txt +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/MANIFEST.in +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/README.rst +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/setup.cfg +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/__init__.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/Cfg.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/Digest.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/Pattern.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/__init__.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/cfg.toml +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/qualparse.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/_utils/utils.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/core/VersionError.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/core/__init__.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/tests/__init__.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/tests/test_testdata.py +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440/tests/testdata.toml +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440.egg-info/SOURCES.txt +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440.egg-info/dependency_links.txt +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440.egg-info/requires.txt +0 -0
- {v440-2.0.0.dev59 → v440-2.0.0.dev60}/src/v440.egg-info/top_level.txt +0 -0
|
@@ -7,6 +7,7 @@ import setdoc
|
|
|
7
7
|
import unhash
|
|
8
8
|
from datarepr import datarepr
|
|
9
9
|
|
|
10
|
+
from v440._utils.utils import guard
|
|
10
11
|
from v440.core.VersionError import VersionError
|
|
11
12
|
|
|
12
13
|
|
|
@@ -14,6 +15,8 @@ from v440.core.VersionError import VersionError
|
|
|
14
15
|
class BaseList(collections.abc.Collection):
|
|
15
16
|
__slots__ = ()
|
|
16
17
|
|
|
18
|
+
string: str
|
|
19
|
+
|
|
17
20
|
@abstractmethod
|
|
18
21
|
@setdoc.basic
|
|
19
22
|
def __bool__(self: Self) -> bool: ...
|
|
@@ -122,6 +125,9 @@ class BaseList(collections.abc.Collection):
|
|
|
122
125
|
@abstractmethod
|
|
123
126
|
def _format(self: Self, format_spec: str) -> str: ...
|
|
124
127
|
|
|
128
|
+
@abstractmethod
|
|
129
|
+
def _string_fset(self: Self, value: str) -> None: ...
|
|
130
|
+
|
|
125
131
|
@setdoc.basic
|
|
126
132
|
def copy(self: Self) -> Self:
|
|
127
133
|
return type(self)(self)
|
|
@@ -138,3 +144,12 @@ class BaseList(collections.abc.Collection):
|
|
|
138
144
|
def index(self: Self, *args: Any) -> None:
|
|
139
145
|
"This method returns the index of the first occurence."
|
|
140
146
|
return self.data.index(*args)
|
|
147
|
+
|
|
148
|
+
@property
|
|
149
|
+
def string(self: Self) -> str:
|
|
150
|
+
return self._format("")
|
|
151
|
+
|
|
152
|
+
@string.setter
|
|
153
|
+
@guard
|
|
154
|
+
def string(self: Self, value: Any) -> None:
|
|
155
|
+
self._string_fset(str(value))
|
|
@@ -71,6 +71,7 @@ class Base(SlotList):
|
|
|
71
71
|
__slots__ = ("_epoch", "_release")
|
|
72
72
|
|
|
73
73
|
data: tuple
|
|
74
|
+
string: str
|
|
74
75
|
epoch: int
|
|
75
76
|
release: Release
|
|
76
77
|
|
|
@@ -87,6 +88,14 @@ class Base(SlotList):
|
|
|
87
88
|
ans += format(self.release, format_spec)
|
|
88
89
|
return ans
|
|
89
90
|
|
|
91
|
+
def _string_fset(self: Self, value: str) -> None:
|
|
92
|
+
parsed: Iterable
|
|
93
|
+
if "!" in value:
|
|
94
|
+
parsed = value.split("!")
|
|
95
|
+
else:
|
|
96
|
+
parsed = 0, value
|
|
97
|
+
self.epoch, self.release.string = parsed
|
|
98
|
+
|
|
90
99
|
@property
|
|
91
100
|
@setdoc.basic
|
|
92
101
|
def data(self: Self) -> tuple:
|
|
@@ -50,6 +50,7 @@ class Local(VList):
|
|
|
50
50
|
__slots__ = ()
|
|
51
51
|
|
|
52
52
|
data: tuple[int | str]
|
|
53
|
+
string: str
|
|
53
54
|
|
|
54
55
|
@setdoc.basic
|
|
55
56
|
def __init__(self: Any, data: Any = None) -> None:
|
|
@@ -64,6 +65,14 @@ class Local(VList):
|
|
|
64
65
|
def _sort(cls: type, value: Any) -> tuple[bool, int | str]:
|
|
65
66
|
return type(value) is int, value
|
|
66
67
|
|
|
68
|
+
def _string_fset(self: Self, value: str) -> None:
|
|
69
|
+
v: str = value
|
|
70
|
+
if v.startswith("+"):
|
|
71
|
+
v = v[1:]
|
|
72
|
+
v = v.replace("_", ".")
|
|
73
|
+
v = v.replace("-", ".")
|
|
74
|
+
self.data = v.split(".")
|
|
75
|
+
|
|
67
76
|
@property
|
|
68
77
|
@setdoc.basic
|
|
69
78
|
def data(self: Self) -> tuple[int | str]:
|
|
@@ -43,6 +43,7 @@ class Public(SlotList):
|
|
|
43
43
|
__slots__ = ("_base", "_qual")
|
|
44
44
|
|
|
45
45
|
data: tuple
|
|
46
|
+
string: str
|
|
46
47
|
base: Base
|
|
47
48
|
qual: Qual
|
|
48
49
|
|
|
@@ -55,6 +56,11 @@ class Public(SlotList):
|
|
|
55
56
|
def _format(self: Self, format_spec: str) -> str:
|
|
56
57
|
return format(self.base, format_spec) + format(self.qual)
|
|
57
58
|
|
|
59
|
+
def _string_fset(self: Self, value: str) -> None:
|
|
60
|
+
match: Any = Pattern.PUBLIC.leftbound.search(value)
|
|
61
|
+
self.base.string = value[: match.end()]
|
|
62
|
+
self.qual.string = value[match.end() :]
|
|
63
|
+
|
|
58
64
|
@property
|
|
59
65
|
def base(self: Self) -> Base:
|
|
60
66
|
"This property represents the version base."
|
|
@@ -16,6 +16,7 @@ class Qual(SlotList):
|
|
|
16
16
|
__slots__ = ("_prephase", "_presubphase", "_post", "_dev")
|
|
17
17
|
|
|
18
18
|
data: tuple
|
|
19
|
+
string: str
|
|
19
20
|
pre: tuple
|
|
20
21
|
prephase: Optional[str]
|
|
21
22
|
presubphase: Optional[int]
|
|
@@ -62,6 +63,27 @@ class Qual(SlotList):
|
|
|
62
63
|
ans += ".dev%s" % self.dev
|
|
63
64
|
return ans
|
|
64
65
|
|
|
66
|
+
def _string_fset(self: Self, value: str) -> None:
|
|
67
|
+
v: str = value
|
|
68
|
+
m: Any
|
|
69
|
+
x: Any
|
|
70
|
+
y: Any
|
|
71
|
+
while v:
|
|
72
|
+
m = Pattern.QUALIFIERS.leftbound.search(v)
|
|
73
|
+
v = v[m.end() :]
|
|
74
|
+
if m.group("N"):
|
|
75
|
+
self.post = m.group("N")
|
|
76
|
+
continue
|
|
77
|
+
x = m.group("l")
|
|
78
|
+
y = m.group("n")
|
|
79
|
+
if x == "dev":
|
|
80
|
+
self.dev = y
|
|
81
|
+
continue
|
|
82
|
+
if x in ("post", "r", "rev"):
|
|
83
|
+
self.post = y
|
|
84
|
+
continue
|
|
85
|
+
self.pre = x, y
|
|
86
|
+
|
|
65
87
|
@property
|
|
66
88
|
@setdoc.basic
|
|
67
89
|
def data(self: Self) -> tuple:
|
|
@@ -104,6 +104,7 @@ class Release(VList):
|
|
|
104
104
|
__slots__ = ()
|
|
105
105
|
|
|
106
106
|
data: tuple[int]
|
|
107
|
+
string: str
|
|
107
108
|
major: int
|
|
108
109
|
minor: int
|
|
109
110
|
micro: int
|
|
@@ -240,6 +241,12 @@ class Release(VList):
|
|
|
240
241
|
def _sort(cls: type, value: int) -> int:
|
|
241
242
|
return value
|
|
242
243
|
|
|
244
|
+
def _string_fset(self: Self, value: str) -> None:
|
|
245
|
+
v: str = value
|
|
246
|
+
v = v.replace("_", ".")
|
|
247
|
+
v = v.replace("-", ".")
|
|
248
|
+
self.data = v.split(".")
|
|
249
|
+
|
|
243
250
|
def bump(self: Self, index: SupportsIndex = -1, amount: SupportsIndex = 1) -> None:
|
|
244
251
|
i: int = operator.index(index)
|
|
245
252
|
a: int = operator.index(amount)
|
|
@@ -43,6 +43,7 @@ class Version(SlotList):
|
|
|
43
43
|
__slots__ = ("_public", "_local")
|
|
44
44
|
|
|
45
45
|
data: tuple
|
|
46
|
+
string: str
|
|
46
47
|
local: Local
|
|
47
48
|
public: Public
|
|
48
49
|
|
|
@@ -58,6 +59,14 @@ class Version(SlotList):
|
|
|
58
59
|
ans += "+" + format(self.local)
|
|
59
60
|
return ans
|
|
60
61
|
|
|
62
|
+
def _string_fset(self: Self, value: str) -> None:
|
|
63
|
+
parsed: Iterable
|
|
64
|
+
if "+" in value:
|
|
65
|
+
parsed = value.split("+")
|
|
66
|
+
else:
|
|
67
|
+
parsed = value, ""
|
|
68
|
+
self.public.string, self.local.string = parsed
|
|
69
|
+
|
|
61
70
|
@property
|
|
62
71
|
@setdoc.basic
|
|
63
72
|
def data(self: Self) -> tuple:
|
|
@@ -105,27 +105,41 @@ class TestExample(unittest.TestCase):
|
|
|
105
105
|
v.public.base.release.micro = 4
|
|
106
106
|
self.assertEqual(str(v), "2.64.4") # Further modified version
|
|
107
107
|
|
|
108
|
-
def
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
108
|
+
def test_example_3a(self: Self) -> None:
|
|
109
|
+
v1: Version = Version("1.6.3")
|
|
110
|
+
v2: str = "1.6.4"
|
|
111
|
+
self.assertEqual(str(v1), "1.6.3") # v1
|
|
112
|
+
self.assertEqual(str(v2), "1.6.4") # v2
|
|
113
|
+
self.assertFalse(v1 == v2) # v1 == v2 gives False
|
|
114
|
+
self.assertTrue(v1 != v2) # v1 != v2 gives True
|
|
115
|
+
self.assertFalse(v1 >= v2) # v1 >= v2 gives False
|
|
116
|
+
self.assertTrue(v1 <= v2) # v1 <= v2 gives True
|
|
117
|
+
self.assertFalse(v1 > v2) # v1 > v2 gives False
|
|
118
|
+
self.assertTrue(v1 < v2) # v1 < v2 gives True
|
|
119
|
+
|
|
120
|
+
def test_example_3b(self: Self) -> None:
|
|
121
|
+
v1: str = "1.6.3"
|
|
122
|
+
v2: Version = Version("1.6.4")
|
|
123
|
+
self.assertEqual(str(v1), "1.6.3") # v1
|
|
124
|
+
self.assertEqual(str(v2), "1.6.4") # v2
|
|
125
|
+
self.assertFalse(v1 == v2) # v1 == v2 gives False
|
|
126
|
+
self.assertTrue(v1 != v2) # v1 != v2 gives True
|
|
127
|
+
self.assertFalse(v1 >= v2) # v1 >= v2 gives False
|
|
128
|
+
self.assertTrue(v1 <= v2) # v1 <= v2 gives True
|
|
129
|
+
self.assertFalse(v1 > v2) # v1 > v2 gives False
|
|
130
|
+
self.assertTrue(v1 < v2) # v1 < v2 gives True
|
|
131
|
+
|
|
132
|
+
def test_example_3c(self: Self) -> None:
|
|
133
|
+
v1: Version = Version("1.6.3")
|
|
134
|
+
v2: Version = Version("1.6.4")
|
|
135
|
+
self.assertEqual(str(v1), "1.6.3") # v1
|
|
136
|
+
self.assertEqual(str(v2), "1.6.4") # v2
|
|
137
|
+
self.assertFalse(v1 == v2) # v1 == v2 gives False
|
|
138
|
+
self.assertTrue(v1 != v2) # v1 != v2 gives True
|
|
139
|
+
self.assertFalse(v1 >= v2) # v1 >= v2 gives False
|
|
140
|
+
self.assertTrue(v1 <= v2) # v1 <= v2 gives True
|
|
141
|
+
self.assertFalse(v1 > v2) # v1 > v2 gives False
|
|
142
|
+
self.assertTrue(v1 < v2) # v1 < v2 gives True
|
|
129
143
|
|
|
130
144
|
def test_example_4(self: Self) -> None:
|
|
131
145
|
v: Version = Version("2.5.3.9")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|