omdev 0.0.0.dev419__py3-none-any.whl → 0.0.0.dev421__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/oci/data.py CHANGED
@@ -1,10 +1,10 @@
1
1
  # ruff: noqa: UP006 UP007 UP045
2
2
  # @omlish-lite
3
- import abc
4
3
  import dataclasses as dc
5
4
  import enum
6
5
  import typing as ta
7
6
 
7
+ from omlish.lite.abstract import Abstract
8
8
  from omlish.lite.check import check
9
9
  from omlish.lite.marshal import OBJ_MARSHALER_FIELD_KEY
10
10
  from omlish.lite.marshal import OBJ_MARSHALER_OMIT_IF_NONE
@@ -17,7 +17,7 @@ from .datarefs import OciDataRef
17
17
 
18
18
 
19
19
  @dc.dataclass()
20
- class OciDataclass(abc.ABC): # noqa
20
+ class OciDataclass(Abstract):
21
21
  pass
22
22
 
23
23
 
omdev/oci/datarefs.py CHANGED
@@ -1,6 +1,5 @@
1
1
  # ruff: noqa: UP006 UP007 UP045
2
2
  # @omlish-lite
3
- import abc
4
3
  import dataclasses as dc
5
4
  import functools
6
5
  import hashlib
@@ -10,6 +9,7 @@ import shutil
10
9
  import tarfile
11
10
  import typing as ta
12
11
 
12
+ from omlish.lite.abstract import Abstract
13
13
  from omlish.lite.cached import cached_nullary
14
14
  from omlish.lite.check import check
15
15
 
@@ -18,7 +18,7 @@ from omlish.lite.check import check
18
18
 
19
19
 
20
20
  @dc.dataclass(frozen=True)
21
- class OciDataRef(abc.ABC): # noqa
21
+ class OciDataRef(Abstract):
22
22
  pass
23
23
 
24
24
 
omdev/oci/media.py CHANGED
@@ -1,9 +1,9 @@
1
1
  # ruff: noqa: UP006 UP007 UP045
2
2
  # @omlish-lite
3
- import abc
4
3
  import dataclasses as dc
5
4
  import typing as ta
6
5
 
6
+ from omlish.lite.abstract import Abstract
7
7
  from omlish.lite.check import check
8
8
  from omlish.lite.marshal import OBJ_MARSHALER_FIELD_KEY
9
9
  from omlish.lite.marshal import OBJ_MARSHALER_OMIT_IF_NONE
