v440 2.0.0.dev36__tar.gz → 2.0.0.dev38__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.dev36/src/v440.egg-info → v440-2.0.0.dev38}/PKG-INFO +1 -1
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/pyproject.toml +1 -1
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/SlotList.py +0 -1
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/VList.py +2 -2
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/qualparse.py +7 -9
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/utils.py +2 -6
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/core/Base.py +9 -9
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/core/Local.py +5 -5
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/tests/test_testdata.py +32 -9
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/tests/testdata.toml +15 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38/src/v440.egg-info}/PKG-INFO +1 -1
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/LICENSE.txt +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/MANIFEST.in +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/README.rst +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/setup.cfg +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/__init__.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/BaseList.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/Cfg.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/Digest.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/Pattern.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/__init__.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/_utils/cfg.toml +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/core/Public.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/core/Qual.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/core/Release.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/core/Version.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/core/VersionError.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/core/__init__.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/tests/__init__.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440/tests/test_version.py +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440.egg-info/SOURCES.txt +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440.egg-info/dependency_links.txt +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440.egg-info/requires.txt +0 -0
- {v440-2.0.0.dev36 → v440-2.0.0.dev38}/src/v440.egg-info/top_level.txt +0 -0
|
@@ -24,7 +24,7 @@ class VList(OkayList, BaseList):
|
|
|
24
24
|
ans: bool
|
|
25
25
|
try:
|
|
26
26
|
alt: Self = type(self)(other)
|
|
27
|
-
except:
|
|
27
|
+
except Exception:
|
|
28
28
|
ans = self.data >= other
|
|
29
29
|
else:
|
|
30
30
|
ans = alt <= self
|
|
@@ -45,7 +45,7 @@ class VList(OkayList, BaseList):
|
|
|
45
45
|
ans: bool
|
|
46
46
|
try:
|
|
47
47
|
alt: Self = type(self)(other)
|
|
48
|
-
except:
|
|
48
|
+
except Exception:
|
|
49
49
|
ans = self.data <= other
|
|
50
50
|
else:
|
|
51
51
|
ans = self._data <= alt._data
|
|
@@ -11,18 +11,18 @@ parse_leg: Digest = Digest("parse_leg")
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
@parse_leg.overload()
|
|
14
|
-
def parse_leg() ->
|
|
15
|
-
return
|
|
14
|
+
def parse_leg() -> tuple:
|
|
15
|
+
return None, None, None
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
@parse_leg.overload(int)
|
|
19
|
-
def parse_leg(value: int) ->
|
|
20
|
-
return
|
|
19
|
+
def parse_leg(value: int) -> tuple:
|
|
20
|
+
return None, abs(value), None
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
@parse_leg.overload(list)
|
|
24
|
-
def parse_leg(value: list) ->
|
|
25
|
-
return [value[:2]] + value[2:]
|
|
24
|
+
def parse_leg(value: list) -> tuple:
|
|
25
|
+
return tuple([value[:2]] + value[2:])
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
@parse_leg.overload(str)
|
|
@@ -129,9 +129,7 @@ def parse_dev(value: str) -> Optional[int]:
|
|
|
129
129
|
x, y = m.groups()
|
|
130
130
|
if x not in (None, "dev"):
|
|
131
131
|
raise ValueError
|
|
132
|
-
if y is None:
|
|
133
|
-
return
|
|
134
|
-
else:
|
|
132
|
+
if y is not None:
|
|
135
133
|
return int(y)
|
|
136
134
|
|
|
137
135
|
|
|
@@ -97,7 +97,7 @@ def torange(key: Any, length: Any) -> range:
|
|
|
97
97
|
def ishashable(value: Any) -> bool:
|
|
98
98
|
try:
|
|
99
99
|
hash(value)
|
|
100
|
-
except:
|
|
100
|
+
except Exception:
|
|
101
101
|
return False
|
|
102
102
|
else:
|
|
103
103
|
return True
|
|
@@ -127,13 +127,9 @@ def guard(old: Any) -> Any:
|
|
|
127
127
|
return new
|
|
128
128
|
|
|
129
129
|
|
|
130
|
-
def restore(obj: Any, backup: dict):
|
|
131
|
-
# print("backup", backup)
|
|
130
|
+
def restore(obj: Any, backup: dict) -> None:
|
|
132
131
|
for x in type(obj).__slots__:
|
|
133
|
-
# print("x", x)
|
|
134
132
|
if ishashable(backup[x]):
|
|
135
|
-
# print("ishashable", True)
|
|
136
133
|
setattr(obj, x, backup[x])
|
|
137
134
|
else:
|
|
138
|
-
# print("ishashable", False)
|
|
139
135
|
getattr(obj, x).data = backup[x]
|
|
@@ -14,26 +14,26 @@ parse_data: Digest = Digest("parse_data")
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@parse_data.overload()
|
|
17
|
-
def parse_data() ->
|
|
18
|
-
return
|
|
17
|
+
def parse_data() -> tuple:
|
|
18
|
+
return None, None
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@parse_data.overload(int)
|
|
22
|
-
def parse_data(value: int) ->
|
|
23
|
-
return
|
|
22
|
+
def parse_data(value: int) -> tuple:
|
|
23
|
+
return None, value
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
@parse_data.overload(list)
|
|
27
|
-
def parse_data(value: list) ->
|
|
28
|
-
return value
|
|
27
|
+
def parse_data(value: list) -> tuple:
|
|
28
|
+
return tuple(value)
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
@parse_data.overload(str)
|
|
32
|
-
def parse_data(value: str) ->
|
|
32
|
+
def parse_data(value: str) -> tuple:
|
|
33
33
|
if "!" in value:
|
|
34
|
-
return value.split("!")
|
|
34
|
+
return tuple(value.split("!"))
|
|
35
35
|
else:
|
|
36
|
-
return
|
|
36
|
+
return 0, value
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
parse_epoch: Digest = Digest("parse_epoch")
|
|
@@ -28,20 +28,20 @@ class Local(VList):
|
|
|
28
28
|
except ValueError:
|
|
29
29
|
ans = self.data <= other
|
|
30
30
|
else:
|
|
31
|
-
ans = self.
|
|
31
|
+
ans = self._cmp() <= alt._cmp()
|
|
32
32
|
return ans
|
|
33
33
|
|
|
34
34
|
def __str__(self: Self) -> str:
|
|
35
35
|
"This magic method implements str(self)."
|
|
36
36
|
return ".".join(map(str, self))
|
|
37
37
|
|
|
38
|
-
def
|
|
38
|
+
def _cmp(self: Self) -> list:
|
|
39
39
|
return list(map(self._sortkey, self))
|
|
40
40
|
|
|
41
41
|
_data_calc: Digest = Digest("_data_calc")
|
|
42
42
|
|
|
43
43
|
@_data_calc.overload()
|
|
44
|
-
def _data_calc(self: Self) ->
|
|
44
|
+
def _data_calc(self: Self) -> list:
|
|
45
45
|
return list()
|
|
46
46
|
|
|
47
47
|
@_data_calc.overload(int)
|
|
@@ -56,7 +56,7 @@ class Local(VList):
|
|
|
56
56
|
return ans
|
|
57
57
|
|
|
58
58
|
@_data_calc.overload(str)
|
|
59
|
-
def _data_calc(self: Self, value: str) ->
|
|
59
|
+
def _data_calc(self: Self, value: str) -> list:
|
|
60
60
|
v: str = value
|
|
61
61
|
if v.startswith("+"):
|
|
62
62
|
v = v[1:]
|
|
@@ -69,7 +69,7 @@ class Local(VList):
|
|
|
69
69
|
return ans
|
|
70
70
|
|
|
71
71
|
@staticmethod
|
|
72
|
-
def _sortkey(value: Any) ->
|
|
72
|
+
def _sortkey(value: Any) -> tuple[bool, Any]:
|
|
73
73
|
return type(value) is int, value
|
|
74
74
|
|
|
75
75
|
@property
|
|
@@ -9,6 +9,7 @@ from typing import *
|
|
|
9
9
|
import iterprod
|
|
10
10
|
import packaging.version
|
|
11
11
|
|
|
12
|
+
from v440 import core
|
|
12
13
|
from v440.core.Release import Release
|
|
13
14
|
from v440.core.Version import Version
|
|
14
15
|
from v440.core.VersionError import VersionError
|
|
@@ -353,17 +354,39 @@ class TestPackagingExc(unittest.TestCase):
|
|
|
353
354
|
|
|
354
355
|
class TestExc(unittest.TestCase):
|
|
355
356
|
def test_exc(self: Self) -> None:
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
for
|
|
359
|
-
self.
|
|
357
|
+
x: str
|
|
358
|
+
y: list
|
|
359
|
+
for x, y in Util.util.data["strings"]["exc"].items():
|
|
360
|
+
with self.subTest(test_label=x):
|
|
361
|
+
self.go(queries=y)
|
|
360
362
|
|
|
361
|
-
def go(self: Self,
|
|
363
|
+
def go(self: Self, queries: list) -> None:
|
|
362
364
|
x: str
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
365
|
+
for x in queries:
|
|
366
|
+
with self.assertRaises(VersionError):
|
|
367
|
+
Version(x)
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
class TestSlots(unittest.TestCase):
|
|
371
|
+
def test_slots(self: Self) -> None:
|
|
372
|
+
x: Any
|
|
373
|
+
y: Any
|
|
374
|
+
for x, y in Util.util.data["core-non-attributes"].items():
|
|
375
|
+
with self.subTest(test_label=x):
|
|
376
|
+
self.go(**y)
|
|
377
|
+
|
|
378
|
+
def go(
|
|
379
|
+
self: Self,
|
|
380
|
+
clsname: str,
|
|
381
|
+
attrname: str,
|
|
382
|
+
attrvalue: Any,
|
|
383
|
+
data: Any = None,
|
|
384
|
+
) -> None:
|
|
385
|
+
module: Any = getattr(core, clsname)
|
|
386
|
+
cls: type = getattr(module, clsname)
|
|
387
|
+
obj: Any = cls(data)
|
|
388
|
+
with self.assertRaises(AttributeError):
|
|
389
|
+
setattr(obj, attrname, attrvalue)
|
|
367
390
|
|
|
368
391
|
|
|
369
392
|
if __name__ == "__main__":
|
|
@@ -1024,3 +1024,18 @@ part = 1
|
|
|
1024
1024
|
[epoch.test_epoch_as_none]
|
|
1025
1025
|
full = "1.2.3"
|
|
1026
1026
|
part = 0
|
|
1027
|
+
|
|
1028
|
+
[core-non-attributes.test-0000]
|
|
1029
|
+
clsname = "Base"
|
|
1030
|
+
attrname = "fdsfvdsff"
|
|
1031
|
+
attrvalue = 42
|
|
1032
|
+
|
|
1033
|
+
[core-non-attributes.test-0100]
|
|
1034
|
+
clsname = "Public"
|
|
1035
|
+
attrname = "fdsfvdsff"
|
|
1036
|
+
attrvalue = 42
|
|
1037
|
+
|
|
1038
|
+
[core-non-attributes.test-0200]
|
|
1039
|
+
clsname = "Qual"
|
|
1040
|
+
attrname = "fdsfvdsff"
|
|
1041
|
+
attrvalue = 42
|
|
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
|