py-api-dumper 4.2.0__tar.gz → 4.2.3__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 (33) hide show
  1. py_api_dumper-4.2.3/.github/dependabot.yml +11 -0
  2. py_api_dumper-4.2.3/.github/workflows/publish.yml +76 -0
  3. py_api_dumper-4.2.3/.github/workflows/test.yml +72 -0
  4. py_api_dumper-4.2.3/.gitignore +8 -0
  5. py_api_dumper-4.2.3/.pre-commit-config.yaml +43 -0
  6. py_api_dumper-4.2.3/LICENSES/MIT.txt +18 -0
  7. {py_api_dumper-4.2.0/src/py_api_dumper.egg-info → py_api_dumper-4.2.3}/PKG-INFO +2 -2
  8. py_api_dumper-4.2.3/REUSE.toml +23 -0
  9. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/pyproject.toml +27 -7
  10. py_api_dumper-4.2.3/requirements-dev.txt +8 -0
  11. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/src/py_api_dumper/__init__.py +17 -9
  12. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3/src/py_api_dumper.egg-info}/PKG-INFO +2 -2
  13. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/src/py_api_dumper.egg-info/SOURCES.txt +10 -0
  14. py_api_dumper-4.2.3/src/py_api_dumper.egg-info/scm_file_list.json +29 -0
  15. py_api_dumper-4.2.3/src/py_api_dumper.egg-info/scm_version.json +8 -0
  16. /py_api_dumper-4.2.0/LICENSES/MIT.txt → /py_api_dumper-4.2.3/LICENSE +0 -0
  17. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/LICENSES/CC0-1.0.txt +0 -0
  18. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/MANIFEST.in +0 -0
  19. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/README.md +0 -0
  20. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/setup.cfg +0 -0
  21. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/src/py_api_dumper/cli.py +0 -0
  22. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/src/py_api_dumper.egg-info/dependency_links.txt +0 -0
  23. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/src/py_api_dumper.egg-info/entry_points.txt +0 -0
  24. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/src/py_api_dumper.egg-info/top_level.txt +0 -0
  25. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/test/api_ref/__init__.py +0 -0
  26. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/test/api_ref/_priv_mod.py +0 -0
  27. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/test/api_ref/api_ref.txt +0 -0
  28. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/test/api_ref/ext_mod.c +0 -0
  29. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/test/api_ref/pub_mod.py +0 -0
  30. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/test/conftest.py +0 -0
  31. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/test/setup.py +0 -0
  32. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/test/test_diff.py +0 -0
  33. {py_api_dumper-4.2.0 → py_api_dumper-4.2.3}/test/test_dump.py +0 -0