@@ -23,7 +23,7 @@ OCI_MEDIA_FIELDS: ta.Collection[str] = frozenset([
23
23
 
24
24
 
25
25
  @dc.dataclass()
26
- class OciMediaDataclass(abc.ABC): # noqa
26
+ class OciMediaDataclass(Abstract):
27
27
  SCHEMA_VERSION: ta.ClassVar[int]
28
28
 
29
29
  @property
omdev/oci/repositories.py CHANGED
@@ -5,6 +5,7 @@ import os.path
5
5
  import tarfile
6
6
  import typing as ta
7
7
 
8
+ from omlish.lite.abstract import Abstract
8
9
  from omlish.lite.check import check
9
10
  from omlish.os.paths import is_path_in_dir
10
11
 
@@ -17,7 +18,7 @@ from .datarefs import TarFileOciDataRef
17
18
  ##
18
19
 
19
20
 
20
- class OciRepository(abc.ABC):
21
+ class OciRepository(Abstract):
21
22
  @abc.abstractmethod
22
23
  def contains_blob(self, digest: str) -> bool:
23
24
  raise NotImplementedError
@@ -57,7 +58,7 @@ class OciRepository(abc.ABC):
57
58
  raise TypeError(obj)
58
59
 
59
60
 
60
- class FileOciRepository(OciRepository, abc.ABC):
61
+ class FileOciRepository(OciRepository, Abstract):
61
62
  @abc.abstractmethod
62
63
  def read_file(self, path: str) -> bytes:
63
64
  raise NotImplementedError
@@ -1,3 +1,4 @@
1
+ # ruff: noqa: UP006 UP007 UP045
1
2
  # @omlish-lite
2
3
  # Copyright (c) Donald Stufft and individual contributors.
3
4
  # All rights reserved.
@@ -20,8 +21,7 @@
20
21
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This file is dual licensed under the terms of the
21
22
  # Apache License, Version 2.0, and the BSD License. See the LICENSE file in the root of this repository for complete
22
23
  # details.
23
- # https://github.com/pypa/packaging/blob/2c885fe91a54559e2382902dce28428ad2887be5/src/packaging/specifiers.py
24
- # ruff: noqa: UP006 UP007 UP045
24
+ # https://github.com/pypa/packaging/blob/48125006684bb2d7d28c50af48a03176da45942d/src/packaging/specifiers.py
25
25
  import abc
26
26
  import itertools
27
27
  import re
@@ -181,7 +181,7 @@ class Specifier(BaseSpecifier):
181
181
  ) -> None:
182
182
  match = self._regex.search(spec)
183
183
  if not match:
184
- raise InvalidSpecifier(f"Invalid specifier: '{spec}'")
184
+ raise InvalidSpecifier(f'Invalid specifier: {spec!r}')
185
185
 
186
186
  self._spec: ta.Tuple[str, str] = (
187
187
  match.group('operator').strip(),
@@ -196,7 +196,7 @@ class Specifier(BaseSpecifier):
196
196
  return self._prereleases
197
197
 
198
198
  operator, version = self._spec
199
- if operator in ['==', '>=', '<=', '~=', '===']:
199
+ if operator in ['==', '>=', '<=', '~=', '===', '>', '<']:
200
200
  if operator == '==' and version.endswith('.*'):
201
201
  version = version[:-2]
202
202
 
@@ -322,40 +322,38 @@ class Specifier(BaseSpecifier):
322
322
  return self.contains(item)
323
323
 
324
324
  def contains(self, item: UnparsedVersion, prereleases: ta.Optional[bool] = None) -> bool:
325
- if prereleases is None:
326
- prereleases = self.prereleases
327
-
328
- normalized_item = _coerce_version(item)
329
-
330
- if normalized_item.is_prerelease and not prereleases:
331
- return False
332
-
333
- operator_callable: CallableVersionOperator = self._get_operator(self.operator)
334
- return operator_callable(normalized_item, self.version)
325
+ return bool(list(self.filter([item], prereleases=prereleases)))
335
326
 
336
327
  def filter(
337
328
  self,
338
329
  iterable: ta.Iterable[UnparsedVersionVar],
339
330
  prereleases: ta.Optional[bool] = None,
340
331
  ) -> ta.Iterator[UnparsedVersionVar]:
341
- yielded = False
342
- found_prereleases = []
332
+ prereleases_versions = []
333
+ found_non_prereleases = False
334
+
335
+ include_prereleases = (
336
+ prereleases if prereleases is not None else self.prereleases
337
+ )
343
338
 
344
- kw = {'prereleases': prereleases if prereleases is not None else True}
339
+ operator_callable = self._get_operator(self.operator)
345
340
 
346
341
  for version in iterable:
347
342
  parsed_version = _coerce_version(version)
348
343
 
349
- if self.contains(parsed_version, **kw):
350
- if parsed_version.is_prerelease and not (prereleases or self.prereleases):
351
- found_prereleases.append(version)
352
- else:
353
- yielded = True
344
+ if operator_callable(parsed_version, self.version):
345
+ if not parsed_version.is_prerelease or include_prereleases:
346
+ found_non_prereleases = True
354
347
  yield version
348
+ elif prereleases is None and self._prereleases is not False:
349
+ prereleases_versions.append(version)
355
350
 
356
- if not yielded and found_prereleases:
357
- for version in found_prereleases:
358
- yield version
351
+ if (
352
+ not found_non_prereleases and
353
+ prereleases is None and
354
+ self._prereleases is not False
355
+ ):
356
+ yield from prereleases_versions
359
357
 
360
358
 
361
359
  _version_prefix_regex = re.compile(r'^([0-9]+)((?:a|b|c|rc)[0-9]+)$')
@@ -406,12 +404,15 @@ def _pad_version(left: ta.List[str], right: ta.List[str]) -> ta.Tuple[ta.List[st
406
404
  class SpecifierSet(BaseSpecifier):
407
405
  def __init__(
408
406
  self,
409
- specifiers: str = '',
407
+ specifiers: ta.Union[str, ta.Iterable['Specifier']] = '',
410
408
  prereleases: ta.Optional[bool] = None,
411
409
  ) -> None:
412
- split_specifiers = [s.strip() for s in specifiers.split(',') if s.strip()]
410
+ if isinstance(specifiers, str):
411
+ split_specifiers = [s.strip() for s in specifiers.split(',') if s.strip()]
412
+ self._specs = frozenset(map(Specifier, split_specifiers))
413
+ else:
414
+ self._specs = frozenset(specifiers)
413
415
 
414
- self._specs = frozenset(map(Specifier, split_specifiers))
415
416
  self._prereleases = prereleases
416
417
 
417
418
  @property
@@ -422,7 +423,10 @@ class SpecifierSet(BaseSpecifier):
422
423
  if not self._specs:
423
424
  return None
424
425
 
425
- return any(s.prereleases for s in self._specs)
426
+ if any(s.prereleases for s in self._specs):
427
+ return True
428
+
429
+ return None
426
430
 
427
431
  @prereleases.setter
428
432
  def prereleases(self, value: bool) -> None:
@@ -489,28 +493,22 @@ class SpecifierSet(BaseSpecifier):
489
493
  if not isinstance(item, Version):
490
494
  item = Version(item)
491
495
 
492
- if prereleases is None:
493
- prereleases = self.prereleases
494
-
495
- if not prereleases and item.is_prerelease:
496
- return False
497
-
498
496
  if installed and item.is_prerelease:
499
- item = Version(item.base_version)
497
+ prereleases = True
500
498
 
501
- return all(s.contains(item, prereleases=prereleases) for s in self._specs)
499
+ return bool(list(self.filter([item], prereleases=prereleases)))
502
500
 
503
501
  def filter(
504
502
  self,
505
503
  iterable: ta.Iterable[UnparsedVersionVar],
506
504
  prereleases: ta.Optional[bool] = None,
507
505
  ) -> ta.Iterator[UnparsedVersionVar]:
508
- if prereleases is None:
506
+ if prereleases is None and self.prereleases is not None:
509
507
  prereleases = self.prereleases
510
508
 
511
509
  if self._specs:
512
510
  for spec in self._specs:
513
- iterable = spec.filter(iterable, prereleases=bool(prereleases))
511
+ iterable = spec.filter(iterable, prereleases=prereleases)
514
512
  return iter(iterable)
515
513
 
516
514
  else:
@@ -1,6 +1,5 @@
1
- # @omlish-lite
2
1
  # ruff: noqa: UP006 UP007 UP045
3
- # https://github.com/pypa/wheel/blob/7bb46d7727e6e89fe56b3c78297b3af2672bbbe2/src/wheel/wheelfile.py
2
+ # @omlish-lite
4
3
  # MIT License
5
4
  #
6
5
  # Copyright (c) 2012 Daniel Holth <dholth@fastmail.fm> and contributors
@@ -17,6 +16,7 @@
17
16
  # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
17
  # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
18
  # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19
+ # https://github.com/pypa/wheel/blob/7bb46d7727e6e89fe56b3c78297b3af2672bbbe2/src/wheel/wheelfile.py
20
20
  import base64
21
21
  import csv
22
22
  import hashlib
omdev/pyproject/pkg.py CHANGED
@@ -36,6 +36,7 @@ import types
36
36
  import typing as ta
37
37
 
38
38
  from omlish.formats.toml.writer import TomlWriter
39
+ from omlish.lite.abstract import Abstract
39
40
  from omlish.lite.cached import cached_nullary
40
41
  from omlish.lite.logs import log
41
42
  from omlish.subprocesses.sync import subprocesses
@@ -48,7 +49,7 @@ from ..packaging.revisions import GitRevisionAdder
48
49
  ##
49
50
 
50
51
 
51
- class BasePyprojectPackageGenerator(abc.ABC):
52
+ class BasePyprojectPackageGenerator(Abstract):
52
53
  def __init__(
53
54
  self,
54
55
  dir_name: str,