devpi-process 1.1.1__tar.gz → 1.3.0__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 (25) hide show
  1. devpi_process-1.3.0/.github/FUNDING.yaml +3 -0
  2. devpi_process-1.3.0/.github/dependabot.yaml +13 -0
  3. {devpi_process-1.1.1 → devpi_process-1.3.0}/.github/workflows/check.yaml +12 -9
  4. {devpi_process-1.1.1 → devpi_process-1.3.0}/.github/workflows/release.yaml +13 -12
  5. {devpi_process-1.1.1 → devpi_process-1.3.0}/.markdownlint.yaml +0 -1
  6. {devpi_process-1.1.1 → devpi_process-1.3.0}/.pre-commit-config.yaml +25 -11
  7. {devpi_process-1.1.1 → devpi_process-1.3.0}/PKG-INFO +6 -7
  8. {devpi_process-1.1.1 → devpi_process-1.3.0}/pyproject.toml +31 -32
  9. {devpi_process-1.1.1 → devpi_process-1.3.0}/src/devpi_process/__init__.py +10 -14
  10. devpi_process-1.3.0/src/devpi_process/_version.py +24 -0
  11. {devpi_process-1.1.1 → devpi_process-1.3.0}/tests/demo_pkg_inline/build.py +5 -5
  12. {devpi_process-1.1.1 → devpi_process-1.3.0}/tests/test_devpi_process.py +5 -3
  13. {devpi_process-1.1.1 → devpi_process-1.3.0}/tox.toml +8 -4
  14. devpi_process-1.1.1/.github/FUNDING.yaml +0 -1
  15. devpi_process-1.1.1/.github/dependabot.yaml +0 -6
  16. devpi_process-1.1.1/src/devpi_process/_version.py +0 -34
  17. {devpi_process-1.1.1 → devpi_process-1.3.0}/.github/SECURITY.md +0 -0
  18. {devpi_process-1.1.1 → devpi_process-1.3.0}/.github/release.yaml +0 -0
  19. {devpi_process-1.1.1 → devpi_process-1.3.0}/.gitignore +0 -0
  20. {devpi_process-1.1.1 → devpi_process-1.3.0}/CHANGELOG.md +0 -0
  21. {devpi_process-1.1.1 → devpi_process-1.3.0}/CODE_OF_CONDUCT.md +0 -0
  22. {devpi_process-1.1.1 → devpi_process-1.3.0}/LICENSE.txt +0 -0
  23. {devpi_process-1.1.1 → devpi_process-1.3.0}/README.md +0 -0
  24. {devpi_process-1.1.1 → devpi_process-1.3.0}/src/devpi_process/py.typed +0 -0
  25. {devpi_process-1.1.1 → devpi_process-1.3.0}/tests/demo_pkg_inline/pyproject.toml +0 -0
@@ -0,0 +1,3 @@
1
+ github: gaborbernat
2
+ tidelift: "pypi/devpi-process"
3
+ thanks_dev: u/gh/gaborbernat
@@ -0,0 +1,13 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ day: "tuesday"
8
+ groups:
9
+ github-actions:
10
+ patterns:
11
+ - "*"
12
+ cooldown:
13
+ default-days: 7
@@ -7,40 +7,43 @@ on:
7
7
  pull_request:
8
8
  schedule:
9
9
  - cron: "0 8 * * *"
10
-
11
10
  concurrency:
12
11
  group: check-${{ github.ref }}
13
12
  cancel-in-progress: true
14
-
13
+ permissions:
14
+ contents: read
15
15
  jobs:
16
16
  test:
17
- runs-on: ubuntu-latest
17
+ runs-on: ubuntu-26.04
18
18
  strategy:
19
19
  fail-fast: false
20
20
  matrix:
21
21
  env:
22
+ - "3.15"
23
+ - "3.15t"
22
24
  - "3.14"
23
25
  - "3.13"
24
26
  - "3.12"
25
27
  - "3.11"
26
- - "3.10"
27
28
  - type
28
29
  - dev
29
30
  - pkg_meta
30
31
  steps:
