v440 2.0.0.dev88__tar.gz → 2.0.0.dev90__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.dev88/src/v440.egg-info → v440-2.0.0.dev90}/PKG-INFO +1 -1
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/pyproject.toml +1 -1
- v440-2.0.0.dev90/src/v440/_utils/releaseparse/setting.py +71 -0
- v440-2.0.0.dev90/src/v440/core/Release.py +78 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90/src/v440.egg-info}/PKG-INFO +1 -1
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440.egg-info/SOURCES.txt +1 -0
- v440-2.0.0.dev88/src/v440/core/Release.py +0 -133
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/LICENSE.txt +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/MANIFEST.in +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/README.rst +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/setup.cfg +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/__init__.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/BaseStringer.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/Cfg.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/ListStringer.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/Pattern.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/SlotStringer.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/__init__.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/cfg.toml +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/guarding.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/Digest.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/__init__.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/devs.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/posts.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/pres.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/segmenting.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/__init__.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/deleting.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/getting.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/listing.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/numerals.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/ranging.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Base.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Local.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Public.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Qual.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Version.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/VersionError.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/__init__.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/tests/__init__.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/tests/test_testdata.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/tests/test_version.py +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/tests/testdata.toml +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440.egg-info/dependency_links.txt +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440.egg-info/requires.txt +0 -0
- {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import operator
|
|
4
|
+
from typing import *
|
|
5
|
+
|
|
6
|
+
from overloadable import Overloadable
|
|
7
|
+
|
|
8
|
+
from v440._utils.releaseparse import listing, numerals, ranging
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@Overloadable
|
|
12
|
+
def setitem(data: tuple, key: Any, value: Any) -> bool:
|
|
13
|
+
return type(key) is slice
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@setitem.overload(False)
|
|
17
|
+
def setitem(data: tuple, key: SupportsIndex, value: Any) -> tuple:
|
|
18
|
+
i: int = operator.index(key)
|
|
19
|
+
data = setitem_int(data, i, value)
|
|
20
|
+
return data
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@setitem.overload(True)
|
|
24
|
+
def setitem(data: tuple, key: slice, value: Any) -> tuple:
|
|
25
|
+
k: range = ranging.torange(key, len(data))
|
|
26
|
+
data = setitem_range(data, k, value)
|
|
27
|
+
return data
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def setitem_int(data: tuple, key: int, value: Any) -> tuple:
|
|
31
|
+
v: int = numerals.numeral(value)
|
|
32
|
+
if key < len(data):
|
|
33
|
+
edit: list = list(data)
|
|
34
|
+
edit[key] = v
|
|
35
|
+
return tuple(edit)
|
|
36
|
+
if v == 0:
|
|
37
|
+
return data
|
|
38
|
+
data += (0,) * (key - len(data))
|
|
39
|
+
data += (v,)
|
|
40
|
+
return data
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@Overloadable
|
|
44
|
+
def setitem_range(data: tuple, key: range, value: Any) -> bool:
|
|
45
|
+
return key.step == 1
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@setitem_range.overload(False)
|
|
49
|
+
def setitem_range(data: tuple, key: range, value: Any) -> tuple:
|
|
50
|
+
key: list = list(key)
|
|
51
|
+
value: list = listing.tolist(value, slicing=len(key))
|
|
52
|
+
if len(key) != len(value):
|
|
53
|
+
e = "attempt to assign sequence of size %s to extended slice of size %s"
|
|
54
|
+
e %= (len(value), len(key))
|
|
55
|
+
raise ValueError(e)
|
|
56
|
+
ext: int = max(0, max(*key) + 1 - len(data))
|
|
57
|
+
edit: list = list(data)
|
|
58
|
+
edit += [0] * ext
|
|
59
|
+
for k, v in zip(key, value):
|
|
60
|
+
edit[k] = v
|
|
61
|
+
return tuple(edit)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@setitem_range.overload(True)
|
|
65
|
+
def setitem_range(data: tuple, key: range, value: Any) -> Any:
|
|
66
|
+
edit: list = list(data)
|
|
67
|
+
ext: int = max(0, key.start - len(data))
|
|
68
|
+
edit += ext * [0]
|
|
69
|
+
l: list = listing.tolist(value, slicing="always")
|
|
70
|
+
edit = edit[: key.start] + l + edit[key.stop :]
|
|
71
|
+
return tuple(edit)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import operator
|
|
4
|
+
from typing import *
|
|
5
|
+
|
|
6
|
+
import setdoc
|
|
7
|
+
from keyalias import keyalias
|
|
8
|
+
|
|
9
|
+
from v440._utils import releaseparse
|
|
10
|
+
from v440._utils.ListStringer import ListStringer
|
|
11
|
+
from v440._utils.releaseparse import deleting, getting, setting
|
|
12
|
+
|
|
13
|
+
__all__ = ["Release"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@keyalias(major=0, minor=1, micro=2, patch=2)
|
|
17
|
+
class Release(ListStringer):
|
|
18
|
+
__slots__ = ()
|
|
19
|
+
|
|
20
|
+
string: str
|
|
21
|
+
data: tuple[int]
|
|
22
|
+
major: int
|
|
23
|
+
minor: int
|
|
24
|
+
micro: int
|
|
25
|
+
patch: int
|
|
26
|
+
|
|
27
|
+
@setdoc.basic
|
|
28
|
+
def __delitem__(self: Self, key: Any) -> bool:
|
|
29
|
+
self._data = deleting.delitem(self.data, key)
|
|
30
|
+
|
|
31
|
+
@setdoc.basic
|
|
32
|
+
def __getitem__(self: Self, key: Any) -> bool:
|
|
33
|
+
return getting.getitem(self.data, key)
|
|
34
|
+
|
|
35
|
+
@setdoc.basic
|
|
36
|
+
def __setitem__(self: Self, key: Any, value: Any) -> bool:
|
|
37
|
+
self._data = setting.setitem(self.data, key, value)
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def _data_parse(cls: type, value: list) -> Iterable:
|
|
41
|
+
v: list = releaseparse.tolist(value, slicing="always")
|
|
42
|
+
while v and v[-1] == 0:
|
|
43
|
+
v.pop()
|
|
44
|
+
return v
|
|
45
|
+
|
|
46
|
+
def _format(self: Self, format_spec: str) -> str:
|
|
47
|
+
i: Optional[int]
|
|
48
|
+
if format_spec:
|
|
49
|
+
i = int(format_spec)
|
|
50
|
+
else:
|
|
51
|
+
i = None
|
|
52
|
+
l: list = self[:i]
|
|
53
|
+
if len(l) == 0:
|
|
54
|
+
l += [0]
|
|
55
|
+
l = list(map(str, l))
|
|
56
|
+
ans: str = ".".join(l)
|
|
57
|
+
return ans
|
|
58
|
+
|
|
59
|
+
@classmethod
|
|
60
|
+
def _sort(cls: type, value: int) -> int:
|
|
61
|
+
return value
|
|
62
|
+
|
|
63
|
+
def _string_fset(self: Self, value: str) -> None:
|
|
64
|
+
if value == "":
|
|
65
|
+
self.data = ()
|
|
66
|
+
return
|
|
67
|
+
v: str = value
|
|
68
|
+
v = v.replace("_", ".")
|
|
69
|
+
v = v.replace("-", ".")
|
|
70
|
+
self.data = v.split(".")
|
|
71
|
+
|
|
72
|
+
def bump(self: Self, index: SupportsIndex = -1, amount: SupportsIndex = 1) -> None:
|
|
73
|
+
i: int = operator.index(index)
|
|
74
|
+
a: int = operator.index(amount)
|
|
75
|
+
x: int = getting.getitem_int(self.data, i) + a
|
|
76
|
+
self._data = setting.setitem_int(self.data, i, x)
|
|
77
|
+
if i != -1:
|
|
78
|
+
self.data = self.data[: i + 1]
|
|
@@ -29,6 +29,7 @@ src/v440/_utils/releaseparse/getting.py
|
|
|
29
29
|
src/v440/_utils/releaseparse/listing.py
|
|
30
30
|
src/v440/_utils/releaseparse/numerals.py
|
|
31
31
|
src/v440/_utils/releaseparse/ranging.py
|
|
32
|
+
src/v440/_utils/releaseparse/setting.py
|
|
32
33
|
src/v440/core/Base.py
|
|
33
34
|
src/v440/core/Local.py
|
|
34
35
|
src/v440/core/Public.py
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import operator
|
|
4
|
-
from functools import partial
|
|
5
|
-
from typing import *
|
|
6
|
-
|
|
7
|
-
import setdoc
|
|
8
|
-
from keyalias import keyalias
|
|
9
|
-
from overloadable import Overloadable
|
|
10
|
-
|
|
11
|
-
from v440._utils import releaseparse
|
|
12
|
-
from v440._utils.ListStringer import ListStringer
|
|
13
|
-
from v440._utils.releaseparse import deleting, getting
|
|
14
|
-
|
|
15
|
-
__all__ = ["Release"]
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@keyalias(major=0, minor=1, micro=2, patch=2)
|
|
19
|
-
class Release(ListStringer):
|
|
20
|
-
__slots__ = ()
|
|
21
|
-
|
|
22
|
-
string: str
|
|
23
|
-
data: tuple[int]
|
|
24
|
-
major: int
|
|
25
|
-
minor: int
|
|
26
|
-
micro: int
|
|
27
|
-
patch: int
|
|
28
|
-
|
|
29
|
-
@setdoc.basic
|
|
30
|
-
def __delitem__(self: Self, key: Any) -> bool:
|
|
31
|
-
self._data = deleting.delitem(self._data, key)
|
|
32
|
-
|
|
33
|
-
@setdoc.basic
|
|
34
|
-
def __getitem__(self: Self, key: Any) -> bool:
|
|
35
|
-
return getting.getitem(self.data, key)
|
|
36
|
-
|
|
37
|
-
@Overloadable
|
|
38
|
-
@setdoc.basic
|
|
39
|
-
def __setitem__(self: Self, key: Any, value: Any) -> bool:
|
|
40
|
-
return type(key) is slice
|
|
41
|
-
|
|
42
|
-
@__setitem__.overload(False)
|
|
43
|
-
@setdoc.basic
|
|
44
|
-
def __setitem__(self: Self, key: SupportsIndex, value: Any) -> Any:
|
|
45
|
-
i: int = operator.index(key)
|
|
46
|
-
self._setitem_int(i, value)
|
|
47
|
-
|
|
48
|
-
@__setitem__.overload(True)
|
|
49
|
-
@setdoc.basic
|
|
50
|
-
def __setitem__(self: Self, key: SupportsIndex, value: Any) -> Any:
|
|
51
|
-
k: range = releaseparse.torange(key, len(self))
|
|
52
|
-
self._setitem_range(k, value)
|
|
53
|
-
|
|
54
|
-
@classmethod
|
|
55
|
-
def _data_parse(cls: type, value: list) -> Iterable:
|
|
56
|
-
v: list = releaseparse.tolist(value, slicing="always")
|
|
57
|
-
while v and v[-1] == 0:
|
|
58
|
-
v.pop()
|
|
59
|
-
return v
|
|
60
|
-
|
|
61
|
-
def _format(self: Self, format_spec: str) -> str:
|
|
62
|
-
i: Optional[int]
|
|
63
|
-
if format_spec:
|
|
64
|
-
i = int(format_spec)
|
|
65
|
-
else:
|
|
66
|
-
i = None
|
|
67
|
-
l: list = self[:i]
|
|
68
|
-
if len(l) == 0:
|
|
69
|
-
l += [0]
|
|
70
|
-
l = list(map(str, l))
|
|
71
|
-
ans: str = ".".join(l)
|
|
72
|
-
return ans
|
|
73
|
-
|
|
74
|
-
def _setitem_int(self: Self, key: int, value: Any) -> Any:
|
|
75
|
-
v: int = releaseparse.numeral(value)
|
|
76
|
-
if key < len(self):
|
|
77
|
-
data = list(self.data)
|
|
78
|
-
data[key] = v
|
|
79
|
-
self.data = data
|
|
80
|
-
return
|
|
81
|
-
if v == 0:
|
|
82
|
-
return
|
|
83
|
-
self._data += (0,) * (key - len(self))
|
|
84
|
-
self._data += (v,)
|
|
85
|
-
|
|
86
|
-
@Overloadable
|
|
87
|
-
def _setitem_range(self: Self, key: range, value: Any) -> bool:
|
|
88
|
-
return key.step == 1
|
|
89
|
-
|
|
90
|
-
@_setitem_range.overload(False)
|
|
91
|
-
def _setitem_range(self: Self, key: range, value: Any) -> Any:
|
|
92
|
-
key: list = list(key)
|
|
93
|
-
value: list = releaseparse.tolist(value, slicing=len(key))
|
|
94
|
-
if len(key) != len(value):
|
|
95
|
-
e = "attempt to assign sequence of size %s to extended slice of size %s"
|
|
96
|
-
e %= (len(value), len(key))
|
|
97
|
-
raise ValueError(e)
|
|
98
|
-
ext: int = max(0, max(*key) + 1 - len(self))
|
|
99
|
-
data: list = list(self.data)
|
|
100
|
-
data += [0] * ext
|
|
101
|
-
for k, v in zip(key, value):
|
|
102
|
-
data[k] = v
|
|
103
|
-
self.data = data
|
|
104
|
-
|
|
105
|
-
@_setitem_range.overload(True)
|
|
106
|
-
def _setitem_range(self: Self, key: range, value: Any) -> Any:
|
|
107
|
-
data: list = list(self.data)
|
|
108
|
-
ext: int = max(0, key.start - len(data))
|
|
109
|
-
data += ext * [0]
|
|
110
|
-
l: list = releaseparse.tolist(value, slicing="always")
|
|
111
|
-
data = data[: key.start] + l + data[key.stop :]
|
|
112
|
-
self.data = data
|
|
113
|
-
|
|
114
|
-
@classmethod
|
|
115
|
-
def _sort(cls: type, value: int) -> int:
|
|
116
|
-
return value
|
|
117
|
-
|
|
118
|
-
def _string_fset(self: Self, value: str) -> None:
|
|
119
|
-
if value == "":
|
|
120
|
-
self.data = ()
|
|
121
|
-
return
|
|
122
|
-
v: str = value
|
|
123
|
-
v = v.replace("_", ".")
|
|
124
|
-
v = v.replace("-", ".")
|
|
125
|
-
self.data = v.split(".")
|
|
126
|
-
|
|
127
|
-
def bump(self: Self, index: SupportsIndex = -1, amount: SupportsIndex = 1) -> None:
|
|
128
|
-
i: int = operator.index(index)
|
|
129
|
-
a: int = operator.index(amount)
|
|
130
|
-
x: int = getting.getitem_int(self.data, i) + a
|
|
131
|
-
self._setitem_int(i, x)
|
|
132
|
-
if i != -1:
|
|
133
|
-
self.data = self.data[: i + 1]
|
|
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
|
|
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
|