v440 2.0.0.dev81__tar.gz → 2.0.0.dev83__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 (44) hide show
  1. {v440-2.0.0.dev81/src/v440.egg-info → v440-2.0.0.dev83}/PKG-INFO +1 -1
  2. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/pyproject.toml +1 -1
  3. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/ListStringer.py +84 -85
  4. v440-2.0.0.dev83/src/v440/_utils/qualparse/__init__.py +3 -0
  5. v440-2.0.0.dev83/src/v440/_utils/qualparse/devs.py +48 -0
  6. v440-2.0.0.dev83/src/v440/_utils/qualparse/posts.py +52 -0
  7. v440-2.0.0.dev83/src/v440/_utils/qualparse/pres.py +44 -0
  8. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/qualparse/segmenting.py +1 -1
  9. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Base.py +0 -1
  10. {v440-2.0.0.dev81 → v440-2.0.0.dev83/src/v440.egg-info}/PKG-INFO +1 -1
  11. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440.egg-info/SOURCES.txt +4 -2
  12. v440-2.0.0.dev81/src/v440/_utils/qualparse/__init__.py +0 -132
  13. v440-2.0.0.dev81/src/v440/_utils/qualparse.py +0 -132
  14. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/LICENSE.txt +0 -0
  15. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/MANIFEST.in +0 -0
  16. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/README.rst +0 -0
  17. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/setup.cfg +0 -0
  18. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/__init__.py +0 -0
  19. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/BaseStringer.py +0 -0
  20. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/Cfg.py +0 -0
  21. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/Pattern.py +0 -0
  22. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/SlotStringer.py +0 -0
  23. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/__init__.py +0 -0
  24. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/cfg.toml +0 -0
  25. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/guarding.py +0 -0
  26. {v440-2.0.0.dev81/src/v440/_utils → v440-2.0.0.dev83/src/v440/_utils/qualparse}/Digest.py +0 -0
  27. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/releaseparse/__init__.py +0 -0
  28. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/releaseparse/listing.py +0 -0
  29. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/releaseparse/numerals.py +0 -0
  30. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/_utils/releaseparse/ranging.py +0 -0
  31. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Local.py +0 -0
  32. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Public.py +0 -0
  33. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Qual.py +0 -0
  34. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Release.py +0 -0
  35. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/Version.py +0 -0
  36. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/VersionError.py +0 -0
  37. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/core/__init__.py +0 -0
  38. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/tests/__init__.py +0 -0
  39. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/tests/test_testdata.py +0 -0
  40. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/tests/test_version.py +0 -0
  41. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440/tests/testdata.toml +0 -0
  42. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440.egg-info/dependency_links.txt +0 -0
  43. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/src/v440.egg-info/requires.txt +0 -0
  44. {v440-2.0.0.dev81 → v440-2.0.0.dev83}/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.dev81
3
+ Version: 2.0.0.dev83
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.dev81"
39
+ version = "2.0.0.dev83"
40
40
 
41
41
  [project.license]
42
42
  file = "LICENSE.txt"
@@ -26,12 +26,20 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
26
26
  def __bool__(self: Self) -> bool:
27
27
  return bool(self.data)
28
28
 
29
+ @setdoc.basic
30
+ def __contains__(self: Self, other: Any) -> bool:
31
+ return other in self.data
32
+
29
33
  @setdoc.basic
30
34
  def __delitem__(self: Self, key: Any) -> None:
31
35
  data: list = list(self.data)
32
36
  del data[key]
33
37
  self.data = data
34
38
 
39
+ @setdoc.basic
40
+ def __getitem__(self: Self, key: Any) -> Any:
41
+ return self.data[key]
42
+
35
43
  @setdoc.basic
36
44
  def __iadd__(self: Self, other: Any, /) -> Self:
37
45
  self.data = self.data + tuple(other)
@@ -42,6 +50,35 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
42
50
  self.data = self.data * other
43
51
  return self
44
52
 
