v440 2.0.0.dev74__tar.gz → 2.0.0.dev76__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.dev74/src/v440.egg-info → v440-2.0.0.dev76}/PKG-INFO +1 -1
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/pyproject.toml +1 -1
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/releaseparse/__init__.py +1 -0
- v440-2.0.0.dev76/src/v440/_utils/releaseparse/listing.py +63 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/core/Release.py +3 -57
- {v440-2.0.0.dev74 → v440-2.0.0.dev76/src/v440.egg-info}/PKG-INFO +1 -1
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440.egg-info/SOURCES.txt +1 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/LICENSE.txt +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/MANIFEST.in +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/README.rst +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/setup.cfg +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/__init__.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/BaseStringer.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/Cfg.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/Digest.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/ListStringer.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/Pattern.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/SlotStringer.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/__init__.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/cfg.toml +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/guarding.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/qualparse.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/releaseparse/numerals.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/releaseparse/ranging.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/_utils/segmenting.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/core/Base.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/core/Local.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/core/Public.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/core/Qual.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/core/Version.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/core/VersionError.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/core/__init__.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/tests/__init__.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/tests/test_testdata.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/tests/test_version.py +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440/tests/testdata.toml +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440.egg-info/dependency_links.txt +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440.egg-info/requires.txt +0 -0
- {v440-2.0.0.dev74 → v440-2.0.0.dev76}/src/v440.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import string
|
|
4
|
+
from typing import *
|
|
5
|
+
|
|
6
|
+
from overloadable import Overloadable
|
|
7
|
+
|
|
8
|
+
from v440._utils.releaseparse.numerals import numeral
|
|
9
|
+
|
|
10
|
+
__all__ = ["tolist"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@Overloadable
|
|
14
|
+
def tolist(value: Any, *, slicing: Any) -> list:
|
|
15
|
+
if value is None:
|
|
16
|
+
return
|
|
17
|
+
if isinstance(value, int):
|
|
18
|
+
return int
|
|
19
|
+
if hasattr(value, "__iter__") and not isinstance(value, str):
|
|
20
|
+
return list
|
|
21
|
+
return str
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@tolist.overload()
|
|
25
|
+
def tolist(value: None, *, slicing: Any) -> list:
|
|
26
|
+
return list()
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@tolist.overload(int)
|
|
30
|
+
def tolist(value: int, *, slicing: Any) -> list:
|
|
31
|
+
v: int = int(value)
|
|
32
|
+
if value < 0:
|
|
33
|
+
raise ValueError
|
|
34
|
+
return [v]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@tolist.overload(list)
|
|
38
|
+
def tolist(value: int, *, slicing: Any) -> list:
|
|
39
|
+
return list(map(numeral, value))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@tolist.overload(str)
|
|
43
|
+
def tolist(value: Any, *, slicing: Any) -> list:
|
|
44
|
+
s: Any
|
|
45
|
+
if isinstance(value, str):
|
|
46
|
+
s = slicing
|
|
47
|
+
else:
|
|
48
|
+
s = "never"
|
|
49
|
+
v: str = str(value)
|
|
50
|
+
if v == "":
|
|
51
|
+
return list()
|
|
52
|
+
if "" == v.strip(string.digits) and s in (len(v), "always"):
|
|
53
|
+
return list(map(int, v))
|
|
54
|
+
v = v.lower().strip()
|
|
55
|
+
v = v.replace("_", ".")
|
|
56
|
+
v = v.replace("-", ".")
|
|
57
|
+
if v.startswith("v") or v.startswith("."):
|
|
58
|
+
v = v[1:]
|
|
59
|
+
l: list = v.split(".")
|
|
60
|
+
if "" in l:
|
|
61
|
+
raise ValueError
|
|
62
|
+
l = list(map(numeral, l))
|
|
63
|
+
return l
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import operator
|
|
4
|
-
import string
|
|
5
4
|
from typing import *
|
|
6
5
|
|
|
7
6
|
import setdoc
|
|
@@ -14,59 +13,6 @@ from v440._utils.ListStringer import ListStringer
|
|
|
14
13
|
__all__ = ["Release"]
|
|
15
14
|
|
|
16
15
|
|
|
17
|
-
@Overloadable
|
|
18
|
-
def tolist(value: Any, *, slicing: Any) -> list:
|
|
19
|
-
if value is None:
|
|
20
|
-
return
|
|
21
|
-
if isinstance(value, int):
|
|
22
|
-
return int
|
|
23
|
-
if hasattr(value, "__iter__") and not isinstance(value, str):
|
|
24
|
-
return list
|
|
25
|
-
return str
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
@tolist.overload()
|
|
29
|
-
def tolist(value: None, *, slicing: Any) -> list:
|
|
30
|
-
return list()
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
@tolist.overload(int)
|
|
34
|
-
def tolist(value: int, *, slicing: Any) -> list:
|
|
35
|
-
v: int = int(value)
|
|
36
|
-
if value < 0:
|
|
37
|
-
raise ValueError
|
|
38
|
-
return [v]
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
@tolist.overload(list)
|
|
42
|
-
def tolist(value: int, *, slicing: Any) -> list:
|
|
43
|
-
return list(map(releaseparse.numeral, value))
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
@tolist.overload(str)
|
|
47
|
-
def tolist(value: Any, *, slicing: Any) -> list:
|
|
48
|
-
s: Any
|
|
49
|
-
if isinstance(value, str):
|
|
50
|
-
s = slicing
|
|
51
|
-
else:
|
|
52
|
-
s = "never"
|
|
53
|
-
v: str = str(value)
|
|
54
|
-
if v == "":
|
|
55
|
-
return list()
|
|
56
|
-
if "" == v.strip(string.digits) and s in (len(v), "always"):
|
|
57
|
-
return list(map(int, v))
|
|
58
|
-
v = v.lower().strip()
|
|
59
|
-
v = v.replace("_", ".")
|
|
60
|
-
v = v.replace("-", ".")
|
|
61
|
-
if v.startswith("v") or v.startswith("."):
|
|
62
|
-
v = v[1:]
|
|
63
|
-
l: list = v.split(".")
|
|
64
|
-
if "" in l:
|
|
65
|
-
raise ValueError
|
|
66
|
-
l = list(map(releaseparse.numeral, l))
|
|
67
|
-
return l
|
|
68
|
-
|
|
69
|
-
|
|
70
16
|
@keyalias(major=0, minor=1, micro=2, patch=2)
|
|
71
17
|
class Release(ListStringer):
|
|
72
18
|
__slots__ = ()
|
|
@@ -144,7 +90,7 @@ class Release(ListStringer):
|
|
|
144
90
|
|
|
145
91
|
@classmethod
|
|
146
92
|
def _data_parse(cls: type, value: list) -> Iterable:
|
|
147
|
-
v: list = tolist(value, slicing="always")
|
|
93
|
+
v: list = releaseparse.tolist(value, slicing="always")
|
|
148
94
|
while v and v[-1] == 0:
|
|
149
95
|
v.pop()
|
|
150
96
|
return v
|
|
@@ -187,7 +133,7 @@ class Release(ListStringer):
|
|
|
187
133
|
@_setitem_range.overload(False)
|
|
188
134
|
def _setitem_range(self: Self, key: range, value: Any) -> Any:
|
|
189
135
|
key: list = list(key)
|
|
190
|
-
value: list = tolist(value, slicing=len(key))
|
|
136
|
+
value: list = releaseparse.tolist(value, slicing=len(key))
|
|
191
137
|
if len(key) != len(value):
|
|
192
138
|
e = "attempt to assign sequence of size %s to extended slice of size %s"
|
|
193
139
|
e %= (len(value), len(key))
|
|
@@ -204,7 +150,7 @@ class Release(ListStringer):
|
|
|
204
150
|
data: list = list(self.data)
|
|
205
151
|
ext: int = max(0, key.start - len(data))
|
|
206
152
|
data += ext * [0]
|
|
207
|
-
l: list = tolist(value, slicing="always")
|
|
153
|
+
l: list = releaseparse.tolist(value, slicing="always")
|
|
208
154
|
data = data[: key.start] + l + data[key.stop :]
|
|
209
155
|
self.data = data
|
|
210
156
|
|
|
@@ -21,6 +21,7 @@ src/v440/_utils/guarding.py
|
|
|
21
21
|
src/v440/_utils/qualparse.py
|
|
22
22
|
src/v440/_utils/segmenting.py
|
|
23
23
|
src/v440/_utils/releaseparse/__init__.py
|
|
24
|
+
src/v440/_utils/releaseparse/listing.py
|
|
24
25
|
src/v440/_utils/releaseparse/numerals.py
|
|
25
26
|
src/v440/_utils/releaseparse/ranging.py
|
|
26
27
|
src/v440/core/Base.py
|
|
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
|
|
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
|