devpi-process 1.1.1__tar.gz → 1.2.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 (24) hide show
  1. devpi_process-1.2.0/.github/FUNDING.yaml +3 -0
  2. {devpi_process-1.1.1 → devpi_process-1.2.0}/.github/dependabot.yaml +2 -0
  3. {devpi_process-1.1.1 → devpi_process-1.2.0}/.github/workflows/check.yaml +8 -5
  4. {devpi_process-1.1.1 → devpi_process-1.2.0}/.github/workflows/release.yaml +9 -9
  5. {devpi_process-1.1.1 → devpi_process-1.2.0}/.markdownlint.yaml +0 -1
  6. {devpi_process-1.1.1 → devpi_process-1.2.0}/.pre-commit-config.yaml +23 -10
  7. {devpi_process-1.1.1 → devpi_process-1.2.0}/PKG-INFO +2 -1
  8. {devpi_process-1.1.1 → devpi_process-1.2.0}/pyproject.toml +7 -6
  9. {devpi_process-1.1.1 → devpi_process-1.2.0}/src/devpi_process/__init__.py +9 -9
  10. devpi_process-1.2.0/src/devpi_process/_version.py +24 -0
  11. {devpi_process-1.1.1 → devpi_process-1.2.0}/tests/demo_pkg_inline/build.py +5 -5
  12. {devpi_process-1.1.1 → devpi_process-1.2.0}/tests/test_devpi_process.py +5 -3
  13. {devpi_process-1.1.1 → devpi_process-1.2.0}/tox.toml +3 -3
  14. devpi_process-1.1.1/.github/FUNDING.yaml +0 -1
  15. devpi_process-1.1.1/src/devpi_process/_version.py +0 -34
  16. {devpi_process-1.1.1 → devpi_process-1.2.0}/.github/SECURITY.md +0 -0
  17. {devpi_process-1.1.1 → devpi_process-1.2.0}/.github/release.yaml +0 -0
  18. {devpi_process-1.1.1 → devpi_process-1.2.0}/.gitignore +0 -0
  19. {devpi_process-1.1.1 → devpi_process-1.2.0}/CHANGELOG.md +0 -0
  20. {devpi_process-1.1.1 → devpi_process-1.2.0}/CODE_OF_CONDUCT.md +0 -0
  21. {devpi_process-1.1.1 → devpi_process-1.2.0}/LICENSE.txt +0 -0
  22. {devpi_process-1.1.1 → devpi_process-1.2.0}/README.md +0 -0
  23. {devpi_process-1.1.1 → devpi_process-1.2.0}/src/devpi_process/py.typed +0 -0
  24. {devpi_process-1.1.1 → devpi_process-1.2.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
@@ -4,3 +4,5 @@ updates:
4
4
  directory: "/"
5
5
  schedule:
6
6
  interval: "daily"
7
+ cooldown:
8
+ default-days: 7
@@ -7,11 +7,11 @@ 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
17
  runs-on: ubuntu-latest
@@ -19,6 +19,8 @@ jobs:
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"
@@ -28,13 +30,14 @@ jobs:
28
30
  - dev
29
31
  - pkg_meta
30
32
  steps:
31
- - uses: actions/checkout@v6
33
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
32
34
  with:
33
35
  fetch-depth: 0
36
+ persist-credentials: false
34
37
  - name: Install the latest version of uv
35
- uses: astral-sh/setup-uv@v7
38
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
36
39
  with:
37
- enable-cache: true
40
+ enable-cache: false
38
41
  cache-dependency-glob: "pyproject.toml"
39
42
  github-token: ${{ secrets.GITHUB_TOKEN }}
40
43
  - name: Install tox
@@ -2,31 +2,31 @@ 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
11
  runs-on: ubuntu-latest
12
12
  steps:
13
- - uses: actions/checkout@v6
13
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
18
19
  with:
19
- enable-cache: true
20
+ enable-cache: false
20
21
  cache-dependency-glob: "pyproject.toml"
21
22
  github-token: ${{ secrets.GITHUB_TOKEN }}
22
23
  - name: Build package
23
24
  run: uv build --python 3.14 --python-preference only-managed --sdist --wheel . --out-dir dist
24
25
  - name: Store the distribution packages
25
- uses: actions/upload-artifact@v6
26
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
26
27
  with:
27
28
  name: ${{ env.dists-artifact-name }}
28
29
  path: dist/*
29
-
30
30
  release:
31
31
  needs:
32
32
  - build
@@ -38,11 +38,11 @@ jobs:
38
38
  id-token: write
39
39
  steps:
40
40
  - name: Download all the dists
41
- uses: actions/download-artifact@v7
41
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
42
42
  with:
43
43
  name: ${{ env.dists-artifact-name }}
44
44
  path: dist/
45
45
  - name: Publish to PyPI
46
- uses: pypa/gh-action-pypi-publish@v1.13.0
46
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
47
47
  with:
48
48
  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
@@ -5,34 +5,47 @@ repos:
5
5
  - id: end-of-file-fixer
6
6
  - id: trailing-whitespace
7
7
  - repo: https://github.com/python-jsonschema/check-jsonschema
8
- rev: 0.36.2
8
+ rev: 0.37.4
9
9
  hooks:
10
10
  - id: check-github-workflows
11
11
  args: ["--verbose"]
12
12
  - repo: https://github.com/codespell-project/codespell
13
- rev: v2.4.1
13
+ rev: v2.4.3
14
14
  hooks:
15
15
  - id: codespell
16
16
  additional_dependencies: ["tomli>=2.2.1"]
17
17
  - repo: https://github.com/tox-dev/tox-toml-fmt
18
- rev: "v1.7.2"
18
+ rev: "v1.9.3"
19
19
  hooks:
20
20
  - id: tox-toml-fmt
21
21
  - repo: https://github.com/tox-dev/pyproject-fmt
22
- rev: "v2.16.2"
22
+ rev: "v2.25.3"
23
23
  hooks:
24
24
  - id: pyproject-fmt
25
25
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: "v0.15.2"
26
+ rev: "v0.15.22"
27
27
  hooks:
28
28
  - id: ruff-format
29
29
  - id: ruff
30
30
  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"]
31
+ - repo: https://github.com/google/yamlfmt
32
+ rev: "v0.21.0"
33
+ hooks:
34
+ - id: yamlfmt
35
+ - repo: local
36
+ hooks:
37
+ - id: mdformat
38
+ name: mdformat
39
+ entry: mdformat --wrap 120
40
+ language: python
41
+ types: [markdown]
42
+ additional_dependencies:
43
+ - mdformat-gfm>=1
44
+ - mdformat-ruff>=0.1.3
45
+ - repo: https://github.com/zizmorcore/zizmor-pre-commit
46
+ rev: v1.27.0
47
+ hooks:
48
+ - id: zizmor
36
49
  - repo: meta
37
50
  hooks:
38
51
  - id: check-hooks-apply
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devpi-process
3
- Version: 1.1.1
3
+ Version: 1.2.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
@@ -23,6 +23,7 @@ Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Programming Language :: Python :: 3.12
24
24
  Classifier: Programming Language :: Python :: 3.13
25
25
  Classifier: Programming Language :: Python :: 3.14
26
+ Classifier: Programming Language :: Python :: 3.15
26
27
  Classifier: Topic :: Software Development :: Libraries
27
28
  Classifier: Topic :: Software Development :: Testing
28
29
  Classifier: Topic :: Utilities
@@ -38,6 +38,7 @@ classifiers = [
38
38
  "Programming Language :: Python :: 3.12",
39
39
  "Programming Language :: Python :: 3.13",
40
40
  "Programming Language :: Python :: 3.14",
41
+ "Programming Language :: Python :: 3.15",
41
42
  "Topic :: Software Development :: Libraries",
42
43
  "Topic :: Software Development :: Testing",
43
44
  "Topic :: Utilities",
@@ -68,7 +69,7 @@ test = [
68
69
  "pytest-cov>=7",
69
70
  ]
70
71
  type = [
71
- "ty>=0.0.17",
72
+ "ty>=0.0.19",
72
73
  { include-group = "test" },
73
74
  ]
74
75
  lint = [
@@ -81,8 +82,8 @@ pkg-meta = [
81
82
  ]
82
83
 
83
84
  [tool.hatch]
84
- build.hooks.vcs.version-file = "src/devpi_process/_version.py"
85
85
  version.source = "vcs"
86
+ build.hooks.vcs.version-file = "src/devpi_process/_version.py"
86
87
 
87
88
  [tool.black]
88
89
  line-length = 120
@@ -127,7 +128,10 @@ write-changes = true
127
128
  count = true
128
129
 
129
130
  [tool.pyproject-fmt]
130
- max_supported_python = "3.14"
131
+ max_supported_python = "3.15"
132
+
133
+ [tool.ty]
134
+ environment.python-version = "3.14"
131
135
 
132
136
  [tool.coverage]
133
137
  run.parallel = true
@@ -146,6 +150,3 @@ report.fail_under = 98
146
150
  report.omit = []
147
151
  html.show_contexts = true
148
152
  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
 
@@ -26,7 +26,7 @@ if TYPE_CHECKING:
26
26
 
27
27
 
28
28
  def _check_call(cmd: list[str]) -> None:
29
- run(cmd, check=True, capture_output=True) # noqa: S603
29
+ run(cmd, check=True, capture_output=True) # ruff:ignore[subprocess-without-shell-equals-true]
30
30
 
31
31
 
32
32
  class Index:
@@ -48,7 +48,7 @@ class Index:
48
48
 
49
49
  @property
50
50
  def url(self) -> str:
51
- """:return: the URL to the index server"""
51
+ """The URL to the index server."""
52
52
  return f"{self._server_url}/{self.name}/+simple/"
53
53
 
54
54
  def use(self) -> None:
@@ -75,7 +75,7 @@ class IndexServer:
75
75
  def __init__(
76
76
  self,
77
77
  path: Path,
78
- with_root_pypi: bool = False, # noqa: FBT001, FBT002
78
+ with_root_pypi: bool = False, # ruff:ignore[boolean-type-hint-positional-argument, boolean-default-value-positional-argument]
79
79
  start_args: Sequence[str] | None = None,
80
80
  ) -> None:
81
81
  """
@@ -90,7 +90,7 @@ class IndexServer:
90
90
  self._start_args: Sequence[str] = [] if start_args is None else start_args
91
91
 
92
92
  self.host, self.port = "localhost", _find_free_port()
93
- self._passwd = "".join(random.choices(string.ascii_letters, k=8)) # noqa: S311
93
+ self._passwd = "".join(random.choices(string.ascii_letters, k=8)) # ruff:ignore[suspicious-non-cryptographic-random-usage]
94
94
 
95
95
  scripts_dir = sysconfig.get_path("scripts")
96
96
  if scripts_dir is None:
@@ -113,7 +113,7 @@ class IndexServer:
113
113
 
114
114
  @property
115
115
  def user(self) -> str:
116
- """:return: username of the index server"""
116
+ """Username of the index server."""
117
117
  return "root"
118
118
 
119
119
  def __enter__(self) -> Self:
@@ -134,7 +134,7 @@ class IndexServer:
134
134
  # 2. start the server
135
135
  cmd = [self._server, "--serverdir", server_at, "--port", str(self.port)]
136
136
  cmd.extend(self._start_args)
137
- self._process = Popen(cmd, stdout=PIPE, universal_newlines=True) # noqa: S603
137
+ self._process = Popen(cmd, stdout=PIPE, universal_newlines=True) # ruff:ignore[subprocess-without-shell-equals-true]
138
138
  stdout = self._drain_stdout()
139
139
  for line in stdout: # pragma: no branch # will always loop at least once
140
140
  if "serving at url" in line:
@@ -153,7 +153,7 @@ class IndexServer:
153
153
  stdout = cast("IO[str]", process.stdout)
154
154
  while True:
155
155
  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
156
+ print(f"devpi server with pid {process.pid} at {self._server_dir} died") # ruff:ignore[print]
157
157
  break
158
158
  yield stdout.readline()
159
159
 
@@ -201,7 +201,7 @@ class IndexServer:
201
201
 
202
202
  @property
203
203
  def url(self) -> str:
204
- """:return: url to the index server"""
204
+ """URL to the index server."""
205
205
  return f"http://{self.host}:{self.port}"
206
206
 
207
207
  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.2.0'
22
+ __version_tuple__ = version_tuple = (1, 2, 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,5 +1,5 @@
1
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" ]
2
+ env_list = [ "3.15", "3.14", "3.13", "3.12", "3.11", "3.10", "3.15t", "fix", "pkg_meta", "type" ]
3
3
  skip_missing_interpreters = true
4
4
 
5
5
  [env_run_base]
@@ -14,7 +14,7 @@ commands = [
14
14
  "python",
15
15
  "-m",
16
16
  "pytest",
17
- { replace = "posargs", extend = true, default = [
17
+ { replace = "posargs", default = [
18
18
  "--cov",
19
19
  "{env_site_packages_dir}{/}devpi_process",
20
20
  "--cov",
@@ -31,7 +31,7 @@ commands = [
31
31
  "--junitxml",
32
32
  "{work_dir}{/}junit.{env_name}.xml",
33
33
  "tests",
34
- ] },
34
+ ], extend = true },
35
35
  ],
36
36
  ]
37
37
 
@@ -1 +0,0 @@
1
- tidelift: pypi/devpi-process
@@ -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