v440 2.0.0.dev164__tar.gz → 2.0.0.dev166__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.dev164/src/v440.egg-info → v440-2.0.0.dev166}/PKG-INFO +1 -1
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/pyproject.toml +1 -1
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/BaseStringer.py +0 -4
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/ListStringer.py +0 -3
- v440-2.0.0.dev166/src/v440/_utils/QualStringer.py +78 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/SlotStringer.py +4 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/cfg.toml +1 -1
- v440-2.0.0.dev166/src/v440/core/Pre.py +59 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/core/Qual.py +12 -85
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/tests/test_version.py +5 -5
- {v440-2.0.0.dev164 → v440-2.0.0.dev166/src/v440.egg-info}/PKG-INFO +1 -1
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440.egg-info/SOURCES.txt +1 -0
- v440-2.0.0.dev164/src/v440/_utils/QualStringer.py +0 -22
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/LICENSE.txt +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/MANIFEST.in +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/README.rst +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/setup.cfg +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/__init__.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/Cfg.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/Pattern.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/__init__.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/guarding.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/releaseparse/__init__.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/releaseparse/deleting.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/releaseparse/getting.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/releaseparse/listing.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/releaseparse/numerals.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/releaseparse/ranging.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/_utils/releaseparse/setting.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/core/Base.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/core/Local.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/core/Public.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/core/Release.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/core/Version.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/core/VersionError.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/core/__init__.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/tests/__init__.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/tests/test_testdata.py +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440/tests/testdata.toml +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440.egg-info/dependency_links.txt +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440.egg-info/requires.txt +0 -0
- {v440-2.0.0.dev164 → v440-2.0.0.dev166}/src/v440.egg-info/top_level.txt +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from abc import ABCMeta, abstractmethod
|
|
2
2
|
from typing import *
|
|
3
3
|
|
|
4
|
-
import scaevola
|
|
5
4
|
import setdoc
|
|
6
5
|
import unhash
|
|
7
6
|
|
|
@@ -103,9 +102,6 @@ class BaseStringer(metaclass=ABCMeta):
|
|
|
103
102
|
@abstractmethod
|
|
104
103
|
def _string_fset(self: Self, value: str) -> None: ...
|
|
105
104
|
|
|
106
|
-
@abstractmethod
|
|
107
|
-
def _todict(self: Self) -> dict: ...
|
|
108
|
-
|
|
109
105
|
@setdoc.basic
|
|
110
106
|
def copy(self: Self) -> Self:
|
|
111
107
|
return type(self)(self)
|
|
@@ -105,9 +105,6 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
|
|
|
105
105
|
@abstractmethod
|
|
106
106
|
def _sort(cls: type, value: Any): ...
|
|
107
107
|
|
|
108
|
-
def _todict(self: Self) -> dict:
|
|
109
|
-
return dict(data=self.data)
|
|
110
|
-
|
|
111
108
|
def append(self: Self, value: Self, /) -> None:
|
|
112
109
|
"This method appends value to self."
|
|
113
110
|
data: list = list(self.data)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import operator
|
|
2
|
+
from abc import abstractmethod
|
|
3
|
+
from typing import *
|
|
4
|
+
|
|
5
|
+
import setdoc
|
|
6
|
+
from datarepr import datarepr
|
|
7
|
+
from overloadable import Overloadable
|
|
8
|
+
|
|
9
|
+
from v440._utils.BaseStringer import BaseStringer
|
|
10
|
+
from v440._utils.guarding import guard
|
|
11
|
+
|
|
12
|
+
__all__ = ["QualStringer"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class QualStringer(BaseStringer):
|
|
16
|
+
__slots__ = ("_phase", "_num")
|
|
17
|
+
|
|
18
|
+
string: str
|
|
19
|
+
phase: str
|
|
20
|
+
num: int
|
|
21
|
+
|
|
22
|
+
@setdoc.basic
|
|
23
|
+
def __bool__(self: Self) -> bool:
|
|
24
|
+
return bool(self.phase or self.num)
|
|
25
|
+
|
|
26
|
+
@Overloadable
|
|
27
|
+
@setdoc.basic
|
|
28
|
+
def __init__(self: Self, *args: Any, **kwargs: Any) -> str:
|
|
29
|
+
self._phase = ""
|
|
30
|
+
self._num = 0
|
|
31
|
+
argc: int = len(args) + len(kwargs)
|
|
32
|
+
keys: set = set(kwargs.keys())
|
|
33
|
+
if argc <= 1 and keys <= {"string"}:
|
|
34
|
+
return "string"
|
|
35
|
+
return "slots"
|
|
36
|
+
|
|
37
|
+
@__init__.overload("string")
|
|
38
|
+
@setdoc.basic
|
|
39
|
+
def __init__(self: Self, string: Any = "") -> None:
|
|
40
|
+
self.string = string
|
|
41
|
+
|
|
42
|
+
@__init__.overload("slots")
|
|
43
|
+
@setdoc.basic
|
|
44
|
+
def __init__(
|
|
45
|
+
self: Self,
|
|
46
|
+
phase: Any = "",
|
|
47
|
+
num: Any = 0,
|
|
48
|
+
) -> None:
|
|
49
|
+
self.phase = phase
|
|
50
|
+
self.num = num
|
|
51
|
+
|
|
52
|
+
@setdoc.basic
|
|
53
|
+
def __repr__(self: Self) -> str:
|
|
54
|
+
return datarepr(type(self).__name__, phase=self.phase, num=self.num)
|
|
55
|
+
|
|
56
|
+
@abstractmethod
|
|
57
|
+
def _num_fset(self: Self, value: int) -> None: ...
|
|
58
|
+
|
|
59
|
+
@abstractmethod
|
|
60
|
+
def _phase_fset(self: Self, value: str) -> None: ...
|
|
61
|
+
|
|
62
|
+
@property
|
|
63
|
+
def num(self: Self) -> int:
|
|
64
|
+
return self._num
|
|
65
|
+
|
|
66
|
+
@num.setter
|
|
67
|
+
@guard
|
|
68
|
+
def num(self: Self, value: Any) -> None:
|
|
69
|
+
self._num_fset(operator.index(value))
|
|
70
|
+
|
|
71
|
+
@property
|
|
72
|
+
def phase(self: Self) -> str:
|
|
73
|
+
return self._phase
|
|
74
|
+
|
|
75
|
+
@phase.setter
|
|
76
|
+
@guard
|
|
77
|
+
def phase(self: Self, value: Any) -> None:
|
|
78
|
+
self._phase_fset(str(value))
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
1
2
|
from functools import partial
|
|
2
3
|
from typing import *
|
|
3
4
|
|
|
@@ -20,3 +21,6 @@ class SlotStringer(BaseStringer):
|
|
|
20
21
|
|
|
21
22
|
def _cmp(self: Self) -> tuple:
|
|
22
23
|
return tuple(map(partial(getattr, self), type(self).__slots__))
|
|
24
|
+
|
|
25
|
+
@abstractmethod
|
|
26
|
+
def _todict(self: Self) -> dict: ...
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import string as string_
|
|
4
|
+
from typing import *
|
|
5
|
+
|
|
6
|
+
from v440._utils.Cfg import Cfg
|
|
7
|
+
from v440._utils.QualStringer import QualStringer
|
|
8
|
+
|
|
9
|
+
__all__ = ["Pre"]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class Pre(QualStringer):
|
|
13
|
+
|
|
14
|
+
__slots__ = ()
|
|
15
|
+
string: str
|
|
16
|
+
phase: str
|
|
17
|
+
num: int
|
|
18
|
+
|
|
19
|
+
def _cmp(self: Self) -> list:
|
|
20
|
+
return {bool(self)}, self.phase, self.num
|
|
21
|
+
|
|
22
|
+
def _format(self: Self, format_spec: str) -> str:
|
|
23
|
+
if format_spec:
|
|
24
|
+
raise ValueError
|
|
25
|
+
if self:
|
|
26
|
+
return self.phase + str(self.num)
|
|
27
|
+
else:
|
|
28
|
+
return ""
|
|
29
|
+
|
|
30
|
+
def _num_fset(self: Self, value: int) -> None:
|
|
31
|
+
if value < 0:
|
|
32
|
+
raise ValueError
|
|
33
|
+
self.string = self.phase + str(value)
|
|
34
|
+
|
|
35
|
+
def _phase_fset(self: Self, value: str) -> None:
|
|
36
|
+
self._phase = Cfg.cfg.data["pre"][value.lower()]
|
|
37
|
+
|
|
38
|
+
def _string_fset(self: Self, value: str) -> None:
|
|
39
|
+
v: str = value.lower()
|
|
40
|
+
v = v.replace("_", ".")
|
|
41
|
+
v = v.replace("-", ".")
|
|
42
|
+
x: str = v.rstrip(string_.digits)
|
|
43
|
+
v = v[len(x) :]
|
|
44
|
+
q: bool = x.endswith(".")
|
|
45
|
+
if q:
|
|
46
|
+
if not v:
|
|
47
|
+
raise ValueError
|
|
48
|
+
x = x[:-1]
|
|
49
|
+
p: bool = x.startswith(".")
|
|
50
|
+
if p:
|
|
51
|
+
x = x[1:]
|
|
52
|
+
if x:
|
|
53
|
+
self._phase = Cfg.cfg.data["pre"][x]
|
|
54
|
+
self._num = int("0" + v)
|
|
55
|
+
elif p or v:
|
|
56
|
+
raise ValueError
|
|
57
|
+
else:
|
|
58
|
+
self._phase = ""
|
|
59
|
+
self._num = 0
|
|
@@ -11,38 +11,34 @@ from v440._utils.Cfg import Cfg
|
|
|
11
11
|
from v440._utils.guarding import guard
|
|
12
12
|
from v440._utils.Pattern import Pattern
|
|
13
13
|
from v440._utils.SlotStringer import SlotStringer
|
|
14
|
+
from v440.core.Pre import Pre
|
|
14
15
|
|
|
15
16
|
__all__ = ["Qual"]
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
class Qual(SlotStringer):
|
|
19
20
|
|
|
20
|
-
__slots__ = ("
|
|
21
|
+
__slots__ = ("_pre", "_post", "_dev")
|
|
21
22
|
string: str
|
|
22
|
-
pre:
|
|
23
|
-
prephase: str
|
|
24
|
-
prenum: int
|
|
23
|
+
pre: Pre
|
|
25
24
|
post: Optional[int]
|
|
26
25
|
dev: Optional[int]
|
|
27
26
|
|
|
28
27
|
@setdoc.basic
|
|
29
28
|
def __bool__(self: Self) -> bool:
|
|
30
|
-
return self.string
|
|
29
|
+
return bool(self.string)
|
|
31
30
|
|
|
32
31
|
@Overloadable
|
|
33
32
|
@setdoc.basic
|
|
34
33
|
def __init__(self: Self, *args: Any, **kwargs: Any) -> str:
|
|
35
|
-
self.
|
|
36
|
-
self._prenum = 0
|
|
34
|
+
self._pre = Pre()
|
|
37
35
|
self._post = None
|
|
38
36
|
self._dev = None
|
|
39
37
|
argc: int = len(args) + len(kwargs)
|
|
40
38
|
keys: set = set(kwargs.keys())
|
|
41
39
|
if argc <= 1 and keys <= {"string"}:
|
|
42
40
|
return "string"
|
|
43
|
-
|
|
44
|
-
return "pre"
|
|
45
|
-
return "slots"
|
|
41
|
+
return "pre"
|
|
46
42
|
|
|
47
43
|
@__init__.overload("string")
|
|
48
44
|
@setdoc.basic
|
|
@@ -57,21 +53,7 @@ class Qual(SlotStringer):
|
|
|
57
53
|
post: Any = None,
|
|
58
54
|
dev: Any = None,
|
|
59
55
|
) -> None:
|
|
60
|
-
self.pre = pre
|
|
61
|
-
self.post = post
|
|
62
|
-
self.dev = dev
|
|
63
|
-
|
|
64
|
-
@__init__.overload("slots")
|
|
65
|
-
@setdoc.basic
|
|
66
|
-
def __init__(
|
|
67
|
-
self: Self,
|
|
68
|
-
prephase: Any = "",
|
|
69
|
-
prenum: Any = 0,
|
|
70
|
-
post: Any = None,
|
|
71
|
-
dev: Any = None,
|
|
72
|
-
) -> None:
|
|
73
|
-
self.prephase = prephase
|
|
74
|
-
self.prenum = prenum
|
|
56
|
+
self.pre.string = pre
|
|
75
57
|
self.post = post
|
|
76
58
|
self.dev = dev
|
|
77
59
|
|
|
@@ -92,7 +74,7 @@ class Qual(SlotStringer):
|
|
|
92
74
|
def _format(self: Self, format_spec: str) -> str:
|
|
93
75
|
if format_spec:
|
|
94
76
|
raise ValueError
|
|
95
|
-
ans: str = self.pre
|
|
77
|
+
ans: str = self.pre.string
|
|
96
78
|
if self.post is not None:
|
|
97
79
|
ans += ".post%s" % self.post
|
|
98
80
|
if self.dev is not None:
|
|
@@ -106,7 +88,7 @@ class Qual(SlotStringer):
|
|
|
106
88
|
y: Any
|
|
107
89
|
self.dev = None
|
|
108
90
|
self.post = None
|
|
109
|
-
self.pre = ""
|
|
91
|
+
self.pre.string = ""
|
|
110
92
|
while v:
|
|
111
93
|
m = Pattern.QUALIFIERS.leftbound.search(v)
|
|
112
94
|
v = v[m.end() :]
|
|
@@ -121,7 +103,7 @@ class Qual(SlotStringer):
|
|
|
121
103
|
if x in ("post", "r", "rev"):
|
|
122
104
|
self.post = int(y)
|
|
123
105
|
continue
|
|
124
|
-
self.pre = x + y
|
|
106
|
+
self.pre.string = x + y
|
|
125
107
|
|
|
126
108
|
def _todict(self: Self) -> dict:
|
|
127
109
|
return dict(pre=self.pre, post=self.post, dev=self.dev)
|
|
@@ -147,7 +129,7 @@ class Qual(SlotStringer):
|
|
|
147
129
|
|
|
148
130
|
def isprerelease(self: Self) -> bool:
|
|
149
131
|
"This method returns whether the current instance denotes a pre-release."
|
|
150
|
-
return self.
|
|
132
|
+
return self.pre.phase != "" or self.dev is not None
|
|
151
133
|
|
|
152
134
|
def ispostrelease(self: Self) -> bool:
|
|
153
135
|
"This method returns whether the current instance denotes a post-release."
|
|
@@ -167,59 +149,4 @@ class Qual(SlotStringer):
|
|
|
167
149
|
|
|
168
150
|
@property
|
|
169
151
|
def pre(self: Self) -> str:
|
|
170
|
-
|
|
171
|
-
return ""
|
|
172
|
-
return self.prephase + str(self.prenum)
|
|
173
|
-
|
|
174
|
-
@pre.setter
|
|
175
|
-
@guard
|
|
176
|
-
def pre(self: Self, value: Any) -> None:
|
|
177
|
-
v: str = str(value).lower()
|
|
178
|
-
v = v.replace("_", ".")
|
|
179
|
-
v = v.replace("-", ".")
|
|
180
|
-
x: str = v.rstrip(string_.digits)
|
|
181
|
-
v = v[len(x) :]
|
|
182
|
-
q: bool = x.endswith(".")
|
|
183
|
-
if q:
|
|
184
|
-
if not v:
|
|
185
|
-
raise ValueError
|
|
186
|
-
x = x[:-1]
|
|
187
|
-
p: bool = x.startswith(".")
|
|
188
|
-
if p:
|
|
189
|
-
x = x[1:]
|
|
190
|
-
if x:
|
|
191
|
-
self._prephase = Cfg.cfg.data["phases"][x]
|
|
192
|
-
self._prenum = int("0" + v)
|
|
193
|
-
elif p or v:
|
|
194
|
-
raise ValueError
|
|
195
|
-
else:
|
|
196
|
-
self._prephase = ""
|
|
197
|
-
self._prenum = 0
|
|
198
|
-
|
|
199
|
-
@property
|
|
200
|
-
def prephase(self: Self) -> str:
|
|
201
|
-
return self._prephase
|
|
202
|
-
|
|
203
|
-
@prephase.setter
|
|
204
|
-
@guard
|
|
205
|
-
def prephase(self: Self, value: Any) -> None:
|
|
206
|
-
x: str = str(value).lower()
|
|
207
|
-
if x != "":
|
|
208
|
-
self._prephase = Cfg.cfg.data["phases"][x]
|
|
209
|
-
elif self.prenum:
|
|
210
|
-
self.pre = self.prenum # raises error
|
|
211
|
-
|
|
212
|
-
@property
|
|
213
|
-
def prenum(self: Self) -> Optional[int]:
|
|
214
|
-
return self._prenum
|
|
215
|
-
|
|
216
|
-
@prenum.setter
|
|
217
|
-
@guard
|
|
218
|
-
def prenum(self: Self, value: Any) -> None:
|
|
219
|
-
y: int = operator.index(value)
|
|
220
|
-
if y < 0:
|
|
221
|
-
raise ValueError
|
|
222
|
-
if self.prephase:
|
|
223
|
-
self._prenum = y
|
|
224
|
-
else:
|
|
225
|
-
self.pre = y # raises error
|
|
152
|
+
return self._pre
|
|
@@ -67,17 +67,17 @@ class TestPre(unittest.TestCase):
|
|
|
67
67
|
self.assertEqual(str(v.public.qual), "a1")
|
|
68
68
|
|
|
69
69
|
# Modify pre-release phase to "preview"
|
|
70
|
-
v.public.qual.
|
|
70
|
+
v.public.qual.pre.phase = "preview"
|
|
71
71
|
self.assertEqual(str(v), "1.2.3rc1")
|
|
72
72
|
self.assertEqual(str(v.public.qual), "rc1")
|
|
73
73
|
|
|
74
74
|
# Modify subphase to "42"
|
|
75
|
-
v.public.qual.
|
|
75
|
+
v.public.qual.pre.num = 42
|
|
76
76
|
self.assertEqual(str(v), "1.2.3rc42")
|
|
77
77
|
self.assertEqual(str(v.public.qual), "rc42")
|
|
78
78
|
|
|
79
79
|
# Change phase to a formatted string "BeTa"
|
|
80
|
-
v.public.qual.
|
|
80
|
+
v.public.qual.pre.phase = "BeTa"
|
|
81
81
|
self.assertEqual(str(v), "1.2.3b42")
|
|
82
82
|
self.assertEqual(str(v.public.qual), "b42")
|
|
83
83
|
self.assertEqual(v.public.qual, backup)
|
|
@@ -147,12 +147,12 @@ class TestExample(unittest.TestCase):
|
|
|
147
147
|
def test_example_5(self: Self) -> None:
|
|
148
148
|
v: Version = Version("2.0.0-alpha.1")
|
|
149
149
|
self.assertEqual(str(v), "2a1") # Pre-release version
|
|
150
|
-
v.public.qual.pre = "beta.2"
|
|
150
|
+
v.public.qual.pre.string = "beta.2"
|
|
151
151
|
self.assertEqual(str(v), "2b2") # Modified pre-release version
|
|
152
152
|
with self.assertRaises(Exception):
|
|
153
153
|
v.public.qual.pre[1] = 4
|
|
154
154
|
self.assertEqual(str(v), "2b2") # Further modified pre-release version
|
|
155
|
-
v.public.qual.
|
|
155
|
+
v.public.qual.pre.phase = "PrEvIeW"
|
|
156
156
|
self.assertEqual(str(v), "2rc2") # Even further modified pre-release version
|
|
157
157
|
|
|
158
158
|
def test_example_6(self: Self) -> None:
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from functools import partial
|
|
2
|
-
from typing import *
|
|
3
|
-
|
|
4
|
-
import setdoc
|
|
5
|
-
from datarepr import datarepr
|
|
6
|
-
|
|
7
|
-
from v440._utils.BaseStringer import BaseStringer
|
|
8
|
-
|
|
9
|
-
__all__ = ["QualStringer"]
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class QualStringer(BaseStringer):
|
|
13
|
-
__slots__ = ()
|
|
14
|
-
|
|
15
|
-
string: str
|
|
16
|
-
|
|
17
|
-
@setdoc.basic
|
|
18
|
-
def __repr__(self: Self) -> str:
|
|
19
|
-
return datarepr(type(self).__name__, **self._todict())
|
|
20
|
-
|
|
21
|
-
def _cmp(self: Self) -> tuple:
|
|
22
|
-
return tuple(map(partial(getattr, self), type(self).__slots__))
|
|
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
|