v440 2.0.0.dev79__tar.gz → 2.0.0.dev81__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.dev79/src/v440.egg-info → v440-2.0.0.dev81}/PKG-INFO +1 -1
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/pyproject.toml +1 -1
- v440-2.0.0.dev81/src/v440/_utils/qualparse/__init__.py +132 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/core/Base.py +0 -28
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/core/Local.py +18 -7
- {v440-2.0.0.dev79 → v440-2.0.0.dev81/src/v440.egg-info}/PKG-INFO +1 -1
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440.egg-info/SOURCES.txt +2 -1
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/LICENSE.txt +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/MANIFEST.in +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/README.rst +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/setup.cfg +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/__init__.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/BaseStringer.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/Cfg.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/Digest.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/ListStringer.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/Pattern.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/SlotStringer.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/__init__.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/cfg.toml +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/guarding.py +0 -0
- {v440-2.0.0.dev79/src/v440/_utils → v440-2.0.0.dev81/src/v440/_utils/qualparse}/segmenting.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/qualparse.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/releaseparse/__init__.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/releaseparse/listing.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/releaseparse/numerals.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/_utils/releaseparse/ranging.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/core/Public.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/core/Qual.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/core/Release.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/core/Version.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/core/VersionError.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/core/__init__.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/tests/__init__.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/tests/test_testdata.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/tests/test_version.py +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440/tests/testdata.toml +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440.egg-info/dependency_links.txt +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440.egg-info/requires.txt +0 -0
- {v440-2.0.0.dev79 → v440-2.0.0.dev81}/src/v440.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
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
|
|
@@ -13,34 +13,6 @@ from v440.core.Release import Release
|
|
|
13
13
|
__all__ = ["Base"]
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
parse_epoch: Digest = Digest("parse_epoch")
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
@parse_epoch.overload()
|
|
20
|
-
def parse_epoch() -> int:
|
|
21
|
-
return 0
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
@parse_epoch.overload(int)
|
|
25
|
-
def parse_epoch(value: int) -> int:
|
|
26
|
-
if value < 0:
|
|
27
|
-
raise ValueError
|
|
28
|
-
return value
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
@parse_epoch.overload(str)
|
|
32
|
-
def parse_epoch(value: str) -> int:
|
|
33
|
-
s: str = value
|
|
34
|
-
if s.endswith("!"):
|
|
35
|
-
s = s[:-1]
|
|
36
|
-
if s == "":
|
|
37
|
-
return 0
|
|
38
|
-
ans: int = int(s)
|
|
39
|
-
if ans < 0:
|
|
40
|
-
raise ValueError
|
|
41
|
-
return ans
|
|
42
|
-
|
|
43
|
-
|
|
44
16
|
class Base(SlotStringer):
|
|
45
17
|
|
|
46
18
|
__slots__ = ("_epoch", "_release")
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import operator
|
|
4
|
+
import string as string_
|
|
3
5
|
from typing import *
|
|
4
6
|
|
|
5
|
-
import setdoc
|
|
6
|
-
|
|
7
|
-
from v440._utils import segmenting
|
|
8
7
|
from v440._utils.ListStringer import ListStringer
|
|
9
8
|
|
|
10
9
|
__all__ = ["Local"]
|
|
@@ -18,16 +17,28 @@ class Local(ListStringer):
|
|
|
18
17
|
|
|
19
18
|
@classmethod
|
|
20
19
|
def _data_parse(cls: type, value: list) -> Iterable:
|
|
21
|
-
|
|
22
|
-
if None in ans:
|
|
23
|
-
raise ValueError
|
|
24
|
-
return ans
|
|
20
|
+
return tuple(map(cls._item_parse, value))
|
|
25
21
|
|
|
26
22
|
def _format(self: Self, format_spec: str) -> str:
|
|
27
23
|
if format_spec:
|
|
28
24
|
raise ValueError
|
|
29
25
|
return ".".join(map(str, self))
|
|
30
26
|
|
|
27
|
+
@classmethod
|
|
28
|
+
def _item_parse(cls: type, value: Any) -> int | str:
|
|
29
|
+
ans: int | str
|
|
30
|
+
if isinstance(value, int):
|
|
31
|
+
ans = operator.index(value)
|
|
32
|
+
if ans < 0:
|
|
33
|
+
raise ValueError
|
|
34
|
+
else:
|
|
35
|
+
ans = str(value).lower()
|
|
36
|
+
if ans.strip(string_.digits + string_.ascii_lowercase):
|
|
37
|
+
raise ValueError
|
|
38
|
+
if not ans.strip(string_.digits):
|
|
39
|
+
ans = int(ans)
|
|
40
|
+
return ans
|
|
41
|
+
|
|
31
42
|
@classmethod
|
|
32
43
|
def _sort(cls: type, value: Any) -> tuple[bool, int | str]:
|
|
33
44
|
return type(value) is int, value
|
|
@@ -19,7 +19,8 @@ src/v440/_utils/__init__.py
|
|
|
19
19
|
src/v440/_utils/cfg.toml
|
|
20
20
|
src/v440/_utils/guarding.py
|
|
21
21
|
src/v440/_utils/qualparse.py
|
|
22
|
-
src/v440/_utils/
|
|
22
|
+
src/v440/_utils/qualparse/__init__.py
|
|
23
|
+
src/v440/_utils/qualparse/segmenting.py
|
|
23
24
|
src/v440/_utils/releaseparse/__init__.py
|
|
24
25
|
src/v440/_utils/releaseparse/listing.py
|
|
25
26
|
src/v440/_utils/releaseparse/numerals.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
|
{v440-2.0.0.dev79/src/v440/_utils → v440-2.0.0.dev81/src/v440/_utils/qualparse}/segmenting.py
RENAMED
|
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
|