31
- - uses: actions/checkout@v6
32
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
32
33
  with:
33
34
  fetch-depth: 0
35
+ persist-credentials: false
34
36
  - name: Install the latest version of uv
35
- uses: astral-sh/setup-uv@v7
37
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
36
38
  with:
37
- enable-cache: true
39
+ python-version: "3.15"
40
+ enable-cache: false
38
41
  cache-dependency-glob: "pyproject.toml"
39
42
  github-token: ${{ secrets.GITHUB_TOKEN }}
40
43
  - name: Install tox
41
- run: uv tool install --python-preference only-managed --python 3.14 tox --with tox-uv
44
+ run: uv tool install --python-preference only-managed --python 3.15 tox --with tox-uv
42
45
  - name: Install Python
43
- if: startsWith(matrix.env, '3.') && matrix.env != '3.14'
46
+ if: startsWith(matrix.env, '3.') && matrix.env != '3.15'
44
47
  run: uv python install --python-preference only-managed ${{ matrix.env }}
45
48
  - name: Setup test suite
46
49
  run: tox run -vv --notest --skip-missing-interpreters false -e ${{ matrix.env }}
@@ -2,35 +2,36 @@ name: Release to PyPI
2
2
  on:
3
3
  push:
4
4
  tags: ["*"]
5
-
5
+ permissions:
6
+ contents: read
6
7
  env:
7
8
  dists-artifact-name: python-package-distributions
8
-
9
9
  jobs:
10
10
  build:
11
- runs-on: ubuntu-latest
11
+ runs-on: ubuntu-26.04
12
12
  steps:
13
- - uses: actions/checkout@v6
13
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
14
14
  with:
15
15
  fetch-depth: 0
16
+ persist-credentials: false
16
17
  - name: Install the latest version of uv
17
- uses: astral-sh/setup-uv@v7
18
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
18
19
  with:
19
- enable-cache: true
20
+ python-version: "3.15"
21
+ enable-cache: false
20
22
  cache-dependency-glob: "pyproject.toml"
21
23
  github-token: ${{ secrets.GITHUB_TOKEN }}
22
24
  - name: Build package
23
- run: uv build --python 3.14 --python-preference only-managed --sdist --wheel . --out-dir dist
25
+ run: uv build --python 3.15 --python-preference only-managed --sdist --wheel . --out-dir dist
24
26
  - name: Store the distribution packages
25
- uses: actions/upload-artifact@v6
27
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
26
28
  with:
27
29
  name: ${{ env.dists-artifact-name }}
