omdev 0.0.0.dev7__py3-none-any.whl
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.
- omdev/__about__.py +35 -0
- omdev/__init__.py +0 -0
- omdev/amalg/__init__.py +0 -0
- omdev/amalg/__main__.py +4 -0
- omdev/amalg/amalg.py +513 -0
- omdev/classdot.py +61 -0
- omdev/cmake.py +164 -0
- omdev/exts/__init__.py +0 -0
- omdev/exts/_distutils/__init__.py +10 -0
- omdev/exts/_distutils/build_ext.py +367 -0
- omdev/exts/_distutils/compilers/__init__.py +3 -0
- omdev/exts/_distutils/compilers/ccompiler.py +1032 -0
- omdev/exts/_distutils/compilers/options.py +80 -0
- omdev/exts/_distutils/compilers/unixccompiler.py +385 -0
- omdev/exts/_distutils/dir_util.py +76 -0
- omdev/exts/_distutils/errors.py +62 -0
- omdev/exts/_distutils/extension.py +107 -0
- omdev/exts/_distutils/file_util.py +216 -0
- omdev/exts/_distutils/modified.py +47 -0
- omdev/exts/_distutils/spawn.py +103 -0
- omdev/exts/_distutils/sysconfig.py +349 -0
- omdev/exts/_distutils/util.py +201 -0
- omdev/exts/_distutils/version.py +308 -0
- omdev/exts/build.py +43 -0
- omdev/exts/cmake.py +195 -0
- omdev/exts/importhook.py +88 -0
- omdev/exts/scan.py +74 -0
- omdev/interp/__init__.py +1 -0
- omdev/interp/__main__.py +4 -0
- omdev/interp/cli.py +63 -0
- omdev/interp/inspect.py +105 -0
- omdev/interp/providers.py +67 -0
- omdev/interp/pyenv.py +353 -0
- omdev/interp/resolvers.py +76 -0
- omdev/interp/standalone.py +187 -0
- omdev/interp/system.py +125 -0
- omdev/interp/types.py +92 -0
- omdev/mypy/__init__.py +0 -0
- omdev/mypy/debug.py +86 -0
- omdev/pyproject/__init__.py +1 -0
- omdev/pyproject/__main__.py +4 -0
- omdev/pyproject/cli.py +319 -0
- omdev/pyproject/configs.py +97 -0
- omdev/pyproject/ext.py +107 -0
- omdev/pyproject/pkg.py +196 -0
- omdev/scripts/__init__.py +0 -0
- omdev/scripts/execrss.py +19 -0
- omdev/scripts/findimports.py +62 -0
- omdev/scripts/findmagic.py +70 -0
- omdev/scripts/interp.py +2118 -0
- omdev/scripts/pyproject.py +3584 -0
- omdev/scripts/traceimport.py +502 -0
- omdev/tokens.py +42 -0
- omdev/toml/__init__.py +1 -0
- omdev/toml/parser.py +823 -0
- omdev/toml/writer.py +104 -0
- omdev/tools/__init__.py +0 -0
- omdev/tools/dockertools.py +81 -0
- omdev/tools/sqlrepl.py +193 -0
- omdev/versioning/__init__.py +1 -0
- omdev/versioning/specifiers.py +531 -0
- omdev/versioning/versions.py +416 -0
- omdev-0.0.0.dev7.dist-info/LICENSE +21 -0
- omdev-0.0.0.dev7.dist-info/METADATA +24 -0
- omdev-0.0.0.dev7.dist-info/RECORD +67 -0
- omdev-0.0.0.dev7.dist-info/WHEEL +5 -0
- omdev-0.0.0.dev7.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
# Copyright (c) Donald Stufft and individual contributors.
|
|
2
|
+
# All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
|
5
|
+
# following conditions are met:
|
|
6
|
+
#
|
|
7
|
+
# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
|
|
8
|
+
# following disclaimer.
|
|
9
|
+
#
|
|
10
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
|
|
11
|
+
# following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
12
|
+
#
|
|
13
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
14
|
+
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
15
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
16
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
17
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
18
|
+
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
19
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This file is dual licensed under the terms of the
|
|
20
|
+
# Apache License, Version 2.0, and the BSD License. See the LICENSE file in the root of this repository for complete
|
|
21
|
+
# details.
|
|
22
|
+
# https://github.com/pypa/packaging/blob/2c885fe91a54559e2382902dce28428ad2887be5/src/packaging/version.py
|
|
23
|
+
# ruff: noqa: UP006 UP007
|
|
24
|
+
import itertools
|
|
25
|
+
import re
|
|
26
|
+
import typing as ta
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
VersionLocalType = ta.Tuple[ta.Union[int, str], ...]
|
|
30
|
+
|
|
31
|
+
VersionCmpPrePostDevType = ta.Union['InfinityVersionType', 'NegativeInfinityVersionType', ta.Tuple[str, int]]
|
|
32
|
+
_VersionCmpLocalType0 = ta.Tuple[ta.Union[ta.Tuple[int, str], ta.Tuple['NegativeInfinityVersionType', ta.Union[int, str]]], ...] # noqa
|
|
33
|
+
VersionCmpLocalType = ta.Union['NegativeInfinityVersionType', _VersionCmpLocalType0]
|
|
34
|
+
VersionCmpKey = ta.Tuple[int, ta.Tuple[int, ...], VersionCmpPrePostDevType, VersionCmpPrePostDevType, VersionCmpPrePostDevType, VersionCmpLocalType] # noqa
|
|
35
|
+
VersionComparisonMethod = ta.Callable[[VersionCmpKey, VersionCmpKey], bool]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class InfinityVersionType:
|
|
42
|
+
def __repr__(self) -> str:
|
|
43
|
+
return 'Infinity'
|
|
44
|
+
|
|
45
|
+
def __hash__(self) -> int:
|
|
46
|
+
return hash(repr(self))
|
|
47
|
+
|
|
48
|
+
def __lt__(self, other: object) -> bool:
|
|
49
|
+
return False
|
|
50
|
+
|
|
51
|
+
def __le__(self, other: object) -> bool:
|
|
52
|
+
return False
|
|
53
|
+
|
|
54
|
+
def __eq__(self, other: object) -> bool:
|
|
55
|
+
return isinstance(other, self.__class__)
|
|
56
|
+
|
|
57
|
+
def __gt__(self, other: object) -> bool:
|
|
58
|
+
return True
|
|
59
|
+
|
|
60
|
+
def __ge__(self, other: object) -> bool:
|
|
61
|
+
return True
|
|
62
|
+
|
|
63
|
+
def __neg__(self: object) -> 'NegativeInfinityVersionType':
|
|
64
|
+
return NegativeInfinityVersion
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
InfinityVersion = InfinityVersionType()
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class NegativeInfinityVersionType:
|
|
71
|
+
def __repr__(self) -> str:
|
|
72
|
+
return '-Infinity'
|
|
73
|
+
|
|
74
|
+
def __hash__(self) -> int:
|
|
75
|
+
return hash(repr(self))
|
|
76
|
+
|
|
77
|
+
def __lt__(self, other: object) -> bool:
|
|
78
|
+
return True
|
|
79
|
+
|
|
80
|
+
def __le__(self, other: object) -> bool:
|
|
81
|
+
return True
|
|
82
|
+
|
|
83
|
+
def __eq__(self, other: object) -> bool:
|
|
84
|
+
return isinstance(other, self.__class__)
|
|
85
|
+
|
|
86
|
+
def __gt__(self, other: object) -> bool:
|
|
87
|
+
return False
|
|
88
|
+
|
|
89
|
+
def __ge__(self, other: object) -> bool:
|
|
90
|
+
return False
|
|
91
|
+
|
|
92
|
+
def __neg__(self: object) -> InfinityVersionType:
|
|
93
|
+
return InfinityVersion
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
NegativeInfinityVersion = NegativeInfinityVersionType()
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
##
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class _Version(ta.NamedTuple):
|
|
103
|
+
epoch: int
|
|
104
|
+
release: ta.Tuple[int, ...]
|
|
105
|
+
dev: ta.Optional[ta.Tuple[str, int]]
|
|
106
|
+
pre: ta.Optional[ta.Tuple[str, int]]
|
|
107
|
+
post: ta.Optional[ta.Tuple[str, int]]
|
|
108
|
+
local: ta.Optional[VersionLocalType]
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class InvalidVersion(ValueError): # noqa
|
|
112
|
+
pass
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class _BaseVersion:
|
|
116
|
+
_key: ta.Tuple[ta.Any, ...]
|
|
117
|
+
|
|
118
|
+
def __hash__(self) -> int:
|
|
119
|
+
return hash(self._key)
|
|
120
|
+
|
|
121
|
+
def __lt__(self, other: '_BaseVersion') -> bool:
|
|
122
|
+
if not isinstance(other, _BaseVersion):
|
|
123
|
+
return NotImplemented # type: ignore
|
|
124
|
+
return self._key < other._key
|
|
125
|
+
|
|
126
|
+
def __le__(self, other: '_BaseVersion') -> bool:
|
|
127
|
+
if not isinstance(other, _BaseVersion):
|
|
128
|
+
return NotImplemented # type: ignore
|
|
129
|
+
return self._key <= other._key
|
|
130
|
+
|
|
131
|
+
def __eq__(self, other: object) -> bool:
|
|
132
|
+
if not isinstance(other, _BaseVersion):
|
|
133
|
+
return NotImplemented
|
|
134
|
+
return self._key == other._key
|
|
135
|
+
|
|
136
|
+
def __ge__(self, other: '_BaseVersion') -> bool:
|
|
137
|
+
if not isinstance(other, _BaseVersion):
|
|
138
|
+
return NotImplemented # type: ignore
|
|
139
|
+
return self._key >= other._key
|
|
140
|
+
|
|
141
|
+
def __gt__(self, other: '_BaseVersion') -> bool:
|
|
142
|
+
if not isinstance(other, _BaseVersion):
|
|
143
|
+
return NotImplemented # type: ignore
|
|
144
|
+
return self._key > other._key
|
|
145
|
+
|
|
146
|
+
def __ne__(self, other: object) -> bool:
|
|
147
|
+
if not isinstance(other, _BaseVersion):
|
|
148
|
+
return NotImplemented
|
|
149
|
+
return self._key != other._key
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
_VERSION_PATTERN = r"""
|
|
153
|
+
v?
|
|
154
|
+
(?:
|
|
155
|
+
(?:(?P<epoch>[0-9]+)!)?
|
|
156
|
+
(?P<release>[0-9]+(?:\.[0-9]+)*)
|
|
157
|
+
(?P<pre>
|
|
158
|
+
[-_\.]?
|
|
159
|
+
(?P<pre_l>alpha|a|beta|b|preview|pre|c|rc)
|
|
160
|
+
[-_\.]?
|
|
161
|
+
(?P<pre_n>[0-9]+)?
|
|
162
|
+
)?
|
|
163
|
+
(?P<post>
|
|
164
|
+
(?:-(?P<post_n1>[0-9]+))
|
|
165
|
+
|
|
|
166
|
+
(?:
|
|
167
|
+
[-_\.]?
|
|
168
|
+
(?P<post_l>post|rev|r)
|
|
169
|
+
[-_\.]?
|
|
170
|
+
(?P<post_n2>[0-9]+)?
|
|
171
|
+
)
|
|
172
|
+
)?
|
|
173
|
+
(?P<dev>
|
|
174
|
+
[-_\.]?
|
|
175
|
+
(?P<dev_l>dev)
|
|
176
|
+
[-_\.]?
|
|
177
|
+
(?P<dev_n>[0-9]+)?
|
|
178
|
+
)?
|
|
179
|
+
)
|
|
180
|
+
(?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?
|
|
181
|
+
"""
|
|
182
|
+
|
|
183
|
+
VERSION_PATTERN = _VERSION_PATTERN
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
class Version(_BaseVersion):
|
|
187
|
+
_regex = re.compile(r'^\s*' + VERSION_PATTERN + r'\s*$', re.VERBOSE | re.IGNORECASE)
|
|
188
|
+
_key: VersionCmpKey
|
|
189
|
+
|
|
190
|
+
def __init__(self, version: str) -> None:
|
|
191
|
+
match = self._regex.search(version)
|
|
192
|
+
if not match:
|
|
193
|
+
raise InvalidVersion(f"Invalid version: '{version}'")
|
|
194
|
+
|
|
195
|
+
self._version = _Version(
|
|
196
|
+
epoch=int(match.group('epoch')) if match.group('epoch') else 0,
|
|
197
|
+
release=tuple(int(i) for i in match.group('release').split('.')),
|
|
198
|
+
pre=_parse_letter_version(match.group('pre_l'), match.group('pre_n')),
|
|
199
|
+
post=_parse_letter_version(match.group('post_l'), match.group('post_n1') or match.group('post_n2')),
|
|
200
|
+
dev=_parse_letter_version(match.group('dev_l'), match.group('dev_n')),
|
|
201
|
+
local=_parse_local_version(match.group('local')),
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
self._key = _version_cmpkey(
|
|
205
|
+
self._version.epoch,
|
|
206
|
+
self._version.release,
|
|
207
|
+
self._version.pre,
|
|
208
|
+
self._version.post,
|
|
209
|
+
self._version.dev,
|
|
210
|
+
self._version.local,
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
def __repr__(self) -> str:
|
|
214
|
+
return f"<Version('{self}')>"
|
|
215
|
+
|
|
216
|
+
def __str__(self) -> str:
|
|
217
|
+
parts = []
|
|
218
|
+
|
|
219
|
+
if self.epoch != 0:
|
|
220
|
+
parts.append(f'{self.epoch}!')
|
|
221
|
+
|
|
222
|
+
parts.append('.'.join(str(x) for x in self.release))
|
|
223
|
+
|
|
224
|
+
if self.pre is not None:
|
|
225
|
+
parts.append(''.join(str(x) for x in self.pre))
|
|
226
|
+
|
|
227
|
+
if self.post is not None:
|
|
228
|
+
parts.append(f'.post{self.post}')
|
|
229
|
+
|
|
230
|
+
if self.dev is not None:
|
|
231
|
+
parts.append(f'.dev{self.dev}')
|
|
232
|
+
|
|
233
|
+
if self.local is not None:
|
|
234
|
+
parts.append(f'+{self.local}')
|
|
235
|
+
|
|
236
|
+
return ''.join(parts)
|
|
237
|
+
|
|
238
|
+
@property
|
|
239
|
+
def epoch(self) -> int:
|
|
240
|
+
return self._version.epoch
|
|
241
|
+
|
|
242
|
+
@property
|
|
243
|
+
def release(self) -> ta.Tuple[int, ...]:
|
|
244
|
+
return self._version.release
|
|
245
|
+
|
|
246
|
+
@property
|
|
247
|
+
def pre(self) -> ta.Optional[ta.Tuple[str, int]]:
|
|
248
|
+
return self._version.pre
|
|
249
|
+
|
|
250
|
+
@property
|
|
251
|
+
def post(self) -> ta.Optional[int]:
|
|
252
|
+
return self._version.post[1] if self._version.post else None
|
|
253
|
+
|
|
254
|
+
@property
|
|
255
|
+
def dev(self) -> ta.Optional[int]:
|
|
256
|
+
return self._version.dev[1] if self._version.dev else None
|
|
257
|
+
|
|
258
|
+
@property
|
|
259
|
+
def local(self) -> ta.Optional[str]:
|
|
260
|
+
if self._version.local:
|
|
261
|
+
return '.'.join(str(x) for x in self._version.local)
|
|
262
|
+
else:
|
|
263
|
+
return None
|
|
264
|
+
|
|
265
|
+
@property
|
|
266
|
+
def public(self) -> str:
|
|
267
|
+
return str(self).split('+', 1)[0]
|
|
268
|
+
|
|
269
|
+
@property
|
|
270
|
+
def base_version(self) -> str:
|
|
271
|
+
parts = []
|
|
272
|
+
|
|
273
|
+
if self.epoch != 0:
|
|
274
|
+
parts.append(f'{self.epoch}!')
|
|
275
|
+
|
|
276
|
+
parts.append('.'.join(str(x) for x in self.release))
|
|
277
|
+
|
|
278
|
+
return ''.join(parts)
|
|
279
|
+
|
|
280
|
+
@property
|
|
281
|
+
def is_prerelease(self) -> bool:
|
|
282
|
+
return self.dev is not None or self.pre is not None
|
|
283
|
+
|
|
284
|
+
@property
|
|
285
|
+
def is_postrelease(self) -> bool:
|
|
286
|
+
return self.post is not None
|
|
287
|
+
|
|
288
|
+
@property
|
|
289
|
+
def is_devrelease(self) -> bool:
|
|
290
|
+
return self.dev is not None
|
|
291
|
+
|
|
292
|
+
@property
|
|
293
|
+
def major(self) -> int:
|
|
294
|
+
return self.release[0] if len(self.release) >= 1 else 0
|
|
295
|
+
|
|
296
|
+
@property
|
|
297
|
+
def minor(self) -> int:
|
|
298
|
+
return self.release[1] if len(self.release) >= 2 else 0
|
|
299
|
+
|
|
300
|
+
@property
|
|
301
|
+
def micro(self) -> int:
|
|
302
|
+
return self.release[2] if len(self.release) >= 3 else 0
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def _parse_letter_version(
|
|
306
|
+
letter: ta.Optional[str],
|
|
307
|
+
number: ta.Union[str, bytes, ta.SupportsInt, None],
|
|
308
|
+
) -> ta.Optional[ta.Tuple[str, int]]:
|
|
309
|
+
if letter:
|
|
310
|
+
if number is None:
|
|
311
|
+
number = 0
|
|
312
|
+
|
|
313
|
+
letter = letter.lower()
|
|
314
|
+
if letter == 'alpha':
|
|
315
|
+
letter = 'a'
|
|
316
|
+
elif letter == 'beta':
|
|
317
|
+
letter = 'b'
|
|
318
|
+
elif letter in ['c', 'pre', 'preview']:
|
|
319
|
+
letter = 'rc'
|
|
320
|
+
elif letter in ['rev', 'r']:
|
|
321
|
+
letter = 'post'
|
|
322
|
+
|
|
323
|
+
return letter, int(number)
|
|
324
|
+
if not letter and number:
|
|
325
|
+
letter = 'post'
|
|
326
|
+
return letter, int(number)
|
|
327
|
+
|
|
328
|
+
return None
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
_local_version_separators = re.compile(r'[\._-]')
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def _parse_local_version(local: ta.Optional[str]) -> ta.Optional[VersionLocalType]:
|
|
335
|
+
if local is not None:
|
|
336
|
+
return tuple(
|
|
337
|
+
part.lower() if not part.isdigit() else int(part)
|
|
338
|
+
for part in _local_version_separators.split(local)
|
|
339
|
+
)
|
|
340
|
+
return None
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
def _version_cmpkey(
|
|
344
|
+
epoch: int,
|
|
345
|
+
release: ta.Tuple[int, ...],
|
|
346
|
+
pre: ta.Optional[ta.Tuple[str, int]],
|
|
347
|
+
post: ta.Optional[ta.Tuple[str, int]],
|
|
348
|
+
dev: ta.Optional[ta.Tuple[str, int]],
|
|
349
|
+
local: ta.Optional[VersionLocalType],
|
|
350
|
+
) -> VersionCmpKey:
|
|
351
|
+
_release = tuple(reversed(list(itertools.dropwhile(lambda x: x == 0, reversed(release)))))
|
|
352
|
+
|
|
353
|
+
if pre is None and post is None and dev is not None:
|
|
354
|
+
_pre: VersionCmpPrePostDevType = NegativeInfinityVersion
|
|
355
|
+
elif pre is None:
|
|
356
|
+
_pre = InfinityVersion
|
|
357
|
+
else:
|
|
358
|
+
_pre = pre
|
|
359
|
+
|
|
360
|
+
if post is None:
|
|
361
|
+
_post: VersionCmpPrePostDevType = NegativeInfinityVersion
|
|
362
|
+
else:
|
|
363
|
+
_post = post
|
|
364
|
+
|
|
365
|
+
if dev is None:
|
|
366
|
+
_dev: VersionCmpPrePostDevType = InfinityVersion
|
|
367
|
+
else:
|
|
368
|
+
_dev = dev
|
|
369
|
+
|
|
370
|
+
if local is None:
|
|
371
|
+
_local: VersionCmpLocalType = NegativeInfinityVersion
|
|
372
|
+
else:
|
|
373
|
+
_local = tuple((i, '') if isinstance(i, int) else (NegativeInfinityVersion, i) for i in local)
|
|
374
|
+
|
|
375
|
+
return epoch, _release, _pre, _post, _dev, _local
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
##
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
def canonicalize_version(
|
|
382
|
+
version: ta.Union[Version, str],
|
|
383
|
+
*,
|
|
384
|
+
strip_trailing_zero: bool = True,
|
|
385
|
+
) -> str:
|
|
386
|
+
if isinstance(version, str):
|
|
387
|
+
try:
|
|
388
|
+
parsed = Version(version)
|
|
389
|
+
except InvalidVersion:
|
|
390
|
+
return version
|
|
391
|
+
else:
|
|
392
|
+
parsed = version
|
|
393
|
+
|
|
394
|
+
parts = []
|
|
395
|
+
|
|
396
|
+
if parsed.epoch != 0:
|
|
397
|
+
parts.append(f'{parsed.epoch}!')
|
|
398
|
+
|
|
399
|
+
release_segment = '.'.join(str(x) for x in parsed.release)
|
|
400
|
+
if strip_trailing_zero:
|
|
401
|
+
release_segment = re.sub(r'(\.0)+$', '', release_segment)
|
|
402
|
+
parts.append(release_segment)
|
|
403
|
+
|
|
404
|
+
if parsed.pre is not None:
|
|
405
|
+
parts.append(''.join(str(x) for x in parsed.pre))
|
|
406
|
+
|
|
407
|
+
if parsed.post is not None:
|
|
408
|
+
parts.append(f'.post{parsed.post}')
|
|
409
|
+
|
|
410
|
+
if parsed.dev is not None:
|
|
411
|
+
parts.append(f'.dev{parsed.dev}')
|
|
412
|
+
|
|
413
|
+
if parsed.local is not None:
|
|
414
|
+
parts.append(f'+{parsed.local}')
|
|
415
|
+
|
|
416
|
+
return ''.join(parts)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Copyright 2023- wrmsr
|
|
2
|
+
|
|
3
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
|
4
|
+
following conditions are met:
|
|
5
|
+
|
|
6
|
+
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
|
7
|
+
disclaimer.
|
|
8
|
+
|
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
|
10
|
+
disclaimer in the documentation and/or other materials provided with the distribution.
|
|
11
|
+
|
|
12
|
+
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
|
|
13
|
+
derived from this software without specific prior written permission.
|
|
14
|
+
|
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
16
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
17
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
18
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
19
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
20
|
+
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
21
|
+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: omdev
|
|
3
|
+
Version: 0.0.0.dev7
|
|
4
|
+
Summary: omdev
|
|
5
|
+
Author: wrmsr
|
|
6
|
+
License: BSD-3-Clause
|
|
7
|
+
Project-URL: source, https://github.com/wrmsr/omlish
|
|
8
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
9
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Operating System :: POSIX
|
|
13
|
+
Requires-Python: >=3.12
|
|
14
|
+
License-File: LICENSE
|
|
15
|
+
Requires-Dist: omlish ==0.0.0.dev7
|
|
16
|
+
Provides-Extra: c
|
|
17
|
+
Requires-Dist: pycparser >=2.22 ; extra == 'c'
|
|
18
|
+
Requires-Dist: cffi >=1.17 ; extra == 'c'
|
|
19
|
+
Requires-Dist: pcpp >=1.30 ; extra == 'c'
|
|
20
|
+
Provides-Extra: mypy
|
|
21
|
+
Requires-Dist: mypy >=1.11 ; extra == 'mypy'
|
|
22
|
+
Provides-Extra: tokens
|
|
23
|
+
Requires-Dist: tokenize-rt >=6 ; extra == 'tokens'
|
|
24
|
+
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
omdev/__about__.py,sha256=h6LYtf6v_AgYkF_cHZEwk8WyyDCmqWpj-hGWsJv0YOY,707
|
|
2
|
+
omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
omdev/classdot.py,sha256=urN5Pzd2ooAwnfkH0z-muQxdO90IMo-sX2WB-A37lVU,1533
|
|
4
|
+
omdev/cmake.py,sha256=Sk9SL_mFCuYG0FYjG_w53wGt6mOmXfen5pZWZsqjSq4,4592
|
|
5
|
+
omdev/tokens.py,sha256=GusxQ1Cd_eiScuR8XTTtc9QFhOgYviYGBZmFnn3Hj7s,756
|
|
6
|
+
omdev/amalg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
omdev/amalg/__main__.py,sha256=OE1udULO1g4McUbeg1CoHbSm4hbQ2kcE3ffEGxlnPh4,69
|
|
8
|
+
omdev/amalg/amalg.py,sha256=2k9oHxP5HDKopfWspABq2ZVjVsZpUZoejUnHeL7cE9M,11477
|
|
9
|
+
omdev/exts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
omdev/exts/build.py,sha256=zViF1wYx6z5ACyifgNjlCAVoPAMCKpTr_VoAvwtmvtY,1013
|
|
11
|
+
omdev/exts/cmake.py,sha256=5b0dryDvcKHPnFT-wNb8X3kpolGCnpSSGp1tuhdjuxE,5426
|
|
12
|
+
omdev/exts/importhook.py,sha256=HgEM6UD52BoQi4dhSSk8buoqV6YRUvzQOOWzX6W1aic,2306
|
|
13
|
+
omdev/exts/scan.py,sha256=rUfRFzKn8Tu_2B-en0bdkrjMlqb8qWK7SOCf7AF2-wk,1642
|
|
14
|
+
omdev/exts/_distutils/__init__.py,sha256=c1zImtnPh3uY8BUTV4RLKtGKqTPx3c_pBbhA6tPtNsE,297
|
|
15
|
+
omdev/exts/_distutils/build_ext.py,sha256=STHl9Rq2KeWJ3dQ8j8LwIQ-vFc4-3XsYWQ8Qc5_VByU,13833
|
|
16
|
+
omdev/exts/_distutils/dir_util.py,sha256=xxfAIPHbjlh-aW9OX6UGDrXiXfB5biG4xEC5RA6oszM,2882
|
|
17
|
+
omdev/exts/_distutils/errors.py,sha256=HWmsruDLOctJwjZ3yjIkef6O-NI2m0A74tLYZKbS-TY,2035
|
|
18
|
+
omdev/exts/_distutils/extension.py,sha256=CAxie5k3eCD-k-OaBPYYsyOFbgcWgx0oipA2D6_hrIs,5631
|
|
19
|
+
omdev/exts/_distutils/file_util.py,sha256=glpfHGEDZKMS_VAIgr3YlExtQfNP4agxOrn3WenjE7U,7804
|
|
20
|
+
omdev/exts/_distutils/modified.py,sha256=OI4guORuIv16fyFTS-B_eaPSELttGPVeZCYgjR357Ec,1723
|
|
21
|
+
omdev/exts/_distutils/spawn.py,sha256=ROud2VB_tyktPGq6ldsOyFTGIsvSvYAQf_ioWQh0XH0,3435
|
|
22
|
+
omdev/exts/_distutils/sysconfig.py,sha256=NYfkHHcQRkgVfVhNEexd2DdYhJmZ1BIaT3BhPd7hk0c,12630
|
|
23
|
+
omdev/exts/_distutils/util.py,sha256=k4t8w-8VWLVzFh5LvfSpygkssSfrU7LaMT6xIMQQkQw,6413
|
|
24
|
+
omdev/exts/_distutils/version.py,sha256=LEjpZjn2HGFEJElZrklb2NSALhr9wWi1uXfVf_5WLRY,12509
|
|
25
|
+
omdev/exts/_distutils/compilers/__init__.py,sha256=amL_zrFlba0lHIvpqDne9uhqhLemA7hBZFX-MHL7R3c,68
|
|
26
|
+
omdev/exts/_distutils/compilers/ccompiler.py,sha256=cTs88qrvj0hBVXHfemSDE_du_nEA4_qo3Qst5TpQkVI,43606
|
|
27
|
+
omdev/exts/_distutils/compilers/options.py,sha256=H7r5IcLvga5Fs3jjXWIT-6ap3JBduXRKgtpDmSGCZxs,3818
|
|
28
|
+
omdev/exts/_distutils/compilers/unixccompiler.py,sha256=o1h8QuyupLntv4F21_XjzAZmCiwwxJuTmOirvBSL-Qw,15419
|
|
29
|
+
omdev/interp/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
30
|
+
omdev/interp/__main__.py,sha256=gFhR9DikwDZk0LqgdR3qq_aXQHThUOPllDmHDOfnFAU,67
|
|
31
|
+
omdev/interp/cli.py,sha256=pobok11AGS7UrlCcORyARiS03878rpSVTaFxfv5aaUE,1618
|
|
32
|
+
omdev/interp/inspect.py,sha256=SI4jQmWfXCnlceFTxlVRfTlEYYCjO_X12wuG5e74yto,2849
|
|
33
|
+
omdev/interp/providers.py,sha256=9eooFFf1qYK3k_84TTvMxCRmajyQKH1DpLdL8L523ww,1780
|
|
34
|
+
omdev/interp/pyenv.py,sha256=zrb_ijok9shEzG__QIk03mswKPdSwefrnZoO8E3IwKo,10452
|
|
35
|
+
omdev/interp/resolvers.py,sha256=RgNgoe7Q34ivi3d9uXhfmtTfnRwaNDnJieJLJB8H3js,2239
|
|
36
|
+
omdev/interp/standalone.py,sha256=XcltiL7ypcfV89C82_3knQ3Kx7aW4wnnxf2056ZXC3A,7731
|
|
37
|
+
omdev/interp/system.py,sha256=UFHfMR0CHCEnNx5fhrze8esAwigpRrJUA33ftq6nA0I,3514
|
|
38
|
+
omdev/interp/types.py,sha256=lY0pDECxy4qtx2KI7Ve8r2quriiBi9px0Bull2zsYPw,2351
|
|
39
|
+
omdev/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
+
omdev/mypy/debug.py,sha256=WcZw-3Z1njg_KFGqi3DB6RuqbBa3dLArJnjVCuY1Mn0,3003
|
|
41
|
+
omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
42
|
+
omdev/pyproject/__main__.py,sha256=gFhR9DikwDZk0LqgdR3qq_aXQHThUOPllDmHDOfnFAU,67
|
|
43
|
+
omdev/pyproject/cli.py,sha256=TLGMBFmSH_5zfuzlIxJSu1HMLCxZPaNfuECoh1X8d5I,8226
|
|
44
|
+
omdev/pyproject/configs.py,sha256=UV-4zbGDlQa3Anl1oRHfQP29-Osl5uqbKOAV3PVZbjc,2696
|
|
45
|
+
omdev/pyproject/ext.py,sha256=x13piOOnNrYbA17qZLDVuR0p1sqhgEwpk4FtImX-klM,4281
|
|
46
|
+
omdev/pyproject/pkg.py,sha256=3Oj76ciopsDGoFKBjd5cUIohcRrvuX0wZlEMKdUGqRw,5253
|
|
47
|
+
omdev/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
|
+
omdev/scripts/execrss.py,sha256=wBpdhWuQj_4EnEmvK_aLQHxaE-J52G9F6g0210fTNe8,307
|
|
49
|
+
omdev/scripts/findimports.py,sha256=d8Xf2TcE7hHh_lXUx2V1APF4Jggu2uO2K0ex6bfmqyQ,2030
|
|
50
|
+
omdev/scripts/findmagic.py,sha256=W7W07YR3zsA0hNej6-BPgQj2hWX1UydrbWnNMRdMA88,1893
|
|
51
|
+
omdev/scripts/interp.py,sha256=Pg0XThciM4Kq5bjArL1nEfaB_lHnz1E-NgkCBz0wO9U,61379
|
|
52
|
+
omdev/scripts/pyproject.py,sha256=80OTAIA_R3R7FeF6B_KhEvt0419HybjAipo_52CADuo,107703
|
|
53
|
+
omdev/scripts/traceimport.py,sha256=JmUgLEQLY7r3QNQ14Agarqh5qtMyRNenCb_OF5EIikY,13392
|
|
54
|
+
omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
55
|
+
omdev/toml/parser.py,sha256=84bn09uhYHwQGyfww6Rw6y1RxPAE_HDltODOSakcqDM,29186
|
|
56
|
+
omdev/toml/writer.py,sha256=StGYPvqgN__A2IxTI4rYeHMx8dLAFt8uogHG8dJdShs,2781
|
|
57
|
+
omdev/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
|
+
omdev/tools/dockertools.py,sha256=3844AhUst6kYo2xKNn-2Npi-f6r4rocxEOx0tHjE0dk,2063
|
|
59
|
+
omdev/tools/sqlrepl.py,sha256=v9uVQ4nvquSXcQVYIFq34ikumSILvKqzD6lUKLcncCE,5646
|
|
60
|
+
omdev/versioning/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
61
|
+
omdev/versioning/specifiers.py,sha256=6Odf9e6farwlPRsD_YqwTfYKG-BXn_dIcKtqfkhfodI,17432
|
|
62
|
+
omdev/versioning/versions.py,sha256=ei2eopEsJq3zSMJmezK1nzZgikgCdxFtnF3f69nCRZQ,12246
|
|
63
|
+
omdev-0.0.0.dev7.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
|
64
|
+
omdev-0.0.0.dev7.dist-info/METADATA,sha256=BdqJQATR1mcJkLXsdmwvCbZnbQeE3_lkAAUanTYKFOs,757
|
|
65
|
+
omdev-0.0.0.dev7.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
|
|
66
|
+
omdev-0.0.0.dev7.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
|
67
|
+
omdev-0.0.0.dev7.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
omdev
|