53
+ @Overloadable
54
+ @setdoc.basic
55
+ def __init__(self: Self, *args: Any, **kwargs: Any) -> bool:
56
+ if len(args) == 0 and "string" in kwargs.keys():
57
+ return True
58
+ if len(args) == 1 and len(kwargs) == 0:
59
+ if isinstance(args[0], str):
60
+ return True
61
+ if hasattr(args[0], "__iter__"):
62
+ return False
63
+ return True
64
+ return False
65
+
66
+ @__init__.overload(True)
67
+ @setdoc.basic
68
+ def __init__(self: Self, string: Any) -> None:
69
+ self._init_setup()
70
+ self.string = string
71
+
72
+ @__init__.overload(False)
73
+ @setdoc.basic
74
+ def __init__(self: Self, data: Iterable = ()) -> None:
75
+ self._init_setup()
76
+ self.data = data
77
+
78
+ @setdoc.basic
79
+ def __iter__(self: Self) -> Iterator:
80
+ return iter(self.data)
81
+
45
82
  @setdoc.basic
46
83
  def __len__(self: Self) -> int:
47
84
  return len(self.data)
@@ -50,13 +87,42 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
50
87
  def __mul__(self: Self, other: Any) -> Self:
51
88
  return type(self)(self.data * other)
52
89
 
90
+ @setdoc.basic
91
+ def __repr__(self: Self) -> str:
92
+ return datarepr(type(self).__name__, self.data)
93
+
94
+ @setdoc.basic
95
+ def __reversed__(self: Self) -> reversed:
96
+ return reversed(self.data)
97
+
53
98
  @setdoc.basic
54
99
  def __rmul__(self: Self, other: Any) -> Self:
55
100
  return self * other
56
101
 
102
+ @setdoc.basic
103
+ def __setitem__(self: Self, key: Any, value: Any) -> None:
104
+ data: list = list(self.data)
105
+ data[key] = value
106
+ self.data = data
107
+
57
108
  def _cmp(self: Self) -> tuple:
58
109
  return tuple(map(self._sort, self.data))
59
110
 
111
+ @classmethod
112
+ @abstractmethod
113
+ def _data_parse(cls: type, value: list) -> Iterable: ...
114
+
115
+ def _init_setup(self: Self) -> None:
116
+ self._data = ()
117
+
118
+ def _set(self: Self, value: Any) -> None:
119
+ if isinstance(value, str):
120
+ self.string = value
121
+ elif hasattr(value, "__iter__"):
122
+ self.data = value
123
+ else:
124
+ self.string = value
125
+
60
126
  @classmethod
61
127
  @abstractmethod
62
128
  def _sort(cls: type, value: Any): ...
@@ -74,12 +140,30 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
74
140
  "This method clears the data."
75
141
  self.data = ()
76
142
 
143
+ def count(self: Self, value: Any) -> int:
144
+ "This method counts the occurences of value."
145
+ return self.data.count(value)
146
+
147
+ @property
148
+ @setdoc.basic
149
+ def data(self: Self) -> tuple:
150
+ return self._data
151
+
152
+ @data.setter
153
+ @guard
154
+ def data(self: Self, value: Iterable) -> None:
155
+ self._data = tuple(self._data_parse(list(value)))
156
+
77
157
  def extend(self: Self, value: Self, /) -> None:
78
158
  "This method extends self by value."
79
159
  data: list = list(self.data)
80
160
  data.extend(value)
81
161
  self.data = data
82
162
 
