v440 2.0.0.dev11__tar.gz → 2.0.0.dev13__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.dev11/src/v440.egg-info → v440-2.0.0.dev13}/PKG-INFO +1 -1
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/pyproject.toml +1 -1
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/_utils/SimpleQualifierParser.py +36 -30
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/_utils/VList.py +8 -2
- v440-2.0.0.dev13/src/v440/_utils/WList.py +15 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/_utils/utils.py +0 -8
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/core/Base.py +4 -6
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/core/Pre.py +5 -7
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/core/Qualification.py +4 -6
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/core/Version.py +8 -10
- {v440-2.0.0.dev11 → v440-2.0.0.dev13/src/v440.egg-info}/PKG-INFO +1 -1
- v440-2.0.0.dev11/src/v440/_utils/WList.py +0 -11
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/LICENSE.txt +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/MANIFEST.in +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/README.rst +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/setup.cfg +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/__init__.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/_utils/Digest.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/_utils/Pattern.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/_utils/__init__.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/core/Local.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/core/Public.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/core/Release.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/core/VersionError.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/core/__init__.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/tests/__init__.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/tests/test_testdata.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/tests/test_version.py +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440/tests/testdata.toml +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440.egg-info/SOURCES.txt +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440.egg-info/dependency_links.txt +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440.egg-info/requires.txt +0 -0
- {v440-2.0.0.dev11 → v440-2.0.0.dev13}/src/v440.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import dataclasses
|
|
4
3
|
from typing import *
|
|
5
4
|
|
|
6
5
|
from v440._utils import utils
|
|
@@ -10,11 +9,8 @@ from v440._utils.Pattern import Pattern
|
|
|
10
9
|
__all__ = ["SimpleQualifierParser"]
|
|
11
10
|
|
|
12
11
|
|
|
13
|
-
@dataclasses.dataclass(frozen=True)
|
|
14
12
|
class SimpleQualifierParser:
|
|
15
|
-
|
|
16
|
-
keysforstr: tuple = ()
|
|
17
|
-
allow_len_1: bool = False
|
|
13
|
+
__slots__ = ("_keysforlist", "_keysforstr", "_allow_len_1")
|
|
18
14
|
|
|
19
15
|
__call__ = Digest("__call__")
|
|
20
16
|
|
|
@@ -31,7 +27,7 @@ class SimpleQualifierParser:
|
|
|
31
27
|
@__call__.overload(list)
|
|
32
28
|
def __call__(self: Self, value: list) -> Any:
|
|
33
29
|
v: list = list(map(utils.segment, value))
|
|
34
|
-
n = self.nbylist(v)
|
|
30
|
+
n: Any = self.nbylist(v)
|
|
35
31
|
if isinstance(n, str):
|
|
36
32
|
raise TypeError
|
|
37
33
|
return n
|
|
@@ -50,41 +46,51 @@ class SimpleQualifierParser:
|
|
|
50
46
|
else:
|
|
51
47
|
return int(n)
|
|
52
48
|
|
|
53
|
-
def
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
49
|
+
def __init__(
|
|
50
|
+
self: Self,
|
|
51
|
+
keysforlist: Iterable = (),
|
|
52
|
+
keysforstr: Iterable = (),
|
|
53
|
+
allow_len_1: Any = False,
|
|
54
|
+
) -> None:
|
|
55
|
+
self._keysforlist = tuple(map(str, keysforlist))
|
|
56
|
+
self._keysforstr = tuple(map(self.optstr, keysforstr))
|
|
57
|
+
self._allow_len_1 = bool(allow_len_1)
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def allow_len_1(self: Self) -> tuple:
|
|
61
|
+
return self._allow_len_1
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def keysforlist(self: Self) -> tuple:
|
|
65
|
+
return self._keysforlist
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def keysforstr(self: Self) -> tuple:
|
|
69
|
+
return self._keysforstr
|
|
67
70
|
|
|
68
71
|
def nbylist(self: Self, value: Any, /) -> Any:
|
|
69
72
|
if len(value) == 2:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
raise ValueError
|
|
73
|
-
return n
|
|
73
|
+
if value[0] in self.keysforlist:
|
|
74
|
+
return value[1]
|
|
74
75
|
if len(value) == 1:
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
raise ValueError
|
|
78
|
-
return n
|
|
76
|
+
if self.allow_len_1:
|
|
77
|
+
return value[0]
|
|
79
78
|
raise ValueError
|
|
80
79
|
|
|
80
|
+
@classmethod
|
|
81
|
+
def optstr(cls: type, value: Any) -> Optional[str]:
|
|
82
|
+
if value is None:
|
|
83
|
+
return
|
|
84
|
+
else:
|
|
85
|
+
return str(value)
|
|
86
|
+
|
|
81
87
|
|
|
82
|
-
POST = SimpleQualifierParser(
|
|
88
|
+
POST: SimpleQualifierParser = SimpleQualifierParser(
|
|
83
89
|
keysforlist=("post", "rev", "r", ""),
|
|
84
90
|
keysforstr=(None, "post", "rev", "r"),
|
|
85
91
|
allow_len_1=True,
|
|
86
92
|
)
|
|
87
|
-
DEV = SimpleQualifierParser(
|
|
93
|
+
DEV: SimpleQualifierParser = SimpleQualifierParser(
|
|
88
94
|
keysforlist=("dev",),
|
|
89
95
|
keysforstr=(None, "dev"),
|
|
90
96
|
)
|
|
@@ -2,10 +2,16 @@ from typing import *
|
|
|
2
2
|
|
|
3
3
|
from datahold import OkayList
|
|
4
4
|
|
|
5
|
-
from v440._utils import utils
|
|
6
5
|
from v440.core.VersionError import VersionError
|
|
7
6
|
|
|
8
7
|
|
|
8
|
+
def clone(value: Any) -> Any:
|
|
9
|
+
if isinstance(value, VList):
|
|
10
|
+
return list(map(clone, value))
|
|
11
|
+
else:
|
|
12
|
+
return value
|
|
13
|
+
|
|
14
|
+
|
|
9
15
|
class VList(OkayList):
|
|
10
16
|
def __eq__(self: Self, other: Any) -> bool:
|
|
11
17
|
"This magic method implements self==other."
|
|
@@ -53,7 +59,7 @@ class VList(OkayList):
|
|
|
53
59
|
def __setattr__(self: Self, name: str, value: Any) -> Any:
|
|
54
60
|
if name not in type(self).__annotations__.keys():
|
|
55
61
|
return object.__setattr__(self, name, value)
|
|
56
|
-
backup: list =
|
|
62
|
+
backup: list = clone(self)
|
|
57
63
|
exc: BaseException
|
|
58
64
|
try:
|
|
59
65
|
object.__setattr__(self, name, value)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from typing import *
|
|
2
|
+
|
|
3
|
+
from v440._utils.VList import VList
|
|
4
|
+
|
|
5
|
+
__all__ = ["WList"]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class WList(VList):
|
|
9
|
+
@property
|
|
10
|
+
def data(self: Self) -> list:
|
|
11
|
+
return list(self._data)
|
|
12
|
+
|
|
13
|
+
@data.setter
|
|
14
|
+
def data(self: Self, value: Any) -> None:
|
|
15
|
+
self._data = value
|
|
@@ -5,17 +5,9 @@ import string
|
|
|
5
5
|
from typing import *
|
|
6
6
|
|
|
7
7
|
from v440._utils.Digest import Digest
|
|
8
|
-
from v440._utils.VList import VList
|
|
9
8
|
from v440.core.VersionError import VersionError
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
def clone(value: Any) -> Any:
|
|
13
|
-
if isinstance(value, VList):
|
|
14
|
-
return list(map(clone, value))
|
|
15
|
-
else:
|
|
16
|
-
return value
|
|
17
|
-
|
|
18
|
-
|
|
19
11
|
def literal(value: Any, /) -> str:
|
|
20
12
|
v: Any = segment(value)
|
|
21
13
|
if type(v) is str:
|
|
@@ -80,11 +80,11 @@ class Base(WList):
|
|
|
80
80
|
return self.format()
|
|
81
81
|
|
|
82
82
|
@property
|
|
83
|
-
def
|
|
84
|
-
return
|
|
83
|
+
def _data(self: Self) -> tuple:
|
|
84
|
+
return self.epoch, self.release
|
|
85
85
|
|
|
86
|
-
@
|
|
87
|
-
def
|
|
86
|
+
@_data.setter
|
|
87
|
+
def _data(self: Self, value: Any) -> None:
|
|
88
88
|
self.epoch, self.release = parse_data(value)
|
|
89
89
|
|
|
90
90
|
@property
|
|
@@ -109,5 +109,3 @@ class Base(WList):
|
|
|
109
109
|
@release.setter
|
|
110
110
|
def release(self: Self, value: Any) -> None:
|
|
111
111
|
self._release.data = value
|
|
112
|
-
|
|
113
|
-
_data = data # why is this necessary?
|
|
@@ -83,14 +83,12 @@ class Pre(WList):
|
|
|
83
83
|
return ans
|
|
84
84
|
|
|
85
85
|
@property
|
|
86
|
-
def
|
|
87
|
-
return
|
|
86
|
+
def _data(self: Self) -> tuple:
|
|
87
|
+
return self._phase, self._subphase
|
|
88
88
|
|
|
89
|
-
@
|
|
90
|
-
def
|
|
89
|
+
@_data.setter
|
|
90
|
+
def _data(self: Self, value: Any) -> None:
|
|
91
91
|
self._phase, self._subphase = parse_data(value)
|
|
92
92
|
|
|
93
93
|
def isempty(self: Self) -> bool:
|
|
94
|
-
return self._data ==
|
|
95
|
-
|
|
96
|
-
_data = data
|
|
94
|
+
return set(self._data) == {None}
|
|
@@ -99,11 +99,11 @@ class Qualification(WList):
|
|
|
99
99
|
return ans
|
|
100
100
|
|
|
101
101
|
@property
|
|
102
|
-
def
|
|
103
|
-
return
|
|
102
|
+
def _data(self: Self) -> tuple:
|
|
103
|
+
return self.pre, self.post, self.dev
|
|
104
104
|
|
|
105
|
-
@
|
|
106
|
-
def
|
|
105
|
+
@_data.setter
|
|
106
|
+
def _data(self: Self, value: Any) -> None:
|
|
107
107
|
self.pre, self.post, self.dev = parse_data(value)
|
|
108
108
|
|
|
109
109
|
@property
|
|
@@ -141,5 +141,3 @@ class Qualification(WList):
|
|
|
141
141
|
@pre.setter
|
|
142
142
|
def pre(self: Self, value: Any) -> None:
|
|
143
143
|
self._pre.data = value
|
|
144
|
-
|
|
145
|
-
_data = data
|
|
@@ -61,6 +61,14 @@ class Version(WList):
|
|
|
61
61
|
def __str__(self: Self) -> str:
|
|
62
62
|
return self.format()
|
|
63
63
|
|
|
64
|
+
@property
|
|
65
|
+
def _data(self: Self) -> tuple:
|
|
66
|
+
return (self.public, self.local)
|
|
67
|
+
|
|
68
|
+
@_data.setter
|
|
69
|
+
def _data(self: Self, value: Any) -> None:
|
|
70
|
+
self.public, self.local = parse_data(value)
|
|
71
|
+
|
|
64
72
|
@property
|
|
65
73
|
def base(self: Self) -> Base:
|
|
66
74
|
return self.public.base
|
|
@@ -69,14 +77,6 @@ class Version(WList):
|
|
|
69
77
|
def base(self: Self, value: Any) -> None:
|
|
70
78
|
self.base.data = value
|
|
71
79
|
|
|
72
|
-
@property
|
|
73
|
-
def data(self: Self) -> str:
|
|
74
|
-
return [self.public, self.local]
|
|
75
|
-
|
|
76
|
-
@data.setter
|
|
77
|
-
def data(self: Self, value: Any) -> None:
|
|
78
|
-
self.public, self.local = parse_data(value)
|
|
79
|
-
|
|
80
80
|
@property
|
|
81
81
|
def dev(self: Self) -> Optional[int]:
|
|
82
82
|
return self.qualification.dev
|
|
@@ -172,5 +172,3 @@ class Version(WList):
|
|
|
172
172
|
m: str = "%r is not a property"
|
|
173
173
|
m %= x
|
|
174
174
|
raise AttributeError(m)
|
|
175
|
-
|
|
176
|
-
_data = data
|
|
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
|