@@ -0,0 +1,11 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "pip" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "weekly"
@@ -0,0 +1,76 @@
1
+ name: Publish package
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+ workflow_dispatch: null
8
+
9
+ jobs:
10
+ publish:
11
+ runs-on: ubuntu-latest
12
+
13
+ environment: ${{ github.event_name == 'workflow_dispatch' && 'testpypi' || 'pypi' }}
14
+
15
+ permissions:
16
+ id-token: write
17
+ attestations: write
18
+ contents: read
19
+
20
+ env:
21
+ SETUPTOOLS_SCM_OVERRIDES_FOR_PY_API_DUMPER: '{local_scheme="no-local-version"}'
22
+
23
+ steps:
24
+ - name: Checkout source code
25
+ uses: actions/checkout@v4
26
+ with:
27
+ fetch-depth: 0
28
+
29
+ - name: Set up Python
30
+ uses: actions/setup-python@v5
31
+ with:
32
+ python-version: '3.11'
33
+
34
+ - name: Initialise project
35
+ uses: nick-fields/retry@v2
36
+ with:
37
+ timeout_minutes: 5
38
+ max_attempts: 3
39
+ retry_wait_seconds: 30
40
+ command: |
41
+ python -m pip install --upgrade pip
42
+ python -m pip install ppqs
43
+ ppqs init
44
+ ppqs version
45
+
46
+ - name: Perform linting checks
47
+ run: |
48
+ ppqs lint
49
+
50
+ - name: Build project
51
+ run: |
52
+ ppqs build
53
+
54
+ - name: Run tests
55
+ run: |
56
+ ppqs test
57
+
58
+ - name: Validate metadata
59
+ run: |
60
+ twine check dist/*
61
+
62
+ - name: Attest build
63
+ uses: actions/attest-build-provenance@v2
64
+ with:
65
+ subject-path: "dist/*"
66
+
67
+ - name: Publish to PyPI
68
+ uses: pypa/gh-action-pypi-publish@release/v1
69
+ if: ${{ github.event_name == 'push' }}
70
+
71
+ - name: Publish to TestPyPI
72
+ uses: pypa/gh-action-pypi-publish@release/v1
73
+ if: ${{ github.event_name == 'workflow_dispatch' }}
74
+ with:
75
+ repository-url: https://test.pypi.org/legacy/
76
+ skip-existing: true
@@ -0,0 +1,72 @@
1
+ name: Test package
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - "*"
7
+ pull_request:
8
+ branches:
9
+ - "*"
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ python-version:
19
+ - "3.11"
20
+ - "3.12"
21
+ - "3.13"
22
+ - "3.14"
23
+ - "3.15"
24
+
25
+ steps:
26
+ - name: Checkout
27
+ uses: actions/checkout@v4
28
+ with:
29
+ fetch-depth: 0
30
+
31
+ - name: Set up Python ${{ matrix.python-version }}
32
+ uses: actions/setup-python@v5
33
+ with:
34
+ python-version: ${{ matrix.python-version }}
35
+
36
+ - name: Initialise project
37
+ uses: nick-fields/retry@v2
38
+ with:
39
+ timeout_minutes: 5
40
+ max_attempts: 3
41
+ retry_wait_seconds: 30
42
+ command: |
43
+ python -m pip install --upgrade pip
44
+ python -m pip install ppqs
45
+ ppqs init
46
+ ppqs version
47
+
48
+ - name: Perform linting checks
49
+ run: |
50
+ ppqs lint
51
+
52
+ - name: Build project
53
+ run: |
54
+ ppqs build
55
+
56
+ - name: Run tests
57
+ run: |
58
+ ppqs test
59
+
60
+ - name: Clean up build files
61
+ run: |
62
+ ppqs clean
63
+
64
+ all-done:
65
+ runs-on: ubuntu-latest
66
+
67
+ needs: test
68
+
69
+ steps:
70
+ - name: All done
71
+ run: |
72
+ echo All done
@@ -0,0 +1,8 @@
1
+ .coverage
2
+ /dist
3
+ /src/*.egg-info
4
+ /test/*.tmp
5
+ /test/*.tmp.gz
6
+ /test/api_ref/*.o
7
+ /test/api_ref/*.so
8
+ __pycache__
@@ -0,0 +1,43 @@
1
+ default_install_hook_types: [pre-commit, post-commit]
2
+
3
+ repos:
4
+
5
+ - repo: https://github.com/pre-commit/pre-commit-hooks
6
+ rev: v6.0.0
7
+ hooks:
8
+ - id: mixed-line-ending
9
+ args: [--fix=lf]
10
+ - id: trailing-whitespace
11
+ - id: end-of-file-fixer
12
+ - id: check-added-large-files
13
+ - id: check-toml
14
+ - id: check-yaml
15
+ - id: file-contents-sorter
16
+ args: [--unique]
17
+ files: ^\.gitattributes$|^\.gitignore$|^requirements-dev\.txt$
18
+
19
+ - repo: https://github.com/astral-sh/ruff-pre-commit
20
+ rev: v0.17.4
21
+ hooks:
22
+ - id: ruff-check
23
+
24
+ - repo: https://github.com/jsh9/pydoclint
25
+ rev: 0.12.0
26
+ hooks:
27
+ - id: pydoclint
28
+
29
+ - repo: https://github.com/assorted-pre-commit-hooks/copyright
30
+ rev: v0.12
31
+ hooks:
32
+ - id: copyright
33
+
34
+ - repo: https://github.com/psf/black
35
+ rev: 26.10.1
36
+ hooks:
37
+ - id: black
38
+ args: [--target-version=py311]
39
+
40
+ - repo: https://github.com/pre-commit/mirrors-mypy
41
+ rev: v2.4.1
42
+ hooks:
43
+ - id: mypy
@@ -0,0 +1,18 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Karl Wette
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
6
+ associated documentation files (the "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
9
+ following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all copies or substantial
12
+ portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
15
+ LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
16
+ EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
18
+ USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: py-api-dumper
3
- Version: 4.2.0
3
+ Version: 4.2.3
4
4
  Summary: Python API dumping and comparison tool
5
5
  Author-email: Karl Wette <karl.wette@anu.edu.au>
6
6
  License-Expression: MIT
@@ -8,7 +8,7 @@ Project-URL: Homepage, https://github.com/kwwette/py-api-dumper
8
8
  Project-URL: Issues, https://github.com/kwwette/py-api-dumper/issues
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Operating System :: OS Independent
11
- Requires-Python: >=3.10
11
+ Requires-Python: >=3.11
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSES/MIT.txt
14
14
  License-File: LICENSES/CC0-1.0.txt
@@ -0,0 +1,23 @@
1
+ version = 1
2
+
3
+ [[annotations]]
4
+ path = [
5
+ ".github/**",
6
+ ".gitignore",
7
+ ".pre-commit-config.yaml",
8
+ "MANIFEST.in",
9
+ "README.md",
10
+ "pyproject.toml",
11
+ "requirements-dev.txt",
12
+ "test/api_ref/api_ref.txt",
13
+ ]
14
+ SPDX-FileCopyrightText = "NONE"
15
+ SPDX-License-Identifier = "CC0-1.0"
16
+
17
+ [[annotations]]
18
+ path = [
19
+ "src/**/*.py",
20
+ "test/**/*.c",
21
+ "test/**/*.py",
22
+ ]
23
+ SPDX-License-Identifier = "MIT"
@@ -1,5 +1,5 @@
1
1
  [build-system]
