v440 2.0.0.dev81__tar.gz → 2.0.0.dev83__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.dev81/src/v440.egg-info → v440-2.0.0.dev83}/PKG-INFO +1 -1
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/pyproject.toml +1 -1
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/ListStringer.py +84 -85
- v440-2.0.0.dev83/src/v440/_utils/qualparse/__init__.py +3 -0
- v440-2.0.0.dev83/src/v440/_utils/qualparse/devs.py +48 -0
- v440-2.0.0.dev83/src/v440/_utils/qualparse/posts.py +52 -0
- v440-2.0.0.dev83/src/v440/_utils/qualparse/pres.py +44 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/qualparse/segmenting.py +1 -1
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Base.py +0 -1
- {v440-2.0.0.dev81 → v440-2.0.0.dev83/src/v440.egg-info}/PKG-INFO +1 -1
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440.egg-info/SOURCES.txt +4 -2
- v440-2.0.0.dev81/src/v440/_utils/qualparse/__init__.py +0 -132
- v440-2.0.0.dev81/src/v440/_utils/qualparse.py +0 -132
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/LICENSE.txt +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/MANIFEST.in +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/README.rst +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/setup.cfg +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/__init__.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/BaseStringer.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/Cfg.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/Pattern.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/SlotStringer.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/__init__.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/cfg.toml +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/guarding.py +0 -0
- {v440-2.0.0.dev81/src/v440/_utils → v440-2.0.0.dev83/src/v440/_utils/qualparse}/Digest.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/releaseparse/__init__.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/releaseparse/listing.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/releaseparse/numerals.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/releaseparse/ranging.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Local.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Public.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Qual.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Release.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Version.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/VersionError.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/__init__.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/tests/__init__.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/tests/test_testdata.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/tests/test_version.py +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/tests/testdata.toml +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440.egg-info/dependency_links.txt +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440.egg-info/requires.txt +0 -0
- {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440.egg-info/top_level.txt +0 -0
|
@@ -26,12 +26,20 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
|
|
|
26
26
|
def __bool__(self: Self) -> bool:
|
|
27
27
|
return bool(self.data)
|
|
28
28
|
|
|
29
|
+
@setdoc.basic
|
|
30
|
+
def __contains__(self: Self, other: Any) -> bool:
|
|
31
|
+
return other in self.data
|
|
32
|
+
|
|
29
33
|
@setdoc.basic
|
|
30
34
|
def __delitem__(self: Self, key: Any) -> None:
|
|
31
35
|
data: list = list(self.data)
|
|
32
36
|
del data[key]
|
|
33
37
|
self.data = data
|
|
34
38
|
|
|
39
|
+
@setdoc.basic
|
|
40
|
+
def __getitem__(self: Self, key: Any) -> Any:
|
|
41
|
+
return self.data[key]
|
|
42
|
+
|
|
35
43
|
@setdoc.basic
|
|
36
44
|
def __iadd__(self: Self, other: Any, /) -> Self:
|
|
37
45
|
self.data = self.data + tuple(other)
|
|
@@ -42,6 +50,35 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
|
|
|
42
50
|
self.data = self.data * other
|
|
43
51
|
return self
|
|
44
52
|
|
|
53
|
+
@Overloadable
|
|
54
|
+
@setdoc.basic
|
|
55
|
+
def __init__(self: Self, *args: Any, **kwargs: Any) -> bool:
|
|
56
|
+
if len(args) == 0 and "string" in kwargs.keys():
|
|
57
|
+
return True
|
|
58
|
+
if len(args) == 1 and len(kwargs) == 0:
|
|
59
|
+
if isinstance(args[0], str):
|
|
60
|
+
return True
|
|
61
|
+
if hasattr(args[0], "__iter__"):
|
|
62
|
+
return False
|
|
63
|
+
return True
|
|
64
|
+
return False
|
|
65
|
+
|
|
66
|
+
@__init__.overload(True)
|
|
67
|
+
@setdoc.basic
|
|
68
|
+
def __init__(self: Self, string: Any) -> None:
|
|
69
|
+
self._init_setup()
|
|
70
|
+
self.string = string
|
|
71
|
+
|
|
72
|
+
@__init__.overload(False)
|
|
73
|
+
@setdoc.basic
|
|
74
|
+
def __init__(self: Self, data: Iterable = ()) -> None:
|
|
75
|
+
self._init_setup()
|
|
76
|
+
self.data = data
|
|
77
|
+
|
|
78
|
+
@setdoc.basic
|
|
79
|
+
def __iter__(self: Self) -> Iterator:
|
|
80
|
+
return iter(self.data)
|
|
81
|
+
|
|
45
82
|
@setdoc.basic
|
|
46
83
|
def __len__(self: Self) -> int:
|
|
47
84
|
return len(self.data)
|
|
@@ -50,13 +87,42 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
|
|
|
50
87
|
def __mul__(self: Self, other: Any) -> Self:
|
|
51
88
|
return type(self)(self.data * other)
|
|
52
89
|
|
|
90
|
+
@setdoc.basic
|
|
91
|
+
def __repr__(self: Self) -> str:
|
|
92
|
+
return datarepr(type(self).__name__, self.data)
|
|
93
|
+
|
|
94
|
+
@setdoc.basic
|
|
95
|
+
def __reversed__(self: Self) -> reversed:
|
|
96
|
+
return reversed(self.data)
|
|
97
|
+
|
|
53
98
|
@setdoc.basic
|
|
54
99
|
def __rmul__(self: Self, other: Any) -> Self:
|
|
55
100
|
return self * other
|
|
56
101
|
|
|
102
|
+
@setdoc.basic
|
|
103
|
+
def __setitem__(self: Self, key: Any, value: Any) -> None:
|
|
104
|
+
data: list = list(self.data)
|
|
105
|
+
data[key] = value
|
|
106
|
+
self.data = data
|
|
107
|
+
|
|
57
108
|
def _cmp(self: Self) -> tuple:
|
|
58
109
|
return tuple(map(self._sort, self.data))
|
|
59
110
|
|
|
111
|
+
@classmethod
|
|
112
|
+
@abstractmethod
|
|
113
|
+
def _data_parse(cls: type, value: list) -> Iterable: ...
|
|
114
|
+
|
|
115
|
+
def _init_setup(self: Self) -> None:
|
|
116
|
+
self._data = ()
|
|
117
|
+
|
|
118
|
+
def _set(self: Self, value: Any) -> None:
|
|
119
|
+
if isinstance(value, str):
|
|
120
|
+
self.string = value
|
|
121
|
+
elif hasattr(value, "__iter__"):
|
|
122
|
+
self.data = value
|
|
123
|
+
else:
|
|
124
|
+
self.string = value
|
|
125
|
+
|
|
60
126
|
@classmethod
|
|
61
127
|
@abstractmethod
|
|
62
128
|
def _sort(cls: type, value: Any): ...
|
|
@@ -74,12 +140,30 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
|
|
|
74
140
|
"This method clears the data."
|
|
75
141
|
self.data = ()
|
|
76
142
|
|
|
143
|
+
def count(self: Self, value: Any) -> int:
|
|
144
|
+
"This method counts the occurences of value."
|
|
145
|
+
return self.data.count(value)
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
@setdoc.basic
|
|
149
|
+
def data(self: Self) -> tuple:
|
|
150
|
+
return self._data
|
|
151
|
+
|
|
152
|
+
@data.setter
|
|
153
|
+
@guard
|
|
154
|
+
def data(self: Self, value: Iterable) -> None:
|
|
155
|
+
self._data = tuple(self._data_parse(list(value)))
|
|
156
|
+
|
|
77
157
|
def extend(self: Self, value: Self, /) -> None:
|
|
78
158
|
"This method extends self by value."
|
|
79
159
|
data: list = list(self.data)
|
|
80
160
|
data.extend(value)
|
|
81
161
|
self.data = data
|
|
82
162
|
|
|
163
|
+
def index(self: Self, *args: Any) -> None:
|
|
164
|
+
"This method returns the index of the first occurence."
|
|
165
|
+
return self.data.index(*args)
|
|
166
|
+
|
|
83
167
|
def insert(
|
|
84
168
|
self: Self,
|
|
85
169
|
index: SupportsIndex,
|
|
@@ -117,88 +201,3 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
|
|
|
117
201
|
r: bool = bool(reverse)
|
|
118
202
|
data.sort(key=k, reverse=r)
|
|
119
203
|
self.data = data
|
|
120
|
-
|
|
121
|
-
# data-associated
|
|
122
|
-
@setdoc.basic
|
|
123
|
-
def __contains__(self: Self, other: Any) -> bool:
|
|
124
|
-
return other in self.data
|
|
125
|
-
|
|
126
|
-
@setdoc.basic
|
|
127
|
-
def __getitem__(self: Self, key: Any) -> Any:
|
|
128
|
-
return self.data[key]
|
|
129
|
-
|
|
130
|
-
@Overloadable
|
|
131
|
-
@setdoc.basic
|
|
132
|
-
def __init__(self: Self, *args: Any, **kwargs: Any) -> bool:
|
|
133
|
-
if len(args) == 0 and "string" in kwargs.keys():
|
|
134
|
-
return True
|
|
135
|
-
if len(args) == 1 and len(kwargs) == 0:
|
|
136
|
-
if isinstance(args[0], str):
|
|
137
|
-
return True
|
|
138
|
-
if hasattr(args[0], "__iter__"):
|
|
139
|
-
return False
|
|
140
|
-
return True
|
|
141
|
-
return False
|
|
142
|
-
|
|
143
|
-
@__init__.overload(True)
|
|
144
|
-
@setdoc.basic
|
|
145
|
-
def __init__(self: Self, string: Any) -> None:
|
|
146
|
-
self._init_setup()
|
|
147
|
-
self.string = string
|
|
148
|
-
|
|
149
|
-
@__init__.overload(False)
|
|
150
|
-
@setdoc.basic
|
|
151
|
-
def __init__(self: Self, data: Iterable = ()) -> None:
|
|
152
|
-
self._init_setup()
|
|
153
|
-
self.data = data
|
|
154
|
-
|
|
155
|
-
@setdoc.basic
|
|
156
|
-
def __iter__(self: Self) -> Iterator:
|
|
157
|
-
return iter(self.data)
|
|
158
|
-
|
|
159
|
-
@setdoc.basic
|
|
160
|
-
def __repr__(self: Self) -> str:
|
|
161
|
-
return datarepr(type(self).__name__, *self.data)
|
|
162
|
-
|
|
163
|
-
@setdoc.basic
|
|
164
|
-
def __reversed__(self: Self) -> reversed:
|
|
165
|
-
return reversed(self.data)
|
|
166
|
-
|
|
167
|
-
@setdoc.basic
|
|
168
|
-
def __setitem__(self: Self, key: Any, value: Any) -> None:
|
|
169
|
-
data: list = list(self.data)
|
|
170
|
-
data[key] = value
|
|
171
|
-
self.data = data
|
|
172
|
-
|
|
173
|
-
@classmethod
|
|
174
|
-
@abstractmethod
|
|
175
|
-
def _data_parse(cls: type, value: list) -> Iterable: ...
|
|
176
|
-
|
|
177
|
-
def _init_setup(self: Self) -> None:
|
|
178
|
-
self._data = ()
|
|
179
|
-
|
|
180
|
-
def _set(self: Self, value: Any) -> None:
|
|
181
|
-
if isinstance(value, str):
|
|
182
|
-
self.string = value
|
|
183
|
-
elif hasattr(value, "__iter__"):
|
|
184
|
-
self.data = value
|
|
185
|
-
else:
|
|
186
|
-
self.string = value
|
|
187
|
-
|
|
188
|
-
@property
|
|
189
|
-
@setdoc.basic
|
|
190
|
-
def data(self: Self) -> tuple:
|
|
191
|
-
return self._data
|
|
192
|
-
|
|
193
|
-
@data.setter
|
|
194
|
-
@guard
|
|
195
|
-
def data(self: Self, value: Iterable) -> None:
|
|
196
|
-
self._data = tuple(self._data_parse(list(value)))
|
|
197
|
-
|
|
198
|
-
def count(self: Self, value: Any) -> int:
|
|
199
|
-
"This method counts the occurences of value."
|
|
200
|
-
return self.data.count(value)
|
|
201
|
-
|
|
202
|
-
def index(self: Self, *args: Any) -> None:
|
|
203
|
-
"This method returns the index of the first occurence."
|
|
204
|
-
return self.data.index(*args)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import *
|
|
4
|
+
|
|
5
|
+
from v440._utils.Pattern import Pattern
|
|
6
|
+
from v440._utils.qualparse import segmenting
|
|
7
|
+
from v440._utils.qualparse.Digest import Digest
|
|
8
|
+
|
|
9
|
+
parse_dev: Digest = Digest("parse_dev")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@parse_dev.overload()
|
|
13
|
+
def parse_dev() -> None:
|
|
14
|
+
return
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@parse_dev.overload(int)
|
|
18
|
+
def parse_dev(value: int) -> int:
|
|
19
|
+
if value < 0:
|
|
20
|
+
raise ValueError
|
|
21
|
+
return value
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@parse_dev.overload(list)
|
|
25
|
+
def parse_dev(value: list) -> Optional[int]:
|
|
26
|
+
x: Any
|
|
27
|
+
y: Any
|
|
28
|
+
x, y = map(segmenting.segment, value)
|
|
29
|
+
if x != "dev":
|
|
30
|
+
raise ValueError
|
|
31
|
+
if isinstance(y, str):
|
|
32
|
+
raise TypeError
|
|
33
|
+
return y
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@parse_dev.overload(str)
|
|
37
|
+
def parse_dev(value: str) -> Optional[int]:
|
|
38
|
+
v: str = value
|
|
39
|
+
v = v.replace("_", ".")
|
|
40
|
+
v = v.replace("-", ".")
|
|
41
|
+
m: Any = Pattern.PARSER.bound.search(v)
|
|
42
|
+
x: Any
|
|
43
|
+
y: Any
|
|
44
|
+
x, y = m.groups()
|
|
45
|
+
if x not in (None, "dev"):
|
|
46
|
+
raise ValueError
|
|
47
|
+
if y is not None:
|
|
48
|
+
return int(y)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import *
|
|
4
|
+
|
|
5
|
+
from v440._utils.Pattern import Pattern
|
|
6
|
+
from v440._utils.qualparse import segmenting
|
|
7
|
+
from v440._utils.qualparse.Digest import Digest
|
|
8
|
+
|
|
9
|
+
parse_post: Digest = Digest("parse_post")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@parse_post.overload()
|
|
13
|
+
def parse_post() -> None:
|
|
14
|
+
return
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@parse_post.overload(int)
|
|
18
|
+
def parse_post(value: int) -> int:
|
|
19
|
+
if value < 0:
|
|
20
|
+
raise ValueError
|
|
21
|
+
return value
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@parse_post.overload(list)
|
|
25
|
+
def parse_post(value: list) -> Optional[int]:
|
|
26
|
+
v: list = list(map(segmenting.segment, value))
|
|
27
|
+
if len(v) == 0:
|
|
28
|
+
raise ValueError
|
|
29
|
+
if len(v) > 2:
|
|
30
|
+
raise ValueError
|
|
31
|
+
if len(v) == 1:
|
|
32
|
+
v.insert(0, "")
|
|
33
|
+
if v[0] not in ("post", "rev", "r", ""):
|
|
34
|
+
raise ValueError
|
|
35
|
+
if isinstance(v[1], str):
|
|
36
|
+
raise TypeError
|
|
37
|
+
return v[1]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@parse_post.overload(str)
|
|
41
|
+
def parse_post(value: str) -> Optional[int]:
|
|
42
|
+
v: str = value
|
|
43
|
+
v = v.replace("_", ".")
|
|
44
|
+
v = v.replace("-", ".")
|
|
45
|
+
m: Any = Pattern.PARSER.bound.search(v)
|
|
46
|
+
x: Any
|
|
47
|
+
y: Any
|
|
48
|
+
x, y = m.groups()
|
|
49
|
+
if x not in (None, "post", "rev", "r"):
|
|
50
|
+
raise ValueError
|
|
51
|
+
if y is not None:
|
|
52
|
+
return int(y)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import *
|
|
4
|
+
|
|
5
|
+
from v440._utils.Cfg import Cfg
|
|
6
|
+
from v440._utils.Pattern import Pattern
|
|
7
|
+
from v440._utils.qualparse import segmenting
|
|
8
|
+
from v440._utils.qualparse.Digest import Digest
|
|
9
|
+
|
|
10
|
+
parse_pre: Digest = Digest("parse_pre")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@parse_pre.overload()
|
|
14
|
+
def parse_pre() -> tuple:
|
|
15
|
+
return None, None
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@parse_pre.overload(list)
|
|
19
|
+
def parse_pre(value: list) -> tuple:
|
|
20
|
+
x: Any
|
|
21
|
+
y: Any
|
|
22
|
+
x, y = map(segmenting.segment, value)
|
|
23
|
+
if (x, y) == (None, None):
|
|
24
|
+
return None, None
|
|
25
|
+
x = Cfg.cfg.data["phases"][x]
|
|
26
|
+
if not isinstance(y, int):
|
|
27
|
+
raise TypeError
|
|
28
|
+
return x, y
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@parse_pre.overload(str)
|
|
32
|
+
def parse_pre(value: str) -> tuple:
|
|
33
|
+
if value == "":
|
|
34
|
+
return [None, None]
|
|
35
|
+
v: str = value
|
|
36
|
+
v = v.replace("_", ".")
|
|
37
|
+
v = v.replace("-", ".")
|
|
38
|
+
m: Any = Pattern.PARSER.bound.search(v)
|
|
39
|
+
l: Any
|
|
40
|
+
n: Any
|
|
41
|
+
l, n = m.groups()
|
|
42
|
+
l = Cfg.cfg.data["phases"][l]
|
|
43
|
+
n = 0 if (n is None) else int(n)
|
|
44
|
+
return l, n
|
|
@@ -11,15 +11,17 @@ src/v440.egg-info/requires.txt
|
|
|
11
11
|
src/v440.egg-info/top_level.txt
|
|
12
12
|
src/v440/_utils/BaseStringer.py
|
|
13
13
|
src/v440/_utils/Cfg.py
|
|
14
|
-
src/v440/_utils/Digest.py
|
|
15
14
|
src/v440/_utils/ListStringer.py
|
|
16
15
|
src/v440/_utils/Pattern.py
|
|
17
16
|
src/v440/_utils/SlotStringer.py
|
|
18
17
|
src/v440/_utils/__init__.py
|
|
19
18
|
src/v440/_utils/cfg.toml
|
|
20
19
|
src/v440/_utils/guarding.py
|
|
21
|
-
src/v440/_utils/qualparse.py
|
|
20
|
+
src/v440/_utils/qualparse/Digest.py
|
|
22
21
|
src/v440/_utils/qualparse/__init__.py
|
|
22
|
+
src/v440/_utils/qualparse/devs.py
|
|
23
|
+
src/v440/_utils/qualparse/posts.py
|
|
24
|
+
src/v440/_utils/qualparse/pres.py
|
|
23
25
|
src/v440/_utils/qualparse/segmenting.py
|
|
24
26
|
src/v440/_utils/releaseparse/__init__.py
|
|
25
27
|
src/v440/_utils/releaseparse/listing.py
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import *
|
|
4
|
-
|
|
5
|
-
from v440._utils.Cfg import Cfg
|
|
6
|
-
from v440._utils.Digest import Digest
|
|
7
|
-
from v440._utils.Pattern import Pattern
|
|
8
|
-
from v440._utils.qualparse import segmenting
|
|
9
|
-
|
|
10
|
-
parse_dev: Digest = Digest("parse_dev")
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@parse_dev.overload()
|
|
14
|
-
def parse_dev() -> None:
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@parse_dev.overload(int)
|
|
19
|
-
def parse_dev(value: int) -> int:
|
|
20
|
-
if value < 0:
|
|
21
|
-
raise ValueError
|
|
22
|
-
return value
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@parse_dev.overload(list)
|
|
26
|
-
def parse_dev(value: list) -> Optional[int]:
|
|
27
|
-
x: Any
|
|
28
|
-
y: Any
|
|
29
|
-
x, y = map(segmenting.segment, value)
|
|
30
|
-
if x != "dev":
|
|
31
|
-
raise ValueError
|
|
32
|
-
if isinstance(y, str):
|
|
33
|
-
raise TypeError
|
|
34
|
-
return y
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
@parse_dev.overload(str)
|
|
38
|
-
def parse_dev(value: str) -> Optional[int]:
|
|
39
|
-
v: str = value
|
|
40
|
-
v = v.replace("_", ".")
|
|
41
|
-
v = v.replace("-", ".")
|
|
42
|
-
m: Any = Pattern.PARSER.bound.search(v)
|
|
43
|
-
x: Any
|
|
44
|
-
y: Any
|
|
45
|
-
x, y = m.groups()
|
|
46
|
-
if x not in (None, "dev"):
|
|
47
|
-
raise ValueError
|
|
48
|
-
if y is not None:
|
|
49
|
-
return int(y)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
parse_post: Digest = Digest("parse_post")
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
@parse_post.overload()
|
|
56
|
-
def parse_post() -> None:
|
|
57
|
-
return
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
@parse_post.overload(int)
|
|
61
|
-
def parse_post(value: int) -> int:
|
|
62
|
-
if value < 0:
|
|
63
|
-
raise ValueError
|
|
64
|
-
return value
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
@parse_post.overload(list)
|
|
68
|
-
def parse_post(value: list) -> Optional[int]:
|
|
69
|
-
v: list = list(map(segmenting.segment, value))
|
|
70
|
-
if len(v) == 0:
|
|
71
|
-
raise ValueError
|
|
72
|
-
if len(v) > 2:
|
|
73
|
-
raise ValueError
|
|
74
|
-
if len(v) == 1:
|
|
75
|
-
v.insert(0, "")
|
|
76
|
-
if v[0] not in ("post", "rev", "r", ""):
|
|
77
|
-
raise ValueError
|
|
78
|
-
if isinstance(v[1], str):
|
|
79
|
-
raise TypeError
|
|
80
|
-
return v[1]
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
@parse_post.overload(str)
|
|
84
|
-
def parse_post(value: str) -> Optional[int]:
|
|
85
|
-
v: str = value
|
|
86
|
-
v = v.replace("_", ".")
|
|
87
|
-
v = v.replace("-", ".")
|
|
88
|
-
m: Any = Pattern.PARSER.bound.search(v)
|
|
89
|
-
x: Any
|
|
90
|
-
y: Any
|
|
91
|
-
x, y = m.groups()
|
|
92
|
-
if x not in (None, "post", "rev", "r"):
|
|
93
|
-
raise ValueError
|
|
94
|
-
if y is not None:
|
|
95
|
-
return int(y)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
parse_pre: Digest = Digest("parse_pre")
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
@parse_pre.overload()
|
|
102
|
-
def parse_pre() -> tuple:
|
|
103
|
-
return None, None
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
@parse_pre.overload(list)
|
|
107
|
-
def parse_pre(value: list) -> tuple:
|
|
108
|
-
x: Any
|
|
109
|
-
y: Any
|
|
110
|
-
x, y = map(segmenting.segment, value)
|
|
111
|
-
if (x, y) == (None, None):
|
|
112
|
-
return None, None
|
|
113
|
-
x = Cfg.cfg.data["phases"][x]
|
|
114
|
-
if not isinstance(y, int):
|
|
115
|
-
raise TypeError
|
|
116
|
-
return x, y
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
@parse_pre.overload(str)
|
|
120
|
-
def parse_pre(value: str) -> tuple:
|
|
121
|
-
if value == "":
|
|
122
|
-
return [None, None]
|
|
123
|
-
v: str = value
|
|
124
|
-
v = v.replace("_", ".")
|
|
125
|
-
v = v.replace("-", ".")
|
|
126
|
-
m: Any = Pattern.PARSER.bound.search(v)
|
|
127
|
-
l: Any
|
|
128
|
-
n: Any
|
|
129
|
-
l, n = m.groups()
|
|
130
|
-
l = Cfg.cfg.data["phases"][l]
|
|
131
|
-
n = 0 if (n is None) else int(n)
|
|
132
|
-
return l, n
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import *
|
|
4
|
-
|
|
5
|
-
from v440._utils import segmenting
|
|
6
|
-
from v440._utils.Cfg import Cfg
|
|
7
|
-
from v440._utils.Digest import Digest
|
|
8
|
-
from v440._utils.Pattern import Pattern
|
|
9
|
-
|
|
10
|
-
parse_dev: Digest = Digest("parse_dev")
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@parse_dev.overload()
|
|
14
|
-
def parse_dev() -> None:
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@parse_dev.overload(int)
|
|
19
|
-
def parse_dev(value: int) -> int:
|
|
20
|
-
if value < 0:
|
|
21
|
-
raise ValueError
|
|
22
|
-
return value
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@parse_dev.overload(list)
|
|
26
|
-
def parse_dev(value: list) -> Optional[int]:
|
|
27
|
-
x: Any
|
|
28
|
-
y: Any
|
|
29
|
-
x, y = map(segmenting.segment, value)
|
|
30
|
-
if x != "dev":
|
|
31
|
-
raise ValueError
|
|
32
|
-
if isinstance(y, str):
|
|
33
|
-
raise TypeError
|
|
34
|
-
return y
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
@parse_dev.overload(str)
|
|
38
|
-
def parse_dev(value: str) -> Optional[int]:
|
|
39
|
-
v: str = value
|
|
40
|
-
v = v.replace("_", ".")
|
|
41
|
-
v = v.replace("-", ".")
|
|
42
|
-
m: Any = Pattern.PARSER.bound.search(v)
|
|
43
|
-
x: Any
|
|
44
|
-
y: Any
|
|
45
|
-
x, y = m.groups()
|
|
46
|
-
if x not in (None, "dev"):
|
|
47
|
-
raise ValueError
|
|
48
|
-
if y is not None:
|
|
49
|
-
return int(y)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
parse_post: Digest = Digest("parse_post")
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
@parse_post.overload()
|
|
56
|
-
def parse_post() -> None:
|
|
57
|
-
return
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
@parse_post.overload(int)
|
|
61
|
-
def parse_post(value: int) -> int:
|
|
62
|
-
if value < 0:
|
|
63
|
-
raise ValueError
|
|
64
|
-
return value
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
@parse_post.overload(list)
|
|
68
|
-
def parse_post(value: list) -> Optional[int]:
|
|
69
|
-
v: list = list(map(segmenting.segment, value))
|
|
70
|
-
if len(v) == 0:
|
|
71
|
-
raise ValueError
|
|
72
|
-
if len(v) > 2:
|
|
73
|
-
raise ValueError
|
|
74
|
-
if len(v) == 1:
|
|
75
|
-
v.insert(0, "")
|
|
76
|
-
if v[0] not in ("post", "rev", "r", ""):
|
|
77
|
-
raise ValueError
|
|
78
|
-
if isinstance(v[1], str):
|
|
79
|
-
raise TypeError
|
|
80
|
-
return v[1]
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
@parse_post.overload(str)
|
|
84
|
-
def parse_post(value: str) -> Optional[int]:
|
|
85
|
-
v: str = value
|
|
86
|
-
v = v.replace("_", ".")
|
|
87
|
-
v = v.replace("-", ".")
|
|
88
|
-
m: Any = Pattern.PARSER.bound.search(v)
|
|
89
|
-
x: Any
|
|
90
|
-
y: Any
|
|
91
|
-
x, y = m.groups()
|
|
92
|
-
if x not in (None, "post", "rev", "r"):
|
|
93
|
-
raise ValueError
|
|
94
|
-
if y is not None:
|
|
95
|
-
return int(y)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
parse_pre: Digest = Digest("parse_pre")
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
@parse_pre.overload()
|
|
102
|
-
def parse_pre() -> tuple:
|
|
103
|
-
return None, None
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
@parse_pre.overload(list)
|
|
107
|
-
def parse_pre(value: list) -> tuple:
|
|
108
|
-
x: Any
|
|
109
|
-
y: Any
|
|
110
|
-
x, y = map(segmenting.segment, value)
|
|
111
|
-
if (x, y) == (None, None):
|
|
112
|
-
return None, None
|
|
113
|
-
x = Cfg.cfg.data["phases"][x]
|
|
114
|
-
if not isinstance(y, int):
|
|
115
|
-
raise TypeError
|
|
116
|
-
return x, y
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
@parse_pre.overload(str)
|
|
120
|
-
def parse_pre(value: str) -> tuple:
|
|
121
|
-
if value == "":
|
|
122
|
-
return [None, None]
|
|
123
|
-
v: str = value
|
|
124
|
-
v = v.replace("_", ".")
|
|
125
|
-
v = v.replace("-", ".")
|
|
126
|
-
m: Any = Pattern.PARSER.bound.search(v)
|
|
127
|
-
l: Any
|
|
128
|
-
n: Any
|
|
129
|
-
l, n = m.groups()
|
|
130
|
-
l = Cfg.cfg.data["phases"][l]
|
|
131
|
-
n = 0 if (n is None) else int(n)
|
|
132
|
-
return l, n
|
|
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
|