28
30
  path: dist/*
29
-
30
31
  release:
31
32
  needs:
32
33
  - build
33
- runs-on: ubuntu-latest
34
+ runs-on: ubuntu-26.04
34
35
  environment:
35
36
  name: release
36
37
  url: https://pypi.org/project/devpi-process/${{ github.ref_name }}
@@ -38,11 +39,11 @@ jobs:
38
39
  id-token: write
39
40
  steps:
40
41
  - name: Download all the dists
41
- uses: actions/download-artifact@v7
42
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
42
43
  with:
43
44
  name: ${{ env.dists-artifact-name }}
44
45
  path: dist/
45
46
  - name: Publish to PyPI
46
- uses: pypa/gh-action-pypi-publish@v1.13.0
47
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
47
48
  with:
48
49
  attestations: true
@@ -3,6 +3,5 @@ MD013:
3
3
  headers: false
4
4
  line_length: 120
5
5
  tables: false
6
-
7
6
  MD046:
8
7
  style: fenced
@@ -1,3 +1,5 @@
1
+ default_language_version:
2
+ python: python3.15
1
3
  repos:
2
4
  - repo: https://github.com/pre-commit/pre-commit-hooks
3
5
  rev: v6.0.0
@@ -5,34 +7,46 @@ repos:
5
7
  - id: end-of-file-fixer
6
8
  - id: trailing-whitespace
7
9
  - repo: https://github.com/python-jsonschema/check-jsonschema
8
- rev: 0.36.2
10
+ rev: 0.38.2
9
11
  hooks:
10
12
  - id: check-github-workflows
11
13
  args: ["--verbose"]
12
14
  - repo: https://github.com/codespell-project/codespell
13
- rev: v2.4.1
15
+ rev: v2.4.3
14
16
  hooks:
15
17
  - id: codespell
16
- additional_dependencies: ["tomli>=2.2.1"]
17
18
  - repo: https://github.com/tox-dev/tox-toml-fmt
18
- rev: "v1.7.2"
19
+ rev: "v1.11.0"
19
20
  hooks:
20
21
  - id: tox-toml-fmt
21
22
  - repo: https://github.com/tox-dev/pyproject-fmt
22
- rev: "v2.16.2"
23
+ rev: "v2.30.1"
23
24
  hooks:
24
25
  - id: pyproject-fmt
25
26
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: "v0.15.2"
27
+ rev: "v0.16.10"
27
28
  hooks:
28
29
  - id: ruff-format
29
30
  - id: ruff
30
31
  args: ["--fix", "--unsafe-fixes", "--exit-non-zero-on-fix"]
31
- - repo: https://github.com/rbubley/mirrors-prettier
32
- rev: "v3.8.1"
33
- hooks:
34
- - id: prettier
35
- args: ["--print-width=120", "--prose-wrap=always"]
32
+ - repo: https://github.com/google/yamlfmt
33
+ rev: "v0.21.0"
34
+ hooks:
35
+ - id: yamlfmt
36
+ - repo: local
37
+ hooks:
38
+ - id: mdformat
39
+ name: mdformat
40
+ entry: mdformat --wrap 120
41
+ language: python
42
+ types: [markdown]
43
+ additional_dependencies:
44
+ - mdformat-gfm>=1
45
+ - mdformat-ruff>=0.1.3
46
+ - repo: https://github.com/zizmorcore/zizmor-pre-commit
47
+ rev: v1.30.1
48
+ hooks:
49
+ - id: zizmor
36
50
  - repo: meta
37
51
  hooks:
38
52
  - id: check-hooks-apply
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: devpi-process
3
- Version: 1.1.1
3
+ Version: 1.3.0
4
4
  Summary: devpi process provides a programmatic API to create and use a devpi server process
5
5
  Project-URL: Homepage, https://github.com/tox-dev/devpi-process#readme
6
6
  Project-URL: Source, https://github.com/tox-dev/devpi-process
@@ -18,18 +18,17 @@ Classifier: Operating System :: MacOS :: MacOS X
18
18
  Classifier: Operating System :: Microsoft :: Windows
19
19
  Classifier: Operating System :: POSIX
20
20
  Classifier: Programming Language :: Python :: 3 :: Only
21
- Classifier: Programming Language :: Python :: 3.10
22
21
  Classifier: Programming Language :: Python :: 3.11
23
22
  Classifier: Programming Language :: Python :: 3.12
24
23
  Classifier: Programming Language :: Python :: 3.13
25
24
  Classifier: Programming Language :: Python :: 3.14
25
+ Classifier: Programming Language :: Python :: 3.15
26
26
  Classifier: Topic :: Software Development :: Libraries
27
27
  Classifier: Topic :: Software Development :: Testing
28
28
  Classifier: Topic :: Utilities
29
- Requires-Python: >=3.10
30
- Requires-Dist: devpi-client>=7.2
31
- Requires-Dist: devpi-server>=6.17
32
- Requires-Dist: typing-extensions>=4.15; python_version < '3.11'
29
+ Requires-Python: >=3.11
30
+ Requires-Dist: devpi-client>=7.3
31
+ Requires-Dist: devpi-server>=6.20.3
33
32
  Description-Content-Type: text/markdown
34
33
 
35
34
  # devpi-process
@@ -2,7 +2,7 @@
2
2
  build-backend = "hatchling.build"
3
3
  requires = [
4
4
  "hatch-vcs>=0.5",
5
- "hatchling>=1.28",
5
+ "hatchling>=1.32.4",
6
6
  ]
7
7
 
8
8
  [project]
@@ -23,7 +23,7 @@ maintainers = [
23
23
  authors = [
24
24
  { name = "Bernát Gábor", email = "gaborjbernat@gmail.com" },
25
25
  ]
26
- requires-python = ">=3.10"
26
+ requires-python = ">=3.11"
27
27
  classifiers = [
28
28
  "Development Status :: 5 - Production/Stable",
29
29
  "Framework :: tox",
@@ -33,11 +33,11 @@ classifiers = [
33
33
  "Operating System :: Microsoft :: Windows",
34
34
  "Operating System :: POSIX",
35
35
  "Programming Language :: Python :: 3 :: Only",
36
- "Programming Language :: Python :: 3.10",
37
36
  "Programming Language :: Python :: 3.11",
38
37
  "Programming Language :: Python :: 3.12",
39
38
  "Programming Language :: Python :: 3.13",
40
39
  "Programming Language :: Python :: 3.14",
40
+ "Programming Language :: Python :: 3.15",
41
41
  "Topic :: Software Development :: Libraries",
42
42
  "Topic :: Software Development :: Testing",
43
43
  "Topic :: Utilities",
@@ -46,9 +46,8 @@ dynamic = [
46
46
  "version",
47
47
  ]
48
48
  dependencies = [
49
- "devpi-client>=7.2",
50
- "devpi-server>=6.17",
51
- "typing-extensions>=4.15; python_version<'3.11'",
49
+ "devpi-client>=7.3",
50
+ "devpi-server>=6.20.3",
52
51
  ]
53
52
  urls.Homepage = "https://github.com/tox-dev/devpi-process#readme"
54
53
  urls.Source = "https://github.com/tox-dev/devpi-process"
@@ -64,25 +63,25 @@ dev = [
64
63
  test = [
65
64
  "covdefaults>=2.3",
66
65
  "httpx>=0.28.1",
67
- "pytest>=8.4.2",
68
- "pytest-cov>=7",
66
+ "pytest>=9.1.1",
67
+ "pytest-cov>=7.1",
69
68
  ]
70
69
  type = [
71
- "ty>=0.0.17",
70
+ "ty>=0.0.84",
72
71
  { include-group = "test" },
73
72
  ]
74
73
  lint = [
75
- "pre-commit-uv>=4.2",
74
+ "pre-commit-uv>=4.3",
76
75
  ]
77
76
  pkg-meta = [
78
77
  "check-wheel-contents>=0.6.3",
79
- "twine>=6.2",
80
- "uv>=0.10.2",
78
+ "twine>=7",
79
+ "uv>=0.12.22",
81
80
  ]
82
81
 
83
82
  [tool.hatch]
84
- build.hooks.vcs.version-file = "src/devpi_process/_version.py"
85
83
  version.source = "vcs"
84
+ build.hooks.vcs.version-file = "src/devpi_process/_version.py"
86
85
 
87
86
  [tool.black]
88
87
  line-length = 120
@@ -96,23 +95,23 @@ lint.select = [
96
95
  "ALL",
97
96
  ]
98
97
  lint.ignore = [
99
- "ANN401", # allow Any as type annotation
100
- "COM812", # Conflict with formatter
101
- "CPY", # No copyright statements
102
- "D203", # `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible
103
- "D212", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible
104
- "DOC", # not supported
105
- "ISC001", # Conflict with formatter
106
- "RUF067", # `__init__` module should only contain docstrings and re-exports
107
- "S104", # Possible binding to all interface
98
+ "any-type", # allow Any as type annotation
99
+ "CPY", # No copyright statements
100
+ "DOC", # not supported
101
+ "hardcoded-bind-all-interfaces", # Possible binding to all interface
102
+ "incorrect-blank-line-before-class", # `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible
103
+ "missing-trailing-comma", # Conflict with formatter
104
+ "multi-line-summary-first-line", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible
105
+ "non-empty-init-module", # `__init__` module should only contain docstrings and re-exports
106
+ "single-line-implicit-string-concatenation", # Conflict with formatter
108
107
  ]
109
108
  lint.per-file-ignores."tests/**/*.py" = [