163
+ def index(self: Self, *args: Any) -> None:
164
+ "This method returns the index of the first occurence."
165
+ return self.data.index(*args)
166
+
83
167
  def insert(
84
168
  self: Self,
85
169
  index: SupportsIndex,
@@ -117,88 +201,3 @@ class ListStringer(BaseStringer, collections.abc.MutableSequence):
117
201
  r: bool = bool(reverse)
118
202
  data.sort(key=k, reverse=r)
119
203
  self.data = data
120
-
121
- # data-associated
122
- @setdoc.basic
123
- def __contains__(self: Self, other: Any) -> bool:
124
- return other in self.data
125
-
126
- @setdoc.basic
127
- def __getitem__(self: Self, key: Any) -> Any:
128
- return self.data[key]
129
-
130
- @Overloadable
131
- @setdoc.basic
132
- def __init__(self: Self, *args: Any, **kwargs: Any) -> bool:
133
- if len(args) == 0 and "string" in kwargs.keys():
134
- return True
135
- if len(args) == 1 and len(kwargs) == 0:
136
- if isinstance(args[0], str):
137
- return True
138
- if hasattr(args[0], "__iter__"):
139
- return False
140
- return True
141
- return False
142
-
143
- @__init__.overload(True)
144
- @setdoc.basic
145
- def __init__(self: Self, string: Any) -> None:
146
- self._init_setup()
147
- self.string = string
148
-
149
- @__init__.overload(False)
150
- @setdoc.basic
151
- def __init__(self: Self, data: Iterable = ()) -> None:
152
- self._init_setup()
153
- self.data = data
154
-
155
- @setdoc.basic
156
- def __iter__(self: Self) -> Iterator:
157
- return iter(self.data)
158
-
159
- @setdoc.basic
160
- def __repr__(self: Self) -> str:
161
- return datarepr(type(self).__name__, *self.data)
162
-
163
- @setdoc.basic
164
- def __reversed__(self: Self) -> reversed:
165
- return reversed(self.data)
166
-
167
- @setdoc.basic
168
- def __setitem__(self: Self, key: Any, value: Any) -> None:
169
- data: list = list(self.data)
170
- data[key] = value
171
- self.data = data
172
-
173
- @classmethod
174
- @abstractmethod
175
- def _data_parse(cls: type, value: list) -> Iterable: ...
176
-
177
- def _init_setup(self: Self) -> None:
178
- self._data = ()
179
-
180
- def _set(self: Self, value: Any) -> None:
181
- if isinstance(value, str):
182
- self.string = value
183
- elif hasattr(value, "__iter__"):
184
- self.data = value
185
- else:
186
- self.string = value
187
-
188
- @property
189
- @setdoc.basic
190
- def data(self: Self) -> tuple:
191
- return self._data
192
-
193
- @data.setter
194
- @guard
195
- def data(self: Self, value: Iterable) -> None:
196
- self._data = tuple(self._data_parse(list(value)))
197
-
198
- def count(self: Self, value: Any) -> int:
199
- "This method counts the occurences of value."
200
- return self.data.count(value)
201
-
202
- def index(self: Self, *args: Any) -> None:
203
- "This method returns the index of the first occurence."
204
- return self.data.index(*args)
@@ -0,0 +1,3 @@
1
+ from v440._utils.qualparse.devs import parse_dev
2
+ from v440._utils.qualparse.posts import parse_post
3
+ from v440._utils.qualparse.pres import parse_pre
@@ -0,0 +1,48 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import *
4
+
5
+ from v440._utils.Pattern import Pattern
6
+ from v440._utils.qualparse import segmenting
7
+ from v440._utils.qualparse.Digest import Digest
8
+
9
+ parse_dev: Digest = Digest("parse_dev")
10
+
11
+
12
+ @parse_dev.overload()
13
+ def parse_dev() -> None:
14
+ return
15
+
16
+
17
+ @parse_dev.overload(int)
18
+ def parse_dev(value: int) -> int:
19
+ if value < 0:
20
+ raise ValueError
21
+ return value
22
+
23
+
24
+ @parse_dev.overload(list)
25
+ def parse_dev(value: list) -> Optional[int]:
26
+ x: Any
27
+ y: Any
28
+ x, y = map(segmenting.segment, value)
29
+ if x != "dev":
30
+ raise ValueError
31
+ if isinstance(y, str):
32
+ raise TypeError
33
+ return y
34
+
35
+
36
+ @parse_dev.overload(str)
37
+ def parse_dev(value: str) -> Optional[int]:
38
+ v: str = value
39
+ v = v.replace("_", ".")
40
+ v = v.replace("-", ".")
41
+ m: Any = Pattern.PARSER.bound.search(v)
42
+ x: Any
43
+ y: Any
44
+ x, y = m.groups()
45
+ if x not in (None, "dev"):
46
+ raise ValueError
47
+ if y is not None:
48
+ return int(y)
@@ -0,0 +1,52 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import *
4
+
5
+ from v440._utils.Pattern import Pattern
6
+ from v440._utils.qualparse import segmenting
7
+ from v440._utils.qualparse.Digest import Digest
8
+
9
+ parse_post: Digest = Digest("parse_post")
10
+
11
+
12
+ @parse_post.overload()
13
+ def parse_post() -> None:
14
+ return
15
+
16
+
17
+ @parse_post.overload(int)
18
+ def parse_post(value: int) -> int:
19
+ if value < 0:
20
+ raise ValueError
21
+ return value
22
+
23
+
24
+ @parse_post.overload(list)
25
+ def parse_post(value: list) -> Optional[int]:
26
+ v: list = list(map(segmenting.segment, value))
27
+ if len(v) == 0:
28
+ raise ValueError
29
+ if len(v) > 2:
30
+ raise ValueError
31
+ if len(v) == 1:
32
+ v.insert(0, "")
33
+ if v[0] not in ("post", "rev", "r", ""):
34
+ raise ValueError
35
+ if isinstance(v[1], str):
36
+ raise TypeError
37
+ return v[1]
38
+
39
+
40
+ @parse_post.overload(str)
41
+ def parse_post(value: str) -> Optional[int]:
42
+ v: str = value
43
+ v = v.replace("_", ".")
44
+ v = v.replace("-", ".")
45
+ m: Any = Pattern.PARSER.bound.search(v)
46
+ x: Any
47
+ y: Any
48
+ x, y = m.groups()
49
+ if x not in (None, "post", "rev", "r"):
50
+ raise ValueError
51
+ if y is not None:
52
+ return int(y)
@@ -0,0 +1,44 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import *
4
+
5
+ from v440._utils.Cfg import Cfg
6
+ from v440._utils.Pattern import Pattern
7
+ from v440._utils.qualparse import segmenting
8
+ from v440._utils.qualparse.Digest import Digest
9
+
10
+ parse_pre: Digest = Digest("parse_pre")
11
+
12
+
13
+ @parse_pre.overload()
14
+ def parse_pre() -> tuple:
15
+ return None, None
16
+
17
+
18
+ @parse_pre.overload(list)
19
+ def parse_pre(value: list) -> tuple:
20
+ x: Any
21
+ y: Any
22
+ x, y = map(segmenting.segment, value)
23
+ if (x, y) == (None, None):
24
+ return None, None
25
+ x = Cfg.cfg.data["phases"][x]
26
+ if not isinstance(y, int):
27
+ raise TypeError
28
+ return x, y
29
+
30
+
31
+ @parse_pre.overload(str)
32
+ def parse_pre(value: str) -> tuple:
33
+ if value == "":
34
+ return [None, None]
35
+ v: str = value
36
+ v = v.replace("_", ".")
37
+ v = v.replace("-", ".")
38
+ m: Any = Pattern.PARSER.bound.search(v)
39
+ l: Any
40
+ n: Any
41
+ l, n = m.groups()
42
+ l = Cfg.cfg.data["phases"][l]
43
+ n = 0 if (n is None) else int(n)
44
+ return l, n
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import string
4
4
  from typing import *
5
5
 
6
- from v440._utils.Digest import Digest
6
+ from v440._utils.qualparse.Digest import Digest
7
7
  from v440.core.VersionError import VersionError
8
8
 
9
9
 
@@ -5,7 +5,6 @@ from typing import *
5
5
  import setdoc
6
6
  from overloadable import Overloadable
7
7
 
8
- from v440._utils.Digest import Digest
9
8
  from v440._utils.guarding import guard
10
9
  from v440._utils.SlotStringer import SlotStringer
11
10
  from v440.core.Release import Release
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: v440
3
- Version: 2.0.0.dev81
3
+ Version: 2.0.0.dev83
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)
@@ -11,15 +11,17 @@ src/v440.egg-info/requires.txt
11
11
  src/v440.egg-info/top_level.txt
