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.
Files changed (46) hide show
  1. {v440-2.0.0.dev88/src/v440.egg-info → v440-2.0.0.dev90}/PKG-INFO +1 -1
  2. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/pyproject.toml +1 -1
  3. v440-2.0.0.dev90/src/v440/_utils/releaseparse/setting.py +71 -0
  4. v440-2.0.0.dev90/src/v440/core/Release.py +78 -0
  5. {v440-2.0.0.dev88 → v440-2.0.0.dev90/src/v440.egg-info}/PKG-INFO +1 -1
  6. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440.egg-info/SOURCES.txt +1 -0
  7. v440-2.0.0.dev88/src/v440/core/Release.py +0 -133
  8. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/LICENSE.txt +0 -0
  9. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/MANIFEST.in +0 -0
  10. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/README.rst +0 -0
  11. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/setup.cfg +0 -0
  12. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/__init__.py +0 -0
  13. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/BaseStringer.py +0 -0
  14. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/Cfg.py +0 -0
  15. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/ListStringer.py +0 -0
  16. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/Pattern.py +0 -0
  17. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/SlotStringer.py +0 -0
  18. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/__init__.py +0 -0
  19. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/cfg.toml +0 -0
  20. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/guarding.py +0 -0
  21. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/Digest.py +0 -0
  22. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/__init__.py +0 -0
  23. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/devs.py +0 -0
  24. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/posts.py +0 -0
  25. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/pres.py +0 -0
  26. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/qualparse/segmenting.py +0 -0
  27. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/__init__.py +0 -0
  28. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/deleting.py +0 -0
  29. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/getting.py +0 -0
  30. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/listing.py +0 -0
  31. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/numerals.py +0 -0
  32. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/_utils/releaseparse/ranging.py +0 -0
  33. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Base.py +0 -0
  34. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Local.py +0 -0
  35. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Public.py +0 -0
  36. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Qual.py +0 -0
  37. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/Version.py +0 -0
  38. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/VersionError.py +0 -0
  39. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/core/__init__.py +0 -0
  40. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/tests/__init__.py +0 -0
  41. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/tests/test_testdata.py +0 -0
  42. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/tests/test_version.py +0 -0
  43. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440/tests/testdata.toml +0 -0
  44. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440.egg-info/dependency_links.txt +0 -0
  45. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440.egg-info/requires.txt +0 -0
  46. {v440-2.0.0.dev88 → v440-2.0.0.dev90}/src/v440.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: v440
3
- Version: 2.0.0.dev88
3
+ Version: 2.0.0.dev90
4
4
  Summary: This project provides mutable version objects in accordance with PEP440.
5
5
  Author-email: Johannes <johannes.programming@gmail.com>
6
6
  License: The MIT License (MIT)
@@ -36,7 +36,7 @@ keywords = []
36
36
  name = "v440"
37
37
  readme = "README.rst"
38
38
  requires-python = ">=3.11"
39
- version = "2.0.0.dev88"
39
+ version = "2.0.0.dev90"
40
40
 
41
41
  [project.license]
42
42
  file = "LICENSE.txt"
@@ -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]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: v440
3
- Version: 2.0.0.dev88
3
+ Version: 2.0.0.dev90
4
4
  Summary: This project provides mutable version objects in accordance with PEP440.
5
5
  Author-email: Johannes <johannes.programming@gmail.com>
6
6
  License: The MIT License (MIT)
@@ -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