110
- "D", # don't care about documentation in tests
111
- "FBT", # don't care about booleans as positional arguments in tests
112
- "INP001", # no implicit namespace
113
- "PLR2004", # Magic value used in comparison, consider replacing with a constant variable
114
- "S101", # asserts allowed in tests
115
- "S603", # `subprocess` call: check for execution of untrusted input
109
+ "assert", # asserts allowed in tests
110
+ "D", # don't care about documentation in tests
111
+ "FBT", # don't care about booleans as positional arguments in tests
112
+ "implicit-namespace-package", # no implicit namespace
113
+ "magic-value-comparison", # Magic value used in comparison, consider replacing with a constant variable
114
+ "subprocess-without-shell-equals-true", # `subprocess` call: check for execution of untrusted input
116
115
  ]
117
116
  lint.isort = { known-first-party = [
118
117
  "devpi_process",
@@ -127,7 +126,10 @@ write-changes = true
127
126
  count = true
128
127
 
129
128
  [tool.pyproject-fmt]
130
- max_supported_python = "3.14"
129
+ max_supported_python = "3.15"
130
+
131
+ [tool.ty]
132
+ environment.python-version = "3.15"
131
133
 
132
134
  [tool.coverage]
133
135
  run.parallel = true
@@ -146,6 +148,3 @@ report.fail_under = 98
146
148
  report.omit = []
147
149
  html.show_contexts = true
148
150
  html.skip_covered = false
149
-
150
- [tool.ty]
151
- environment.python-version = "3.14"
@@ -9,7 +9,7 @@ import sys
9
9
  import sysconfig
10
10
  from contextlib import closing
11
11
  from pathlib import Path
12
- from subprocess import PIPE, Popen, run # noqa: S404
12
+ from subprocess import PIPE, Popen, run # ruff:ignore[suspicious-subprocess-import]
13
13
  from threading import Thread
14
14
  from typing import IO, TYPE_CHECKING, cast
15
15
 
@@ -18,15 +18,11 @@ from ._version import __version__
18
18
  if TYPE_CHECKING:
19
19
  from collections.abc import Iterator, Sequence
20
20
  from types import TracebackType
21
-
22
- if sys.version_info >= (3, 11): # pragma: no cover (py311+)
23
- from typing import Self
24
- else: # pragma: no cover (<py311)
25
- from typing_extensions import Self
21
+ from typing import Self
26
22
 
27
23
 
28
24
  def _check_call(cmd: list[str]) -> None:
29
- run(cmd, check=True, capture_output=True) # noqa: S603
25
+ run(cmd, check=True, capture_output=True) # ruff:ignore[subprocess-without-shell-equals-true]
30
26
 
31
27
 
32
28
  class Index:
@@ -48,7 +44,7 @@ class Index:
48
44
 
49
45
  @property
50
46
  def url(self) -> str:
51
- """:return: the URL to the index server"""
47
+ """The URL to the index server."""
52
48
  return f"{self._server_url}/{self.name}/+simple/"
53
49
 
54
50
  def use(self) -> None:
@@ -75,7 +71,7 @@ class IndexServer:
75
71
  def __init__(
76
72
  self,
77
73
  path: Path,
78
- with_root_pypi: bool = False, # noqa: FBT001, FBT002
74
+ with_root_pypi: bool = False, # ruff:ignore[boolean-type-hint-positional-argument, boolean-default-value-positional-argument]
79
75
  start_args: Sequence[str] | None = None,
80
76
  ) -> None:
81
77
  """
@@ -90,7 +86,7 @@ class IndexServer:
90
86
  self._start_args: Sequence[str] = [] if start_args is None else start_args
91
87
 
92
88
  self.host, self.port = "localhost", _find_free_port()
93
- self._passwd = "".join(random.choices(string.ascii_letters, k=8)) # noqa: S311
89
+ self._passwd = "".join(random.choices(string.ascii_letters, k=8)) # ruff:ignore[suspicious-non-cryptographic-random-usage]
94
90
 
95
91
  scripts_dir = sysconfig.get_path("scripts")
96
92
  if scripts_dir is None:
@@ -113,7 +109,7 @@ class IndexServer:
113
109
 
114
110
  @property
115
111
  def user(self) -> str:
116
- """:return: username of the index server"""
112
+ """Username of the index server."""
117
113
  return "root"
118
114
 
119
115
  def __enter__(self) -> Self:
@@ -134,7 +130,7 @@ class IndexServer:
134
130
  # 2. start the server
135
131
  cmd = [self._server, "--serverdir", server_at, "--port", str(self.port)]
136
132
  cmd.extend(self._start_args)
137
- self._process = Popen(cmd, stdout=PIPE, universal_newlines=True) # noqa: S603
133
+ self._process = Popen(cmd, stdout=PIPE, universal_newlines=True) # ruff:ignore[subprocess-without-shell-equals-true]
138
134
  stdout = self._drain_stdout()
139
135
  for line in stdout: # pragma: no branch # will always loop at least once
140
136
  if "serving at url" in line:
@@ -153,7 +149,7 @@ class IndexServer:
153
149
  stdout = cast("IO[str]", process.stdout)
154
150
  while True:
155
151
  if process.poll() is not None: # pragma: no cover
156
- print(f"devpi server with pid {process.pid} at {self._server_dir} died") # noqa: T201
152
+ print(f"devpi server with pid {process.pid} at {self._server_dir} died") # ruff:ignore[print]
157
153
  break
158
154
  yield stdout.readline()
159
155
 
@@ -201,7 +197,7 @@ class IndexServer:
201
197
 
202
198
  @property
203
199
  def url(self) -> str:
204
- """:return: url to the index server"""
200
+ """URL to the index server."""
205
201
  return f"http://{self.host}:{self.port}"
206
202
 
207
203
  def __repr__(self) -> str:
@@ -0,0 +1,24 @@
1
+ # file generated by vcs-versioning
2
+ # don't change, don't track in version control
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "__version__",
7
+ "__version_tuple__",
8
+ "version",
9
+ "version_tuple",
10
+ "__commit_id__",
11
+ "commit_id",
12
+ ]
13
+
14
+ version: str
15
+ __version__: str
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
20
+
21
+ __version__ = version = '1.3.0'
22
+ __version_tuple__ = version_tuple = (1, 3, 0)
23
+
24
+ __commit_id__ = commit_id = None
@@ -50,8 +50,8 @@ content = {
50
50
 
51
51
  def build_wheel(
52
52
  wheel_directory: str,
53
- metadata_directory: str | None = None, # noqa: ARG001
54
- config_settings: None = None, # noqa: ARG001
53
+ metadata_directory: str | None = None, # ruff:ignore[unused-function-argument]
54
+ config_settings: None = None, # ruff:ignore[unused-function-argument]
55
55
  ) -> str:
56
56
  base_name = f"{name}-{version}-py{sys.version_info[0]}-none-any.whl"
57
57
  path = Path(wheel_directory) / base_name
@@ -62,14 +62,14 @@ def build_wheel(
62
62
 
63
63
 
64
64
  def get_requires_for_build_wheel(
65
- config_settings: None = None, # noqa: ARG001
65
+ config_settings: None = None, # ruff:ignore[unused-function-argument]
66
66
  ) -> list[str]:
67
67
  return [] # pragma: no cover # only executed in non-host pythons
68
68
 
69
69
 
70
70
  def build_sdist(
71
71
  sdist_directory: str,
72
- config_settings: None = None, # noqa: ARG001
72
+ config_settings: None = None, # ruff:ignore[unused-function-argument]
73
73
  ) -> str:
74
74
  result = f"{name}-{version}.tar.gz"
75
75
  with tarfile.open(str(Path(sdist_directory) / result), "w:gz") as tar:
@@ -86,6 +86,6 @@ def build_sdist(
86
86
 
87
87
 
88
88
  def get_requires_for_build_sdist(
89
- config_settings: None = None, # noqa: ARG001
89
+ config_settings: None = None, # ruff:ignore[unused-function-argument]
90
90
  ) -> list[str]:
91
91
  return [] # pragma: no cover # only executed in non-host pythons
@@ -14,7 +14,7 @@ if TYPE_CHECKING:
14
14
 
15
15
 
16
16
  def test_version() -> None:
17
- import devpi_process # noqa: PLC0415
17
+ import devpi_process # ruff:ignore[import-outside-top-level]
18
18
 
19
19
  assert devpi_process.__version__ is not None
20
20
 
@@ -69,5 +69,7 @@ def test_create_server_with_pypi(tmp_path: Path) -> None:
69
69
 
70
70
  def test_create_server_start_args(tmp_path: Path) -> None:
71
71
  with IndexServer(tmp_path, start_args=["--offline-mode"]) as server:
72
- assert server._process is not None # noqa: SLF001
73
- assert server._process.args[-1] == "--offline-mode" # type: ignore[index] # noqa: SLF001
72
+ assert server._process is not None # ruff:ignore[private-member-access]
73
+ args = server._process.args # ruff:ignore[private-member-access]
74
+ assert isinstance(args, list)
75
+ assert args[-1] == "--offline-mode"
@@ -1,9 +1,10 @@
1
- requires = [ "tox>=4.34.1", "tox-uv>=1.29" ]
2
- env_list = [ "3.14", "3.13", "3.12", "3.11", "3.10", "fix", "pkg_meta", "type" ]
1
+ requires = [ "tox>=4.64.7", "tox-uv>=1.36.1" ]
2
+ env_list = [ "3.15", "3.14", "3.13", "3.12", "3.11", "3.15t", "fix", "pkg_meta", "type" ]
3
3
  skip_missing_interpreters = true
4
4
 
5
5
  [env_run_base]
6
6
  description = "run the unit tests with pytest under {env_name}"
7
+ default_base_python = [ "3.15" ]
7
8
  package = "wheel"
8
9
  wheel_build_env = ".pkg"
9
10
  dependency_groups = [ "test" ]
@@ -14,7 +15,7 @@ commands = [
14
15
  "python",
15
16
  "-m",
16
17
  "pytest",
17
- { replace = "posargs", extend = true, default = [
18
+ { replace = "posargs", default = [
18
19
  "--cov",
19
20
  "{env_site_packages_dir}{/}devpi_process",
20
21
  "--cov",
@@ -31,10 +32,13 @@ commands = [
31
32
  "--junitxml",
32
33
  "{work_dir}{/}junit.{env_name}.xml",
33
34
  "tests",
34
- ] },
35
+ ], extend = true },
35
36
  ],
36
37
  ]
37
38
 
39
+ [env_pkg_base]
40
+ default_base_python = [ "3.15" ]
41
+
38
42
  [env.fix]
39
43
  description = "format the code base to adhere to our styles, and complain about what we cannot do automatically"
40
44
  skip_install = true
@@ -1 +0,0 @@
1
- tidelift: pypi/devpi-process
@@ -1,6 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: "github-actions"
4
- directory: "/"
5
- schedule:
6
- interval: "daily"
@@ -1,34 +0,0 @@
1
- # file generated by setuptools-scm
2
- # don't change, don't track in version control
3
-
4
- __all__ = [
5
- "__version__",
6
- "__version_tuple__",
7
- "version",
8
- "version_tuple",
9
- "__commit_id__",
10
- "commit_id",
11
- ]
12
-
13
- TYPE_CHECKING = False
14
- if TYPE_CHECKING:
15
- from typing import Tuple
16
- from typing import Union
17
-
18
- VERSION_TUPLE = Tuple[Union[int, str], ...]
19
- COMMIT_ID = Union[str, None]
20
- else:
21
- VERSION_TUPLE = object
22
- COMMIT_ID = object
23
-
24
- version: str
25
- __version__: str
26
- __version_tuple__: VERSION_TUPLE
27
- version_tuple: VERSION_TUPLE
28
- commit_id: COMMIT_ID
29
- __commit_id__: COMMIT_ID
30
-
31
- __version__ = version = '1.1.1'
32
- __version_tuple__ = version_tuple = (1, 1, 1)
33
-
34
- __commit_id__ = commit_id = None
File without changes
File without changes
File without changes