pathseq 1.0.0__tar.gz → 1.0.0.post0__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 (27) hide show
  1. {pathseq-1.0.0 → pathseq-1.0.0.post0}/PKG-INFO +2 -5
  2. {pathseq-1.0.0 → pathseq-1.0.0.post0}/README.rst +0 -3
  3. pathseq-1.0.0.post0/pyproject.toml +96 -0
  4. pathseq-1.0.0/pyproject.toml → pathseq-1.0.0.post0/pyproject.toml.orig +7 -7
  5. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/__init__.py +2 -2
  6. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_ast/_loose_type.py +2 -2
  7. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_base.py +6 -6
  8. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_file_num_seq/_arithmetic_sequence.py +7 -8
  9. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_file_num_seq/_file_num_seq.py +3 -4
  10. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_file_num_seq/_parse_file_num_seq.py +6 -6
  11. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_from_disk.py +7 -7
  12. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_parse_loose_path_sequence.py +3 -3
  13. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_parse_path_sequence.py +3 -3
  14. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_ast/__init__.py +4 -4
  15. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_ast/_formatter.py +2 -2
  16. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_ast/_ranges.py +2 -2
  17. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_ast/_type.py +0 -0
  18. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_ast/_util.py +0 -0
  19. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_error.py +0 -0
  20. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_file_num_seq/__init__.py +0 -0
  21. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_file_num_seq/_decimal_range.py +1 -1
  22. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_formatters.py +1 -1
  23. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_loose_path_sequence.py +0 -0
  24. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_loose_pure_path_sequence.py +0 -0
  25. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_path_sequence.py +0 -0
  26. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/_pure_path_sequence.py +0 -0
  27. {pathseq-1.0.0 → pathseq-1.0.0.post0}/src/pathseq/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pathseq
3
- Version: 1.0.0
3
+ Version: 1.0.0.post0
4
4
  Summary: A pathlib-like library for working with file sequences.
5
5
  Author: Ashley Whetter
6
6
  Author-email: Ashley Whetter <ashley@awhetter.co.uk>
@@ -21,8 +21,8 @@ Requires-Dist: lark
21
21
  Requires-Dist: python-statemachine
22
22
  Requires-Dist: typing-extensions
23
23
  Requires-Python: >=3.10
24
- Project-URL: Documentation, https://pathseq.readthedocs.org
25
24
  Project-URL: Source, https://github.com/AWhetter/pathseq
25
+ Project-URL: Documentation, https://pathseq.readthedocs.org
26
26
  Description-Content-Type: text/x-rst
27
27
 
28
28
  pathseq
@@ -145,9 +145,6 @@ A wide range of sequence string formats are supported:
145
145
  >>> LoosePathSequence("/path/to/images.1001-1005<UDIM>.exr")[0]
146
146
  PosixPath('/path/to/images.1001.exr')
147
147
 
148
- >>> LoosePathSequence("/path/to/images.1001-1005<UVTILE>.exr")[0]
149
- PosixPath('/path/to/images.u1_v1.exr')
150
-
151
148
 
152
149
  Contributing
153
150
  ------------
@@ -118,9 +118,6 @@ A wide range of sequence string formats are supported:
118
118
  >>> LoosePathSequence("/path/to/images.1001-1005<UDIM>.exr")[0]
119
119
  PosixPath('/path/to/images.1001.exr')
120
120
 
121
- >>> LoosePathSequence("/path/to/images.1001-1005<UVTILE>.exr")[0]
122
- PosixPath('/path/to/images.u1_v1.exr')
123
-
124
121
 
125
122
  Contributing
126
123
  ------------