12
12
  src/v440/_utils/BaseStringer.py
13
13
  src/v440/_utils/Cfg.py
14
- src/v440/_utils/Digest.py
15
14
  src/v440/_utils/ListStringer.py
16
15
  src/v440/_utils/Pattern.py
17
16
  src/v440/_utils/SlotStringer.py
18
17
  src/v440/_utils/__init__.py
19
18
  src/v440/_utils/cfg.toml
20
19
  src/v440/_utils/guarding.py
21
- src/v440/_utils/qualparse.py
20
+ src/v440/_utils/qualparse/Digest.py
22
21
  src/v440/_utils/qualparse/__init__.py
22
+ src/v440/_utils/qualparse/devs.py
23
+ src/v440/_utils/qualparse/posts.py
24
+ src/v440/_utils/qualparse/pres.py
23
25
  src/v440/_utils/qualparse/segmenting.py
24
26
  src/v440/_utils/releaseparse/__init__.py
25
27
  src/v440/_utils/releaseparse/listing.py
@@ -1,132 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import *
4
-
5
- from v440._utils.Cfg import Cfg
6
- from v440._utils.Digest import Digest
7
- from v440._utils.Pattern import Pattern
8
- from v440._utils.qualparse import segmenting
9
-
10
- parse_dev: Digest = Digest("parse_dev")
11
-
12
-
13
- @parse_dev.overload()
14
- def parse_dev() -> None:
15
- return
16
-
17
-
18
- @parse_dev.overload(int)
19
- def parse_dev(value: int) -> int:
20
- if value < 0:
21
- raise ValueError
22
- return value
23
-
24
-
25
- @parse_dev.overload(list)
26
- def parse_dev(value: list) -> Optional[int]:
27
- x: Any
28
- y: Any
29
- x, y = map(segmenting.segment, value)
30
- if x != "dev":
31
- raise ValueError
32
- if isinstance(y, str):
33
- raise TypeError
34
- return y
35
-
36
-
37
- @parse_dev.overload(str)
38
- def parse_dev(value: str) -> Optional[int]:
39
- v: str = value
40
- v = v.replace("_", ".")
41
- v = v.replace("-", ".")
42
- m: Any = Pattern.PARSER.bound.search(v)
43
- x: Any
44
- y: Any
45
- x, y = m.groups()
46
- if x not in (None, "dev"):
47
- raise ValueError
48
- if y is not None:
49
- return int(y)
50
-
51
-
52
- parse_post: Digest = Digest("parse_post")
53
-
54
-
55
- @parse_post.overload()
56
- def parse_post() -> None:
57
- return
58
-
59
-
60
- @parse_post.overload(int)
61
- def parse_post(value: int) -> int:
62
- if value < 0:
63
- raise ValueError
64
- return value
65
-
66
-
67
- @parse_post.overload(list)
68
- def parse_post(value: list) -> Optional[int]:
69
- v: list = list(map(segmenting.segment, value))
70
- if len(v) == 0:
71
- raise ValueError
72
- if len(v) > 2:
73
- raise ValueError
74
- if len(v) == 1:
75
- v.insert(0, "")
76
- if v[0] not in ("post", "rev", "r", ""):
77
- raise ValueError
78
- if isinstance(v[1], str):
79
- raise TypeError
80
- return v[1]
81
-
82
-
83
- @parse_post.overload(str)
84
- def parse_post(value: str) -> Optional[int]:
85
- v: str = value
86
- v = v.replace("_", ".")
87
- v = v.replace("-", ".")
88
- m: Any = Pattern.PARSER.bound.search(v)
89
- x: Any
90
- y: Any
91
- x, y = m.groups()
92
- if x not in (None, "post", "rev", "r"):
93
- raise ValueError
94
- if y is not None:
95
- return int(y)
96
-
97
-
98
- parse_pre: Digest = Digest("parse_pre")
99
-
100
-
101
- @parse_pre.overload()
102
- def parse_pre() -> tuple:
103
- return None, None
104
-
105
-
106
- @parse_pre.overload(list)
107
- def parse_pre(value: list) -> tuple:
108
- x: Any
109
- y: Any
110
- x, y = map(segmenting.segment, value)
111
- if (x, y) == (None, None):
112
- return None, None
113
- x = Cfg.cfg.data["phases"][x]
114
- if not isinstance(y, int):
115
- raise TypeError
116
- return x, y
117
-
118
-
119
- @parse_pre.overload(str)
120
- def parse_pre(value: str) -> tuple:
121
- if value == "":
122
- return [None, None]
123
- v: str = value
124
- v = v.replace("_", ".")
125
- v = v.replace("-", ".")
126
- m: Any = Pattern.PARSER.bound.search(v)
127
- l: Any
128
- n: Any
129
- l, n = m.groups()
130
- l = Cfg.cfg.data["phases"][l]
131
- n = 0 if (n is None) else int(n)
132
- return l, n
@@ -1,132 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import *
4
-
5
- from v440._utils import segmenting
6
- from v440._utils.Cfg import Cfg
7
- from v440._utils.Digest import Digest
8
- from v440._utils.Pattern import Pattern
9
-
10
- parse_dev: Digest = Digest("parse_dev")
11
-
12
-
13
- @parse_dev.overload()
14
- def parse_dev() -> None:
15
- return
16
-
17
-
18
- @parse_dev.overload(int)
19
- def parse_dev(value: int) -> int:
20
- if value < 0:
21
- raise ValueError
22
- return value
23
-
24
-
25
- @parse_dev.overload(list)
26
- def parse_dev(value: list) -> Optional[int]:
27
- x: Any
28
- y: Any
29
- x, y = map(segmenting.segment, value)
30
- if x != "dev":
31
- raise ValueError
32
- if isinstance(y, str):
33
- raise TypeError
34
- return y
35
-
36
-
37
- @parse_dev.overload(str)
38
- def parse_dev(value: str) -> Optional[int]:
39
- v: str = value
40
- v = v.replace("_", ".")
41
- v = v.replace("-", ".")
42
- m: Any = Pattern.PARSER.bound.search(v)
43
- x: Any
44
- y: Any
45
- x, y = m.groups()
46
- if x not in (None, "dev"):
47
- raise ValueError
48
- if y is not None:
49
- return int(y)
50
-
51
-
52
- parse_post: Digest = Digest("parse_post")
53
-
54
-
55
- @parse_post.overload()
56
- def parse_post() -> None:
57
- return
58
-
59
-
60
- @parse_post.overload(int)
61
- def parse_post(value: int) -> int:
62
- if value < 0:
63
- raise ValueError
64
- return value
65
-
66
-
67
- @parse_post.overload(list)
68
- def parse_post(value: list) -> Optional[int]:
69
- v: list = list(map(segmenting.segment, value))
70
- if len(v) == 0:
71
- raise ValueError
72
- if len(v) > 2:
73
- raise ValueError
74
- if len(v) == 1:
75
- v.insert(0, "")
76
- if v[0] not in ("post", "rev", "r", ""):
77
- raise ValueError
78
- if isinstance(v[1], str):
79
- raise TypeError
80
- return v[1]
81
-
82
-
83
- @parse_post.overload(str)
84
- def parse_post(value: str) -> Optional[int]:
85
- v: str = value
86
- v = v.replace("_", ".")
87
- v = v.replace("-", ".")
88
- m: Any = Pattern.PARSER.bound.search(v)
89
- x: Any
90
- y: Any
91
- x, y = m.groups()
92
- if x not in (None, "post", "rev", "r"):
93
- raise ValueError
94
- if y is not None:
95
- return int(y)
96
-
97
-
98
- parse_pre: Digest = Digest("parse_pre")
99
-
100
-
101
- @parse_pre.overload()
102
- def parse_pre() -> tuple:
103
- return None, None
104
-
105
-
106
- @parse_pre.overload(list)
107
- def parse_pre(value: list) -> tuple:
108
- x: Any
109
- y: Any
110
- x, y = map(segmenting.segment, value)
111
- if (x, y) == (None, None):
112
- return None, None
113
- x = Cfg.cfg.data["phases"][x]
114
- if not isinstance(y, int):
115
- raise TypeError
116
- return x, y
117
-
118
-
119
- @parse_pre.overload(str)
120
- def parse_pre(value: str) -> tuple:
121
- if value == "":
122
- return [None, None]
123
- v: str = value
124
- v = v.replace("_", ".")
125
- v = v.replace("-", ".")
126
- m: Any = Pattern.PARSER.bound.search(v)
127
- l: Any
128
- n: Any
129
- l, n = m.groups()
130
- l = Cfg.cfg.data["phases"][l]
131
- n = 0 if (n is None) else int(n)
132
- return l, n
File without changes
File without changes
File without changes
File without changes