2
- requires = ["setuptools>=64.0"]
2
+ requires = ["setuptools>=80", "setuptools-scm>=8"]
3
3
  build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
@@ -8,10 +8,13 @@ description = "Python API dumping and comparison tool"
8
8
  authors = [
9
9
  { name = "Karl Wette", email = "karl.wette@anu.edu.au" },
10
10
  ]
11
- requires-python = ">=3.10"
11
+ requires-python = ">=3.11"
12
12
  readme = "README.md"
13
13
  license = "MIT"
14
- license-files = ["LICENSES/MIT.txt", "LICENSES/CC0-1.0.txt"]
14
+ license-files = [
15
+ 'LICENSES/MIT.txt',
16
+ 'LICENSES/CC0-1.0.txt',
17
+ ]
15
18
  classifiers = [
16
19
  "Programming Language :: Python :: 3",
17
20
  "Operating System :: OS Independent",
@@ -25,8 +28,9 @@ Issues = "https://github.com/kwwette/py-api-dumper/issues"
25
28
  [project.scripts]
26
29
  py-api-dumper = "py_api_dumper.cli:cli"
27
30
 
28
- [tool.setuptools.dynamic]
29
- version = {attr = "py_api_dumper.__version__"}
31
+ [tool.setuptools_scm]
32
+ scm.git.pre_parse = "fail_on_shallow"
33
+ local_scheme = "node-and-timestamp"
30
34
 
31
35
  [tool.ruff]
32
36
  fix = true
@@ -88,12 +92,28 @@ script = """
88
92
  python -m pytest ...
89
93
  """
90
94
 
95
+ [tool.ppqs.scripts.version]
96
+ description = "Print the current package version"
97
+ script = "python -m setuptools_scm"
98
+
99
+ [tool.ppqs.scripts.tag]
100
+ description = "Tag a release"
101
+ script = [
102
+ ["git", "status"],
103
+ ["git", "diff", "--quiet", "--exit-code"],
104
+ ["ppqs", "lint"],
105
+ ["ppqs", "build"],
106
+ ["ppqs", "test"],
107
+ ["git", "commit", "--allow-empty", "-m", "Version {1}.{2}.{3}"],
108
+ ["git", "tag", "-a", "-m", "Version {1}.{2}.{3}", "v{1}.{2}.{3}"],
109
+ ]
110
+
91
111
  [tool.ppqs.scripts.upload]
92
112
  description = "Upload package"
93
113
  script = [
94
- ["ppqs", "test"],
114
+ ["ppqs", "lint"],
95
115
  ["ppqs", "build"],
96
- ["twine", "upload", ["dist", "*"]],
116
+ ["ppqs", "test"],
97
117
  ["git", "push", "origin"],
98
118
  ["git", "push", "origin", "--tags"],
99
119
  ]
@@ -0,0 +1,8 @@
1
+ build>=1.6.1
2
+ coverage>=7.17.1
3
+ pre-commit>=3.7
4
+ pytest-cov>=7.1.0
5
+ pytest>=9.2.0
6
+ setuptools-scm>=8
7
+ setuptools>=80
8
+ twine>=7.0.0
@@ -12,6 +12,7 @@ import inspect
12
12
  import json
13
13
  import pkgutil
14
14
  import sys
15
+ from importlib.metadata import PackageNotFoundError, version
15
16
  from pathlib import Path
16
17
  from types import ModuleType, NoneType
17
18
  from typing import (
@@ -30,7 +31,11 @@ from typing import (
30
31
  )
31
32
 
32
33
  __author__ = "Karl Wette"
33
- __version__ = "4.2.0"
34
+
35
+ try:
36
+ __version__ = version("py-api-dumper")
37
+ except PackageNotFoundError: # pragma: no cover
38
+ __version__ = "0.0.0.dev0"
34
39
 
35
40
  APIFilterType = TypeVar("APIFilterType", bound="APIFilter")
36
41
  APIDumpType = TypeVar("APIDumpType", bound="APIDump")
@@ -535,6 +540,7 @@ class APIDiff:
535
540
  self,
536
541
  old: APIDump,
537
542
  new: APIDump,
543
+ ignore_filters: Optional[List[APIFilter]] = None,
538
544
  ):
539
545
  """Differences between two Python public API dumps.
540
546
 
@@ -543,6 +549,8 @@ class APIDiff:
543
549
  Dump of the old public API.
544
550
  new (APIDump):
545
551
  Dump of the new public API.
552
+ ignore_filters (Optional[List[APIFilter]]):
553
+ Remove API entries that match filters.
546
554
  """
547
555
 
548
556
  self.old_dump_file = old.dump_file
@@ -551,6 +559,11 @@ class APIDiff:
551
559
  self.new_dump_file = new.dump_file
552
560
  self.new_modules = new.modules
553
561
 
562
+ # Apply filters
563
+ if ignore_filters and len(ignore_filters) > 0:
564
+ old = old.apply_ignore_filter(ignore_filters)
565
+ new = new.apply_ignore_filter(ignore_filters)
566
+
554
567
  # Entries removed from `new` that remain in `old`
555
568
  self.removed = frozenset(old.api - new.api)
556
569
 
@@ -562,7 +575,7 @@ class APIDiff:
562
575
  cls: Type[APIDiffType],
563
576
  old_dump_file: Union[Path, str],
564
577
  new_dump_file: Union[Path, str],
565
- ignore_filters: Optional[List[APIFilterType]] = None,
578
+ ignore_filters: Optional[List[APIFilter]] = None,
566
579
  ) -> APIDiffType:
567
580
  """Differences between two Python public API dumps loaded from files.
568
581
 
@@ -571,7 +584,7 @@ class APIDiff:
571
584
  Name of file containing dump of the old public API.
572
585
  new_dump_file (Union[Path, str]):
573
586
  Name of file containing dump of the new public API.
574
- ignore_filters (Optional[List[APIFilterType]]):
587
+ ignore_filters (Optional[List[APIFilter]]):
575
588
  Remove API entries that match filters.
576
589
 
577
590
  Returns:
@@ -582,13 +595,8 @@ class APIDiff:
582
595
  old = APIDump.load_from_file(old_dump_file)
583
596
  new = APIDump.load_from_file(new_dump_file)
584
597
 
585
- # Apply filters
586
- if ignore_filters and len(ignore_filters) > 0:
587
- old = old.apply_ignore_filter(ignore_filters)
588
- new = new.apply_ignore_filter(ignore_filters)
589
-
590
598
  # Create instance
591
- inst = cls(old, new)
599
+ inst = cls(old, new, ignore_filters)
592
600
 
593
601
  return inst
594
602
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: py-api-dumper
3
- Version: 4.2.0
3
+ Version: 4.2.3
4
4
  Summary: Python API dumping and comparison tool
5
5
  Author-email: Karl Wette <karl.wette@anu.edu.au>
6
6
  License-Expression: MIT
@@ -8,7 +8,7 @@ Project-URL: Homepage, https://github.com/kwwette/py-api-dumper
8
8
  Project-URL: Issues, https://github.com/kwwette/py-api-dumper/issues
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Operating System :: OS Independent
11
- Requires-Python: >=3.10
11
+ Requires-Python: >=3.11
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSES/MIT.txt
14
14
  License-File: LICENSES/CC0-1.0.txt
@@ -1,6 +1,14 @@
1
+ .gitignore
2
+ .pre-commit-config.yaml
3
+ LICENSE
1
4
  MANIFEST.in
2
5
  README.md
6
+ REUSE.toml
3
7
  pyproject.toml
8
+ requirements-dev.txt
9
+ .github/dependabot.yml
10
+ .github/workflows/publish.yml
11
+ .github/workflows/test.yml
4
12
  LICENSES/CC0-1.0.txt
5
13
  LICENSES/MIT.txt
6
14
  src/py_api_dumper/__init__.py
@@ -9,6 +17,8 @@ src/py_api_dumper.egg-info/PKG-INFO
9
17
  src/py_api_dumper.egg-info/SOURCES.txt
10
18
  src/py_api_dumper.egg-info/dependency_links.txt
11
19
  src/py_api_dumper.egg-info/entry_points.txt
20
+ src/py_api_dumper.egg-info/scm_file_list.json
21
+ src/py_api_dumper.egg-info/scm_version.json
12
22
  src/py_api_dumper.egg-info/top_level.txt
13
23
  test/conftest.py
14
24
  test/setup.py
@@ -0,0 +1,29 @@
1
+ {
2
+ "files": [
3
+ ".github/dependabot.yml",
4
+ ".github/workflows/publish.yml",
5
+ ".github/workflows/test.yml",
6
+ ".gitignore",
7
+ ".pre-commit-config.yaml",
8
+ "LICENSE",
9
+ "LICENSES/CC0-1.0.txt",
10
+ "LICENSES/MIT.txt",
11
+ "MANIFEST.in",
12
+ "README.md",
13
+ "REUSE.toml",
14
+ "pyproject.toml",
15
+ "requirements-dev.txt",
16
+ "src/py_api_dumper/__init__.py",
17
+ "src/py_api_dumper/cli.py",
18
+ "test/api_ref/__init__.py",
19
+ "test/api_ref/_priv_mod.py",
20
+ "test/api_ref/api_ref.txt",
21
+ "test/api_ref/ext_mod.c",
22
+ "test/api_ref/pub_mod.py",
23
+ "test/conftest.py",
24
+ "test/other_mod/__init__.py",
25
+ "test/setup.py",
26
+ "test/test_diff.py",
27
+ "test/test_dump.py"
28
+ ]
29
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "4.2.3",
3
+ "distance": 0,
4
+ "node": "g0c9a3cff8e57e79e4f097f7d90dbd5b5993f18f0",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-11-07"
8
+ }
File without changes
File without changes
File without changes