@@ -0,0 +1,96 @@
1
+ [build-system]
2
+ requires = ["uv_build>=0.8.5,<1.0.0"]
3
+ build-backend = "uv_build"
4
+
5
+ [project]
6
+ name = "pathseq"
7
+ version = "1.0.0.post0"
8
+ description = "A pathlib-like library for working with file sequences."
9
+ readme = "README.rst"
10
+ classifiers = [
11
+ "Development Status :: 4 - Beta",
12
+ "Environment :: Plugins",
13
+ "Framework :: Sphinx :: Extension",
14
+ "Intended Audience :: Developers",
15
+ "License :: OSI Approved :: MIT License",
16
+ "Natural Language :: English",
17
+ "Programming Language :: Python",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Programming Language :: Python :: 3.14",
24
+ ]
25
+ requires-python = ">=3.10"
26
+ dependencies = [
27
+ "lark",
28
+ "python-statemachine",
29
+ "typing_extensions",
30
+ ]
31
+
32
+ [[project.authors]]
33
+ name = "Ashley Whetter"
34
+ email = "ashley@awhetter.co.uk"
35
+
36
+ [project.urls]
37
+ Source = "https://github.com/AWhetter/pathseq"
38
+ Documentation = "https://pathseq.readthedocs.org"
39
+
40
+ [dependency-groups]
41
+ test = [
42
+ "fileseq",
43
+ "hypothesis",
44
+ "pytest",
45
+ ]
46
+ format = ["ruff"]
47
+ lint = ["ruff"]
48
+ typecheck = ["mypy"]
49
+ doc = [
50
+ "furo",
51
+ "sphinx",
52
+ "sphinx-design",
53
+ ]
54
+ release_notes = ["towncrier"]
55
+
56
+ [[dependency-groups.dev]]
57
+ include-group = "test"
58
+
59
+ [[dependency-groups.dev]]
60
+ include-group = "format"
61
+
62
+ [[dependency-groups.dev]]
63
+ include-group = "lint"
64
+
65
+ [[dependency-groups.dev]]
66
+ include-group = "typecheck"
67
+
68
+ [[dependency-groups.dev]]
69
+ include-group = "doc"
70
+
71
+ [tool.uv.build-backend]
72
+ module-name = "pathseq"
73
+
74
+ [tool.mypy]
75
+ strict = true
76
+
77
+ [tool.towncrier]
78
+ directory = "doc/changes"
79
+ filename = "CHANGELOG.rst"
80
+ package = "pathseq"
81
+ title_format = "pathseq v{version} ({project_date})"
82
+ underlines = [
83
+ "-",
84
+ "^",
85
+ '"',
86
+ ]
87
+
88
+ [tool.pytest.ini_options]
89
+ markers = ["todo"]
90
+ addopts = "--doctest-glob='[!0]*.rst' --doctest-modules --ignore=doc/source/conf.py"
91
+ doctest_optionflags = "ELLIPSIS"
92
+ testpaths = [
93
+ "tests",
94
+ "doc/source",
95
+ "src",
96
+ ]
@@ -1,6 +1,10 @@
1
+ [build-system]
2
+ requires = ["uv_build>=0.8.5,<1.0.0"]
3
+ build-backend = "uv_build"
4
+
1
5
  [project]
2
6
  name = "pathseq"
3
- version = "1.0.0"
7
+ version = "1.0.0.post0"
4
8
  description = "A pathlib-like library for working with file sequences."
