v440 2.0.0.dev16__tar.gz → 2.0.0.dev18__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.dev16/src/v440.egg-info → v440-2.0.0.dev18}/PKG-INFO +1 -1
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/pyproject.toml +1 -1
- v440-2.0.0.dev18/src/v440/_utils/BaseList.py +9 -0
- v440-2.0.0.dev18/src/v440/_utils/SlotList.py +129 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/_utils/VList.py +6 -1
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/core/Base.py +7 -6
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/core/Pre.py +24 -10
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/core/Public.py +11 -10
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/core/Qualification.py +8 -10
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/core/Version.py +7 -6
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/tests/test_testdata.py +15 -8
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/tests/test_version.py +11 -11
- {v440-2.0.0.dev16 → v440-2.0.0.dev18/src/v440.egg-info}/PKG-INFO +1 -1
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440.egg-info/SOURCES.txt +2 -1
- v440-2.0.0.dev16/src/v440/_utils/WList.py +0 -17
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/LICENSE.txt +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/MANIFEST.in +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/README.rst +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/setup.cfg +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/__init__.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/_utils/Digest.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/_utils/Pattern.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/_utils/SimpleQualifierParser.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/_utils/__init__.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/_utils/utils.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/core/Local.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/core/Release.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/core/VersionError.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/core/__init__.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/tests/__init__.py +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440/tests/testdata.toml +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440.egg-info/dependency_links.txt +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440.egg-info/requires.txt +0 -0
- {v440-2.0.0.dev16 → v440-2.0.0.dev18}/src/v440.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import collections
|
|
2
|
+
import operator
|
|
3
|
+
from abc import abstractmethod
|
|
4
|
+
from typing import *
|
|
5
|
+
|
|
6
|
+
import scaevola
|
|
7
|
+
from datarepr import datarepr
|
|
8
|
+
from unhash import unhash
|
|
9
|
+
|
|
10
|
+
from v440._utils.BaseList import BaseList
|
|
11
|
+
from v440._utils.utils import guard
|
|
12
|
+
from v440.core.VersionError import VersionError
|
|
13
|
+
|
|
14
|
+
__all__ = ["SlotList"]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@scaevola.auto
|
|
18
|
+
class SlotList(collections.abc.Collection, BaseList):
|
|
19
|
+
__slots__ = ()
|
|
20
|
+
|
|
21
|
+
data: list
|
|
22
|
+
|
|
23
|
+
def __contains__(self: Self, other: Any) -> bool:
|
|
24
|
+
return other in self.data
|
|
25
|
+
|
|
26
|
+
def __eq__(self: Self, other: Any) -> bool:
|
|
27
|
+
"This magic method implements self==other."
|
|
28
|
+
try:
|
|
29
|
+
alt: Self = type(self)(other)
|
|
30
|
+
except VersionError:
|
|
31
|
+
return False
|
|
32
|
+
else:
|
|
33
|
+
return self.data == alt.data
|
|
34
|
+
|
|
35
|
+
def __format__(self: Self, format_spec: Any = "", /) -> str:
|
|
36
|
+
"This magic method implements format(self, format_spec)."
|
|
37
|
+
return format(str(self), str(format_spec))
|
|
38
|
+
|
|
39
|
+
def __getitem__(self: Self, key: Any) -> Any:
|
|
40
|
+
return self.data[key]
|
|
41
|
+
|
|
42
|
+
def __ge__(self: Self, other: Any, /) -> bool:
|
|
43
|
+
"This magic method implements self<=other."
|
|
44
|
+
alt: Self
|
|
45
|
+
try:
|
|
46
|
+
alt = type(self)(other)
|
|
47
|
+
except VersionError:
|
|
48
|
+
return NotImplemented
|
|
49
|
+
else:
|
|
50
|
+
return self._cmp() >= alt._cmp()
|
|
51
|
+
|
|
52
|
+
def __gt__(self: Self, other: Any, /) -> bool:
|
|
53
|
+
"This magic method implements self<=other."
|
|
54
|
+
alt: Self
|
|
55
|
+
try:
|
|
56
|
+
alt = type(self)(other)
|
|
57
|
+
except VersionError:
|
|
58
|
+
return NotImplemented
|
|
59
|
+
else:
|
|
60
|
+
return self._cmp() > alt._cmp()
|
|
61
|
+
|
|
62
|
+
__hash__ = unhash
|
|
63
|
+
|
|
64
|
+
def __init__(self: Self, data: Any = None) -> None:
|
|
65
|
+
self.data = data
|
|
66
|
+
|
|
67
|
+
def __iter__(self: Self) -> Any:
|
|
68
|
+
return iter(self.data)
|
|
69
|
+
|
|
70
|
+
def __le__(self: Self, other: Any, /) -> bool:
|
|
71
|
+
"This magic method implements self<=other."
|
|
72
|
+
alt: Self
|
|
73
|
+
try:
|
|
74
|
+
alt = type(self)(other)
|
|
75
|
+
except VersionError:
|
|
76
|
+
return NotImplemented
|
|
77
|
+
else:
|
|
78
|
+
return self._cmp() <= alt._cmp()
|
|
79
|
+
|
|
80
|
+
def __len__(self: Self) -> int:
|
|
81
|
+
return len(type(self).__slots__)
|
|
82
|
+
|
|
83
|
+
def __lt__(self: Self, other: Any, /) -> bool:
|
|
84
|
+
"This magic method implements self<=other."
|
|
85
|
+
alt: Self
|
|
86
|
+
try:
|
|
87
|
+
alt = type(self)(other)
|
|
88
|
+
except VersionError:
|
|
89
|
+
return NotImplemented
|
|
90
|
+
else:
|
|
91
|
+
return self._cmp() < alt._cmp()
|
|
92
|
+
|
|
93
|
+
def __ne__(self: Self, other: Any) -> bool:
|
|
94
|
+
return not (self == other)
|
|
95
|
+
|
|
96
|
+
def __repr__(self: Self) -> str:
|
|
97
|
+
return datarepr(type(self).__name__, self.data)
|
|
98
|
+
|
|
99
|
+
def __reversed__(self: Self) -> Iterable:
|
|
100
|
+
return reversed(self.data)
|
|
101
|
+
|
|
102
|
+
def __setitem__(self: Self, key: Any, value: Any) -> None:
|
|
103
|
+
data: list = self.data
|
|
104
|
+
data[key] = value
|
|
105
|
+
self.data = data
|
|
106
|
+
|
|
107
|
+
def __str__(self: Self) -> str:
|
|
108
|
+
return NotImplemented
|
|
109
|
+
|
|
110
|
+
@classmethod
|
|
111
|
+
def __subclasshook__(cls: type, other: type, /) -> bool:
|
|
112
|
+
"This magic classmethod can be overwritten for a custom subclass check."
|
|
113
|
+
return NotImplemented
|
|
114
|
+
|
|
115
|
+
def _cmp(self: Self) -> Any:
|
|
116
|
+
return self.data
|
|
117
|
+
|
|
118
|
+
def copy(self: Self) -> Self:
|
|
119
|
+
return type(self)(self)
|
|
120
|
+
|
|
121
|
+
def count(self: Self, value: Any) -> Any:
|
|
122
|
+
return self.data.count(value)
|
|
123
|
+
|
|
124
|
+
@property
|
|
125
|
+
@abstractmethod
|
|
126
|
+
def data(self: Self) -> list: ...
|
|
127
|
+
|
|
128
|
+
def index(self: Self, value: Any) -> Any:
|
|
129
|
+
return self.data.index(value)
|
|
@@ -2,10 +2,12 @@ from typing import *
|
|
|
2
2
|
|
|
3
3
|
from datahold import OkayList
|
|
4
4
|
|
|
5
|
+
from v440._utils.BaseList import BaseList
|
|
5
6
|
from v440.core.VersionError import VersionError
|
|
6
7
|
|
|
7
8
|
|
|
8
|
-
class VList(OkayList):
|
|
9
|
+
class VList(OkayList, BaseList):
|
|
10
|
+
|
|
9
11
|
def __eq__(self: Self, other: Any) -> bool:
|
|
10
12
|
"This magic method implements self==other."
|
|
11
13
|
ans: bool
|
|
@@ -54,3 +56,6 @@ class VList(OkayList):
|
|
|
54
56
|
ans: Any = self.copy()
|
|
55
57
|
ans.sort(**kwargs)
|
|
56
58
|
return ans
|
|
59
|
+
|
|
60
|
+
def isempty(self: Self) -> bool:
|
|
61
|
+
return len(self) == 0
|
|
@@ -3,8 +3,8 @@ from __future__ import annotations
|
|
|
3
3
|
from typing import *
|
|
4
4
|
|
|
5
5
|
from v440._utils.Digest import Digest
|
|
6
|
+
from v440._utils.SlotList import SlotList
|
|
6
7
|
from v440._utils.utils import guard
|
|
7
|
-
from v440._utils.WList import WList
|
|
8
8
|
from v440.core.Release import Release
|
|
9
9
|
|
|
10
10
|
__all__ = ["Base"]
|
|
@@ -64,7 +64,7 @@ def parse_epoch(value: str) -> int:
|
|
|
64
64
|
return ans
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
class Base(
|
|
67
|
+
class Base(SlotList):
|
|
68
68
|
|
|
69
69
|
__slots__ = ("_epoch", "_release")
|
|
70
70
|
|
|
@@ -81,11 +81,12 @@ class Base(WList):
|
|
|
81
81
|
return self.format()
|
|
82
82
|
|
|
83
83
|
@property
|
|
84
|
-
def
|
|
85
|
-
return self.epoch, self.release
|
|
84
|
+
def data(self: Self) -> list:
|
|
85
|
+
return [self.epoch, self.release]
|
|
86
86
|
|
|
87
|
-
@
|
|
88
|
-
|
|
87
|
+
@data.setter
|
|
88
|
+
@guard
|
|
89
|
+
def data(self: Self, value: Iterable) -> None:
|
|
89
90
|
self.epoch, self.release = parse_data(value)
|
|
90
91
|
|
|
91
92
|
@property
|
|
@@ -2,13 +2,11 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import *
|
|
4
4
|
|
|
5
|
-
import keyalias
|
|
6
|
-
|
|
7
5
|
from v440._utils import utils
|
|
8
6
|
from v440._utils.Digest import Digest
|
|
9
7
|
from v440._utils.Pattern import Pattern
|
|
8
|
+
from v440._utils.SlotList import SlotList
|
|
10
9
|
from v440._utils.utils import guard
|
|
11
|
-
from v440._utils.WList import WList
|
|
12
10
|
|
|
13
11
|
__all__ = ["Pre"]
|
|
14
12
|
|
|
@@ -62,8 +60,7 @@ def parse_data(value: str) -> list:
|
|
|
62
60
|
return [l, n]
|
|
63
61
|
|
|
64
62
|
|
|
65
|
-
|
|
66
|
-
class Pre(WList):
|
|
63
|
+
class Pre(SlotList):
|
|
67
64
|
|
|
68
65
|
__slots__ = ("_phase", "_subphase")
|
|
69
66
|
|
|
@@ -84,12 +81,29 @@ class Pre(WList):
|
|
|
84
81
|
return ans
|
|
85
82
|
|
|
86
83
|
@property
|
|
87
|
-
def
|
|
88
|
-
return self._phase, self._subphase
|
|
84
|
+
def data(self: Self) -> list:
|
|
85
|
+
return [self._phase, self._subphase]
|
|
89
86
|
|
|
90
|
-
@
|
|
91
|
-
|
|
87
|
+
@data.setter
|
|
88
|
+
@guard
|
|
89
|
+
def data(self: Self, value: Any) -> None:
|
|
92
90
|
self._phase, self._subphase = parse_data(value)
|
|
93
91
|
|
|
94
92
|
def isempty(self: Self) -> bool:
|
|
95
|
-
return
|
|
93
|
+
return self.data == [None, None]
|
|
94
|
+
|
|
95
|
+
@property
|
|
96
|
+
def phase(self: Self) -> Optional[str]:
|
|
97
|
+
return self._phase
|
|
98
|
+
|
|
99
|
+
@phase.setter
|
|
100
|
+
def phase(self: Self, value: Any) -> None:
|
|
101
|
+
self[0] = value
|
|
102
|
+
|
|
103
|
+
@property
|
|
104
|
+
def subphase(self: Self) -> Optional[int]:
|
|
105
|
+
return self._subphase
|
|
106
|
+
|
|
107
|
+
@subphase.setter
|
|
108
|
+
def subphase(self: Self, value: Any) -> None:
|
|
109
|
+
self[1] = value
|
|
@@ -4,8 +4,8 @@ from typing import *
|
|
|
4
4
|
|
|
5
5
|
from v440._utils.Digest import Digest
|
|
6
6
|
from v440._utils.Pattern import Pattern
|
|
7
|
+
from v440._utils.SlotList import SlotList
|
|
7
8
|
from v440._utils.utils import guard
|
|
8
|
-
from v440._utils.WList import WList
|
|
9
9
|
from v440.core.Base import Base
|
|
10
10
|
from v440.core.Qualification import Qualification
|
|
11
11
|
|
|
@@ -36,7 +36,7 @@ def parse_data(value: str) -> list:
|
|
|
36
36
|
return value[: match.end()], value[match.end() :]
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
class Public(
|
|
39
|
+
class Public(SlotList):
|
|
40
40
|
|
|
41
41
|
__slots__ = ("_base", "_qualification")
|
|
42
42
|
|
|
@@ -52,14 +52,6 @@ class Public(WList):
|
|
|
52
52
|
def __str__(self: Self) -> str:
|
|
53
53
|
return self.format()
|
|
54
54
|
|
|
55
|
-
@property
|
|
56
|
-
def _data(self: Self) -> list:
|
|
57
|
-
return [self.base, self.qualification]
|
|
58
|
-
|
|
59
|
-
@_data.setter
|
|
60
|
-
def _data(self: Self, value: Any) -> None:
|
|
61
|
-
self.base, self.qualification = parse_data(value)
|
|
62
|
-
|
|
63
55
|
@property
|
|
64
56
|
def base(self: Self) -> Base:
|
|
65
57
|
return self._base
|
|
@@ -69,6 +61,15 @@ class Public(WList):
|
|
|
69
61
|
def base(self: Self, value: Any) -> None:
|
|
70
62
|
self.base.data = value
|
|
71
63
|
|
|
64
|
+
@property
|
|
65
|
+
def data(self: Self) -> list:
|
|
66
|
+
return [self.base, self.qualification]
|
|
67
|
+
|
|
68
|
+
@data.setter
|
|
69
|
+
@guard
|
|
70
|
+
def data(self: Self, value: Any) -> None:
|
|
71
|
+
self.base, self.qualification = parse_data(value)
|
|
72
|
+
|
|
72
73
|
def format(self: Self, cutoff: Any = None) -> str:
|
|
73
74
|
return self.base.format(cutoff) + str(self.qualification)
|
|
74
75
|
|
|
@@ -3,10 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
from typing import *
|
|
4
4
|
|
|
5
5
|
from v440._utils import SimpleQualifierParser
|
|
6
|
+
from v440._utils.BaseList import BaseList
|
|
6
7
|
from v440._utils.Digest import Digest
|
|
7
8
|
from v440._utils.Pattern import Pattern
|
|
8
9
|
from v440._utils.utils import guard
|
|
9
|
-
from v440._utils.WList import WList
|
|
10
10
|
from v440.core.Pre import Pre
|
|
11
11
|
|
|
12
12
|
__all__ = ["Qualification"]
|
|
@@ -57,7 +57,7 @@ def parse_data(value: str) -> list:
|
|
|
57
57
|
return [pre, post, dev]
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
class Qualification(
|
|
60
|
+
class Qualification(BaseList):
|
|
61
61
|
|
|
62
62
|
__slots__ = ("_pre", "_post", "_dev")
|
|
63
63
|
|
|
@@ -72,9 +72,6 @@ class Qualification(WList):
|
|
|
72
72
|
self._dev = None
|
|
73
73
|
self.data = data
|
|
74
74
|
|
|
75
|
-
def __le__(self: Self, other: Any) -> bool:
|
|
76
|
-
return self._cmpkey() <= type(self)(other)._cmpkey()
|
|
77
|
-
|
|
78
75
|
def __str__(self: Self) -> str:
|
|
79
76
|
ans: str = str(self.pre)
|
|
80
77
|
if self.post is not None:
|
|
@@ -83,7 +80,7 @@ class Qualification(WList):
|
|
|
83
80
|
ans += ".dev%s" % self.dev
|
|
84
81
|
return ans
|
|
85
82
|
|
|
86
|
-
def
|
|
83
|
+
def _cmp(self: Self) -> list:
|
|
87
84
|
ans = self.data
|
|
88
85
|
if not ans[0].isempty():
|
|
89
86
|
ans[0] = tuple(ans[0])
|
|
@@ -100,11 +97,12 @@ class Qualification(WList):
|
|
|
100
97
|
return ans
|
|
101
98
|
|
|
102
99
|
@property
|
|
103
|
-
def
|
|
104
|
-
return self.pre, self.post, self.dev
|
|
100
|
+
def data(self: Self) -> list:
|
|
101
|
+
return [self.pre, self.post, self.dev]
|
|
105
102
|
|
|
106
|
-
@
|
|
107
|
-
|
|
103
|
+
@data.setter
|
|
104
|
+
@guard
|
|
105
|
+
def data(self: Self, value: Any) -> None:
|
|
108
106
|
self.pre, self.post, self.dev = parse_data(value)
|
|
109
107
|
|
|
110
108
|
@property
|
|
@@ -5,8 +5,8 @@ from typing import *
|
|
|
5
5
|
import packaging.version
|
|
6
6
|
|
|
7
7
|
from v440._utils.Digest import Digest
|
|
8
|
+
from v440._utils.SlotList import SlotList
|
|
8
9
|
from v440._utils.utils import guard
|
|
9
|
-
from v440._utils.WList import WList
|
|
10
10
|
from v440.core.Base import Base
|
|
11
11
|
from v440.core.Local import Local
|
|
12
12
|
from v440.core.Pre import Pre
|
|
@@ -40,7 +40,7 @@ def parse_data(value: str) -> list:
|
|
|
40
40
|
return [value, None]
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
class Version(
|
|
43
|
+
class Version(SlotList):
|
|
44
44
|
__slots__ = ("_public", "_local")
|
|
45
45
|
base: Base
|
|
46
46
|
data: list
|
|
@@ -63,11 +63,12 @@ class Version(WList):
|
|
|
63
63
|
return self.format()
|
|
64
64
|
|
|
65
65
|
@property
|
|
66
|
-
def
|
|
67
|
-
return
|
|
66
|
+
def data(self: Self) -> list:
|
|
67
|
+
return [self.public, self.local]
|
|
68
68
|
|
|
69
|
-
@
|
|
70
|
-
|
|
69
|
+
@data.setter
|
|
70
|
+
@guard
|
|
71
|
+
def data(self: Self, value: Any) -> None:
|
|
71
72
|
self.public, self.local = parse_data(value)
|
|
72
73
|
|
|
73
74
|
@property
|
|
@@ -355,14 +355,6 @@ class TestPackaging(unittest.TestCase):
|
|
|
355
355
|
version_obj.local = v.packaging().local
|
|
356
356
|
self.assertEqual(str(v.local), str(version_obj.local))
|
|
357
357
|
|
|
358
|
-
def test_exc(self: Self) -> None:
|
|
359
|
-
l: list
|
|
360
|
-
x: str
|
|
361
|
-
for l in Util.util.data["strings"]["exc"].values():
|
|
362
|
-
for x in l:
|
|
363
|
-
with self.assertRaises(VersionError):
|
|
364
|
-
Version(x)
|
|
365
|
-
|
|
366
358
|
def test_exc_pack(self: Self) -> None:
|
|
367
359
|
impure: list = list()
|
|
368
360
|
l: list
|
|
@@ -376,5 +368,20 @@ class TestPackaging(unittest.TestCase):
|
|
|
376
368
|
packaging.version.Version(x)
|
|
377
369
|
|
|
378
370
|
|
|
371
|
+
class TestExc(unittest.TestCase):
|
|
372
|
+
def test_exc(self: Self) -> None:
|
|
373
|
+
k: str
|
|
374
|
+
l: list
|
|
375
|
+
for k, l in Util.util.data["strings"]["exc"].items():
|
|
376
|
+
self.go(key=k, queries=l)
|
|
377
|
+
|
|
378
|
+
def go(self: Self, key: str, queries: list) -> None:
|
|
379
|
+
x: str
|
|
380
|
+
with self.subTest(key=key):
|
|
381
|
+
for x in queries:
|
|
382
|
+
with self.assertRaises(VersionError):
|
|
383
|
+
Version(x)
|
|
384
|
+
|
|
385
|
+
|
|
379
386
|
if __name__ == "__main__":
|
|
380
387
|
unittest.main()
|
|
@@ -104,9 +104,9 @@ class TestExample(unittest.TestCase):
|
|
|
104
104
|
v.release.micro = 4
|
|
105
105
|
self.assertEqual(str(v), "2.64.4") # Further modified version
|
|
106
106
|
|
|
107
|
-
def
|
|
107
|
+
def test_example_3a(self: Self) -> None:
|
|
108
108
|
v1: Version = Version("1.6.3")
|
|
109
|
-
v2:
|
|
109
|
+
v2: str = "1.6.4"
|
|
110
110
|
self.assertEqual(str(v1), "1.6.3") # v1
|
|
111
111
|
self.assertEqual(str(v2), "1.6.4") # v2
|
|
112
112
|
self.assertFalse(v1 == v2) # v1 == v2 gives False
|
|
@@ -116,9 +116,9 @@ class TestExample(unittest.TestCase):
|
|
|
116
116
|
self.assertFalse(v1 > v2) # v1 > v2 gives False
|
|
117
117
|
self.assertTrue(v1 < v2) # v1 < v2 gives True
|
|
118
118
|
|
|
119
|
-
def
|
|
120
|
-
v1:
|
|
121
|
-
v2:
|
|
119
|
+
def test_example_3b(self: Self) -> None:
|
|
120
|
+
v1: str = "1.6.3"
|
|
121
|
+
v2: Version = Version("1.6.4")
|
|
122
122
|
self.assertEqual(str(v1), "1.6.3") # v1
|
|
123
123
|
self.assertEqual(str(v2), "1.6.4") # v2
|
|
124
124
|
self.assertFalse(v1 == v2) # v1 == v2 gives False
|
|
@@ -128,8 +128,8 @@ class TestExample(unittest.TestCase):
|
|
|
128
128
|
self.assertFalse(v1 > v2) # v1 > v2 gives False
|
|
129
129
|
self.assertTrue(v1 < v2) # v1 < v2 gives True
|
|
130
130
|
|
|
131
|
-
def
|
|
132
|
-
v1:
|
|
131
|
+
def test_example_3c(self: Self) -> None:
|
|
132
|
+
v1: Version = Version("1.6.3")
|
|
133
133
|
v2: Version = Version("1.6.4")
|
|
134
134
|
self.assertEqual(str(v1), "1.6.3") # v1
|
|
135
135
|
self.assertEqual(str(v2), "1.6.4") # v2
|
|
@@ -181,7 +181,7 @@ class TestExample(unittest.TestCase):
|
|
|
181
181
|
self.assertEqual(str(v), "0") # After reset
|
|
182
182
|
v.base = "4!5.0.1"
|
|
183
183
|
self.assertEqual(str(v), "4!5.0.1") # Before error
|
|
184
|
-
with self.assertRaises(VersionError)
|
|
184
|
+
with self.assertRaises(VersionError):
|
|
185
185
|
v.base = "9!x"
|
|
186
186
|
self.assertEqual(str(v), "4!5.0.1") # After error
|
|
187
187
|
|
|
@@ -190,7 +190,7 @@ class TestPatch(unittest.TestCase):
|
|
|
190
190
|
def test_example_0(self: Self) -> None:
|
|
191
191
|
x: Pre = Pre("a1")
|
|
192
192
|
y: Pre = Pre("b2")
|
|
193
|
-
with self.assertRaises(
|
|
193
|
+
with self.assertRaises(Exception):
|
|
194
194
|
x += y
|
|
195
195
|
|
|
196
196
|
|
|
@@ -286,7 +286,7 @@ class TestAdditionalVersionRelease(unittest.TestCase):
|
|
|
286
286
|
# Test if release supports iteration
|
|
287
287
|
version: Version = Version()
|
|
288
288
|
version.release = [1, 2, 3]
|
|
289
|
-
result =
|
|
289
|
+
result = list(version.release)
|
|
290
290
|
self.assertEqual(result, [1, 2, 3])
|
|
291
291
|
|
|
292
292
|
def test_release_repr(self: Self) -> None:
|
|
@@ -389,7 +389,7 @@ class TestVersionLocal(unittest.TestCase):
|
|
|
389
389
|
# Test if local supports iteration
|
|
390
390
|
version: Version = Version()
|
|
391
391
|
version.local = "1.dev.build"
|
|
392
|
-
result: list =
|
|
392
|
+
result: list = list(version.local)
|
|
393
393
|
self.assertEqual(result, [1, "dev", "build"])
|
|
394
394
|
|
|
395
395
|
|
|
@@ -9,11 +9,12 @@ src/v440.egg-info/SOURCES.txt
|
|
|
9
9
|
src/v440.egg-info/dependency_links.txt
|
|
10
10
|
src/v440.egg-info/requires.txt
|
|
11
11
|
src/v440.egg-info/top_level.txt
|
|
12
|
+
src/v440/_utils/BaseList.py
|
|
12
13
|
src/v440/_utils/Digest.py
|
|
13
14
|
src/v440/_utils/Pattern.py
|
|
14
15
|
src/v440/_utils/SimpleQualifierParser.py
|
|
16
|
+
src/v440/_utils/SlotList.py
|
|
15
17
|
src/v440/_utils/VList.py
|
|
16
|
-
src/v440/_utils/WList.py
|
|
17
18
|
src/v440/_utils/__init__.py
|
|
18
19
|
src/v440/_utils/utils.py
|
|
19
20
|
src/v440/core/Base.py
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
from typing import *
|
|
2
|
-
|
|
3
|
-
from v440._utils.utils import guard
|
|
4
|
-
from v440._utils.VList import VList
|
|
5
|
-
|
|
6
|
-
__all__ = ["WList"]
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class WList(VList):
|
|
10
|
-
@property
|
|
11
|
-
def data(self: Self) -> list:
|
|
12
|
-
return list(self._data)
|
|
13
|
-
|
|
14
|
-
@data.setter
|
|
15
|
-
@guard
|
|
16
|
-
def data(self: Self, value: Any) -> None:
|
|
17
|
-
self._data = value
|
|
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
|