5
9
  authors = [
6
10
  {name = "Ashley Whetter", email = "ashley@awhetter.co.uk"},
@@ -63,15 +67,11 @@ release_notes = [
63
67
  "towncrier",
64
68
  ]
65
69
 
66
- [build-system]
67
- requires = ["uv_build>=0.8.5,<0.9.0"]
68
- build-backend = "uv_build"
69
-
70
70
  [tool.uv.build-backend]
71
71
  module-name = "pathseq"
72
72
 
73
- [tool.pylint]
74
- disable = "R,unused-argument"
73
+ [tool.mypy]
74
+ strict = true
75
75
 
76
76
  [tool.towncrier]
77
77
  directory = "doc/changes"
@@ -19,7 +19,7 @@ from ._loose_pure_path_sequence import LoosePurePathSequence
19
19
  from ._path_sequence import PathSequence
20
20
  from ._pure_path_sequence import PurePathSequence
21
21
 
22
- __version__ = "1.0.0"
22
+ __version__ = "1.0.0.post0"
23
23
 
24
24
  __all__ = (
25
25
  "BasePathSequence",
@@ -32,8 +32,8 @@ __all__ = (
32
32
  "LoosePurePathSequence",
33
33
  "NotASequenceError",
34
34
  "PaddedRange",
35
- "ParsedLooseSequence",
36
35
  "ParseError",
36
+ "ParsedLooseSequence",
37
37
  "ParsedSequence",
38
38
  "PathSequence",
39
39
  "PathT_co",
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Literal, TypeAlias, Union
4
+ from typing import Literal, TypeAlias
5
5
 
6
6
  from typing_extensions import Self # PY311
7
7
 
@@ -214,4 +214,4 @@ class RangesEndName:
214
214
  return self
215
215
 
216
216
 
217
- ParsedLooseSequence: TypeAlias = Union[RangesStartName, RangesInName, RangesEndName]
217
+ ParsedLooseSequence: TypeAlias = RangesStartName | RangesInName | RangesEndName
@@ -1,14 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import abc
4
- from collections.abc import Iterable, Iterator, Sequence
5
- from decimal import Decimal
6
4
  import itertools
7
5
  import os
8
6
  import pathlib
9
7
  import re
10
8
  import sys
11
- from typing import ClassVar, overload, TypeAlias, TypeVar, Union
9
+ from collections.abc import Iterable, Iterator, Sequence
10
+ from decimal import Decimal
11
+ from typing import ClassVar, TypeAlias, TypeVar, overload
12
12
 
13
13
  from typing_extensions import (
14
14
  Self, # PY311
@@ -23,10 +23,10 @@ from ._ast import (
23
23
  )
24
24
  from ._error import ParseError
25
25
  from ._file_num_seq import FileNumSequence
26
- from ._from_disk import Completeness, find_on_disk, iter_on_disk
27
26
  from ._formatters import FileNumberFormatter, RegexFormatter
27
+ from ._from_disk import Completeness, find_on_disk, iter_on_disk
28
28
 
29
- Segment: TypeAlias = Union[str, os.PathLike[str]]
29
+ Segment: TypeAlias = str | os.PathLike[str]
30
30
  PathT_co = TypeVar("PathT_co", covariant=True, bound=pathlib.Path)
31
31
  PurePathT_co = TypeVar(
32
32
  "PurePathT_co",
@@ -242,7 +242,7 @@ class BasePurePathSequence(Sequence[PurePathT_co], metaclass=abc.ABCMeta):
242
242
  if self._path == other:
243
243
  raise ValueError("Cannot check if a path sequence is relative to itself")
244
244
 
245
- return self._path.is_relative_to(other) and not self._path == other
245
+ return self._path.is_relative_to(other) and self._path != other
246
246
 
247
247
  if sys.version_info >= (3, 12):
248
248
 
@@ -1,23 +1,22 @@
1
- from collections.abc import Iterator, Sequence
2
1
  import decimal
3
- from typing import overload, Protocol, TypeVar
2
+ from collections.abc import Iterator, Sequence
3
+ from typing import Protocol, TypeVar, overload
4
4
 
5
5
  from typing_extensions import Self # PY311
6
6
 
7
7
  from ._decimal_range import DecimalRange
8
8
 
9
-
10
9
  FileNumT = TypeVar("FileNumT", int, decimal.Decimal)
11
- FileNumT_cov = TypeVar("FileNumT_cov", covariant=True)
10
+ FileNumT_co = TypeVar("FileNumT_co", covariant=True)
12
11
 
13
12
 
14
- class RangeProtocol(Protocol[FileNumT_cov]):
13
+ class RangeProtocol(Protocol[FileNumT_co]):
15
14
  @property
16
- def start(self) -> FileNumT_cov: ...
15
+ def start(self) -> FileNumT_co: ...
17
16
  @property
18
- def step(self) -> FileNumT_cov: ...
17
+ def step(self) -> FileNumT_co: ...
19
18
 
20
- def __iter__(self) -> Iterator[FileNumT_cov]: ...
19
+ def __iter__(self) -> Iterator[FileNumT_co]: ...
21
20
 
22
21
  def __len__(self) -> int: ...
23
22
 
@@ -1,9 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Iterable, Iterator, Sequence
4
3
  import decimal
5
4
  import itertools
6
- from typing import Generic, overload, TypeGuard
5
+ from collections.abc import Iterable, Iterator, Sequence
6
+ from typing import Generic, TypeGuard, overload
7
7
 
8
8
  from typing_extensions import (
9
9
  Self, # PY311
@@ -214,8 +214,7 @@ class FileNumSequence(Sequence[FileNumT]):
214
214
  if index < range_len:
215
215
  return rng[index]
216
216
  index -= range_len
217
- else:
218
- raise IndexError(index)
217
+ raise IndexError(index)
219
218
 
220
219
  def __str__(self) -> str:
221
220
  return ",".join(str(rng) for rng in self._ranges)
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from decimal import Decimal as D
4
- from typing import TypeAlias, TypeVar, Union
4
+ from typing import TypeAlias, TypeVar
5
5
 
6
6
  import lark
7
7
 
8
- from ._arithmetic_sequence import ArithmeticSequence
9
8
  from .._error import ParseError
9
+ from ._arithmetic_sequence import ArithmeticSequence
10
10
 
11
11
  _GRAMMAR = r"""
12
12
  start: ranges
@@ -22,7 +22,7 @@ _GRAMMAR = r"""
22
22
  /x
23
23
  """
24
24
  _PARSER = lark.Lark(_GRAMMAR, parser="lalr")
25
- _SeqArgsT: TypeAlias = Union[tuple[str], tuple[str, str], tuple[str, str, str]]
25
+ _SeqArgs: TypeAlias = tuple[str] | tuple[str, str] | tuple[str, str, str]
26
26
  T = TypeVar("T")
27
27
 
28
28
 
@@ -36,7 +36,7 @@ class _RangeReducer(
36
36
  return seq
37
37
 
38
38
  def ranges(
39
- self, range_: _SeqArgsT, *ranges: _SeqArgsT
39
+ self, range_: _SeqArgs, *ranges: _SeqArgs
40
40
  ) -> list[ArithmeticSequence[int]] | list[ArithmeticSequence[D]]:
41
41
  if any("." in arg for arg in range_) or any(
42
42
  "." in arg for r in ranges for arg in r
@@ -51,10 +51,10 @@ class _RangeReducer(
51
51
  *(ArithmeticSequence(*tuple(int(arg) for arg in r)) for r in ranges),
52
52
  ]
53
53
 
54
- def range(self, start: str, end: str | None, step: str | None) -> _SeqArgsT:
54
+ def range(self, start: str, end: str | None, step: str | None) -> _SeqArgs:
55
55
  assert step is None or end is not None, "Parsed an end but no step"
56
56
 
57
- args: _SeqArgsT = (start,)
57
+ args: _SeqArgs = (start,)
58
58
  if end is not None:
59
59
  args = (start, end)
60
60
  if step is not None:
@@ -1,17 +1,17 @@
1
- from collections.abc import Iterator, Sequence
2
- from decimal import Decimal
3
1
  import enum
4
2
  import functools
5
3
  import operator
6
4
  import pathlib
7
5
  import re
6
+ from collections.abc import Iterator, Sequence
7
+ from decimal import Decimal
8
8
  from typing import TypeVar
9
9
 
10
10
  from ._ast import (
11
- RangesStartName,
12
- RangesInName,
13
- RangesEndName,
14
11
  ParsedSequence,
12
+ RangesEndName,
13
+ RangesInName,
14
+ RangesStartName,
15
15
  )
16
16
  from ._file_num_seq import FileNumSequence
17
17
  from ._formatters import GlobFormatter, RegexFormatter
@@ -103,8 +103,8 @@ def find_on_disk(
103
103
 
104
104
 
105
105
  def iter_on_disk(
106
- path: PathT,
106
+ seq_as_path: PathT,
107
107
  parsed: ParsedSequence | RangesStartName | RangesInName | RangesEndName,
108
108
  ) -> Iterator[PathT]:
109
- for path, _ in _find_on_disk(path, parsed):
109
+ for path, _ in _find_on_disk(seq_as_path, parsed):
110
110
  yield path
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import collections
4
- from dataclasses import dataclass
5
- from decimal import Decimal
6
4
  import enum
7
5
  import re
6
+ from dataclasses import dataclass
7
+ from decimal import Decimal
8
8
 
9
- from statemachine import StateMachine, State
9
+ from statemachine import State, StateMachine
10
10
 
11
11
  from ._ast import (
12
12
  PaddedRange,
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import collections
4
- from dataclasses import dataclass
5
- from decimal import Decimal
6
4
  import enum
7
5
  import re
6
+ from dataclasses import dataclass
7
+ from decimal import Decimal
8
8
 
9
- from statemachine import StateMachine, State
9
+ from statemachine import State, StateMachine
10
10
 
11
11
  from ._ast import (
12
12
  PaddedRange,
@@ -1,9 +1,9 @@
1
1
  from ._formatter import Formatter
2
2
  from ._loose_type import (
3
3
  ParsedLooseSequence,
4
- RangesStartName,
5
- RangesInName,
6
4
  RangesEndName,
5
+ RangesInName,
6
+ RangesStartName,
7
7
  )
8
8
  from ._ranges import PaddedRange, Ranges
9
9
  from ._type import ParsedSequence
@@ -15,8 +15,8 @@ __all__ = [
15
15
  "ParsedLooseSequence",
16
16
  "ParsedSequence",
17
17
  "Ranges",
18
- "RangesStartName",
19
- "RangesInName",
20
18
  "RangesEndName",
19
+ "RangesInName",
20
+ "RangesStartName",
21
21
  "non_recursive_asdict",
22
22
  ]
@@ -1,9 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Iterable
4
3
  import dataclasses
5
- from decimal import Decimal
6
4
  import typing
5
+ from collections.abc import Iterable
6
+ from decimal import Decimal
7
7
 
8
8
  if typing.TYPE_CHECKING:
9
9
  from ._loose_type import ParsedLooseSequence
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
- from dataclasses import dataclass
4
3
  import decimal
4
+ from dataclasses import dataclass
5
5
  from typing import Generic, TypeGuard
6
6
 
7
+ from .._file_num_seq import FileNumSequence, FileNumT
7
8
  from ._formatter import Formatter
8
9
  from ._util import pad
9
- from .._file_num_seq import FileNumSequence, FileNumT
10
10
 
11
11
 
12
12
  @dataclass(frozen=True)
@@ -1,8 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Iterator
4
3
  import decimal
5
4
  import math
5
+ from collections.abc import Iterator
6
6
 
7
7
  from typing_extensions import Self # PY311
8
8
 
@@ -1,5 +1,5 @@
1
- from decimal import Decimal
2
1
  import re
2
+ from decimal import Decimal
3
3
 
4
4
  from ._ast import Formatter, PaddedRange
5
5