enum-properties 2.7.0__tar.gz → 2.8.1__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 (96) hide show
  1. {enum_properties-2.7.0 → enum_properties-2.8.1}/.github/dependabot.yml +0 -12
  2. {enum_properties-2.7.0 → enum_properties-2.8.1}/.github/workflows/lint.yml +13 -7
  3. {enum_properties-2.7.0 → enum_properties-2.8.1}/.github/workflows/release.yml +17 -18
  4. {enum_properties-2.7.0 → enum_properties-2.8.1}/.github/workflows/scorecard.yml +16 -7
  5. {enum_properties-2.7.0 → enum_properties-2.8.1}/.github/workflows/test.yml +47 -43
  6. {enum_properties-2.7.0 → enum_properties-2.8.1}/.github/workflows/zizmor.yml +10 -6
  7. enum_properties-2.8.1/.github/zizmor.yml +3 -0
  8. {enum_properties-2.7.0 → enum_properties-2.8.1}/.gitignore +3 -0
  9. {enum_properties-2.7.0 → enum_properties-2.8.1}/PKG-INFO +3 -2
  10. {enum_properties-2.7.0 → enum_properties-2.8.1}/doc/source/changelog.rst +11 -0
  11. {enum_properties-2.7.0 → enum_properties-2.8.1}/justfile +8 -3
  12. {enum_properties-2.7.0 → enum_properties-2.8.1}/pyproject.toml +3 -1
  13. {enum_properties-2.7.0 → enum_properties-2.8.1}/src/enum_properties/__init__.py +58 -54
  14. {enum_properties-2.7.0 → enum_properties-2.8.1}/src/enum_properties/__init__.pyi +4 -5
  15. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test.py +1 -1
  16. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_flags.py +90 -0
  17. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test.py +2 -2
  18. enum_properties-2.7.0/uv.lock +0 -1977
  19. {enum_properties-2.7.0 → enum_properties-2.8.1}/.codecov.yml +0 -0
  20. {enum_properties-2.7.0 → enum_properties-2.8.1}/.github/CODEOWNERS +0 -0
  21. {enum_properties-2.7.0 → enum_properties-2.8.1}/.pre-commit-config.yaml +0 -0
  22. {enum_properties-2.7.0 → enum_properties-2.8.1}/CODE_OF_CONDUCT.md +0 -0
  23. {enum_properties-2.7.0 → enum_properties-2.8.1}/CONTRIBUTING.md +0 -0
  24. {enum_properties-2.7.0 → enum_properties-2.8.1}/LICENSE +0 -0
  25. {enum_properties-2.7.0 → enum_properties-2.8.1}/README.md +0 -0
  26. {enum_properties-2.7.0 → enum_properties-2.8.1}/SECURITY.md +0 -0
  27. {enum_properties-2.7.0 → enum_properties-2.8.1}/conftest.py +0 -0
  28. {enum_properties-2.7.0 → enum_properties-2.8.1}/doc/.readthedocs.yaml +0 -0
  29. {enum_properties-2.7.0 → enum_properties-2.8.1}/doc/source/_static/style.css +0 -0
  30. {enum_properties-2.7.0 → enum_properties-2.8.1}/doc/source/conf.py +0 -0
  31. {enum_properties-2.7.0 → enum_properties-2.8.1}/doc/source/howto.rst +0 -0
  32. {enum_properties-2.7.0 → enum_properties-2.8.1}/doc/source/index.rst +0 -0
  33. {enum_properties-2.7.0 → enum_properties-2.8.1}/doc/source/reference.rst +0 -0
  34. {enum_properties-2.7.0 → enum_properties-2.8.1}/doc/source/tutorial.rst +0 -0
  35. {enum_properties-2.7.0 → enum_properties-2.8.1}/src/enum_properties/py.typed +0 -0
  36. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/__init__.py +0 -0
  37. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_aliases.py +0 -0
  38. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_future_annotations.py +0 -0
  39. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_interface_eq.py +0 -0
  40. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_nestedclass.py +0 -0
  41. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_none_coercion.py +0 -0
  42. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_perf.py +0 -0
  43. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_pickle.py +0 -0
  44. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_specialize.py +0 -0
  45. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_symmetric.py +0 -0
  46. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/annotations/test_type_hints.py +0 -0
  47. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/big_enum.py +0 -0
  48. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/big_enum_annotations.py +0 -0
  49. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/__init__.py +0 -0
  50. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/address.py +0 -0
  51. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/color_example.py +0 -0
  52. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/hash_equiv_def.py +0 -0
  53. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_add_props.py +0 -0
  54. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_dataclass.py +0 -0
  55. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_dataclass_integration.py +0 -0
  56. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_flag.py +0 -0
  57. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_flag_boundaries.py +0 -0
  58. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_flags_no_iterable.py +0 -0
  59. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_functional.py +0 -0
  60. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_hash_equiv.py +0 -0
  61. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_hash_equiv_def.py +0 -0
  62. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_legacy.py +0 -0
  63. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_members_and_aliases.py +0 -0
  64. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_metaclass.py +0 -0
  65. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_nested_classes.py +0 -0
  66. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_nested_classes_313.py +0 -0
  67. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_specialized.py +0 -0
  68. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_specialized_default.py +0 -0
  69. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_specialized_list.py +0 -0
  70. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_specialized_missing.py +0 -0
  71. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_symmetric_builtins.py +0 -0
  72. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_symmetric_decorator.py +0 -0
  73. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_symmetric_metaclass.py +0 -0
  74. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_symmetric_overload.py +0 -0
  75. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_symmetry.py +0 -0
  76. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/howto_verify_unique.py +0 -0
  77. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/mapbox.py +0 -0
  78. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/specialization_example.py +0 -0
  79. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/symmetric_example.py +0 -0
  80. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/examples/test_examples.py +0 -0
  81. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/__init__.py +0 -0
  82. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test_flags.py +0 -0
  83. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test_interface_eq.py +0 -0
  84. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test_multi_primitives.py +0 -0
  85. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test_nestedclass.py +0 -0
  86. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test_none_coercion.py +0 -0
  87. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test_perf.py +0 -0
  88. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test_pickle.py +0 -0
  89. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test_specialize.py +0 -0
  90. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/legacy/test_type_hints.py +0 -0
  91. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/pickle_enums.py +0 -0
  92. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/pickle_enums_annotations.py +0 -0
  93. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/test_functional.py +0 -0
  94. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/type_hints/__init__.py +0 -0
  95. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/type_hints/pyright.json +0 -0
  96. {enum_properties-2.7.0 → enum_properties-2.8.1}/tests/type_hints/test.py +0 -0
@@ -15,15 +15,3 @@ updates:
15
15
  gha-updates:
16
16
  patterns:
17
17
  - "*"
18
-
19
- # Python
20
- - package-ecosystem: "uv"
21
- directory: "/"
22
- schedule:
23
- interval: "monthly"
24
- commit-message:
25
- prefix: ⬆
26
- groups:
27
- uv-updates:
28
- patterns:
29
- - "*"
@@ -2,7 +2,11 @@ name: Lint
2
2
 
3
3
  permissions:
4
4
  contents: read
5
-
5
+
6
+ concurrency:
7
+ group: lint-${{ github.event.pull_request.number || github.ref }}
8
+ cancel-in-progress: true
9
+
6
10
  on:
7
11
  push:
8
12
  branches:
@@ -24,23 +28,25 @@ jobs:
24
28
  strategy:
25
29
  matrix:
26
30
  # run static analysis on bleeding and trailing edges
27
- python-version: [ '3.10', '3.14' ]
31
+ python-version: [ '3.10', '3.15' ]
28
32
  steps:
29
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
33
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
30
34
  with:
31
35
  persist-credentials: false
32
36
  - name: Set up Python ${{ matrix.python-version }}
33
37
  id: sp
34
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
38
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
35
39
  with:
36
40
  python-version: ${{ matrix.python-version }}
37
41
  allow-prereleases: true
38
42
  - name: Install uv
39
- uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098
43
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
40
44
  with:
41
45
  enable-cache: true
42
46
  - name: Install Just
43
- uses: extractions/setup-just@f8a3cce218d9f83db3a2ecd90e41ac3de6cdfd9b
47
+ uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
48
+ with:
49
+ just-version: 1.58.0
44
50
  - name: Install Dependencies
45
51
  env:
46
52
  PYTHON_PATH: ${{ steps.sp.outputs.python-path }}
@@ -52,7 +58,7 @@ jobs:
52
58
  sudo apt install emacs
53
59
  - name: Setup tmate session
54
60
  if: ${{ github.event.inputs.debug == 'true' }}
55
- uses: mxschmitt/action-tmate@c0afd6f790e3a5564914980036ebf83216678101
61
+ uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113
56
62
  with:
57
63
  detached: true
58
64
  timeout-minutes: 60
@@ -1,7 +1,8 @@
1
1
 
2
2
  name: Publish Release
3
3
 
4
- permissions: read-all
4
+ permissions:
5
+ contents: read
5
6
 
6
7
  concurrency:
7
8
  # stop previous release runs if tag is recreated
@@ -18,42 +19,40 @@ jobs:
18
19
  lint:
19
20
  permissions:
20
21
  contents: read
21
- actions: write
22
- uses: ./.github/workflows/lint.yml
22
+ uses: $/.github/workflows/lint.yml
23
23
 
24
24
  test:
25
25
  permissions:
26
26
  contents: read
27
- actions: write
28
- uses: ./.github/workflows/test.yml
29
- secrets:
30
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
27
+ id-token: write # to allow codecov oidc upload
28
+ uses: $/.github/workflows/test.yml
31
29
 
32
30
  build:
33
31
  name: Build Package
34
32
  runs-on: ubuntu-latest
35
33
  permissions:
36
34
  contents: read
37
- actions: write
38
35
  outputs:
39
36
  PACKAGE_NAME: ${{ steps.set-package.outputs.package_name }}
40
37
  RELEASE_VERSION: ${{ steps.set-package.outputs.release_version }}
41
38
  steps:
42
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
39
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
43
40
  with:
44
- persist-credentials: true
41
+ persist-credentials: false
45
42
  - name: Set up Python
46
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
43
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
47
44
  with:
48
45
  python-version: ">=3.11" # for tomlib
49
46
  - name: Install uv
50
- uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098
47
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
51
48
  with:
52
49
  enable-cache: false
53
50
  restore-cache: false
54
51
  save-cache: false
55
52
  - name: Setup Just
56
- uses: extractions/setup-just@f8a3cce218d9f83db3a2ecd90e41ac3de6cdfd9b
53
+ uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
54
+ with:
55
+ just-version: 1.58.0
57
56
  - name: Verify Tag
58
57
  run: |
59
58
  TAG_NAME=${GITHUB_REF#refs/tags/}
@@ -74,7 +73,7 @@ jobs:
74
73
  - name: Build the binary wheel and a source tarball
75
74
  run: just build
76
75
  - name: Store the distribution packages
77
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f
76
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
78
77
  with:
79
78
  name: python-package-distributions
80
79
  path: dist/
@@ -98,12 +97,12 @@ jobs:
98
97
  id-token: write # IMPORTANT: mandatory for trusted publishing
99
98
  steps:
100
99
  - name: Download all the dists
101
- uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3
100
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
102
101
  with:
103
102
  name: python-package-distributions
104
103
  path: dist/
105
104
  - name: Publish distribution 📦 to PyPI
106
- uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e
105
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33
107
106
 
108
107
  github-release:
109
108
  name: Publish GitHub Release
@@ -118,12 +117,12 @@ jobs:
118
117
 
119
118
  steps:
120
119
  - name: Download all the dists
121
- uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3
120
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
122
121
  with:
123
122
  name: python-package-distributions
124
123
  path: dist/
125
124
  - name: Sign the dists with Sigstore
126
- uses: sigstore/gh-action-sigstore-python@a5caf349bc536fbef3668a10ed7f5cd309a4b53d
125
+ uses: sigstore/gh-action-sigstore-python@790bc6befb9d733738f18d8f895854b453640ec9
127
126
  with:
128
127
  inputs: >-
129
128
  ./dist/*.tar.gz
@@ -9,24 +9,33 @@ on:
9
9
  branches: [ main ]
10
10
  workflow_dispatch:
11
11
 
12
- permissions: read-all
12
+ concurrency:
13
+ group: scorecard-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ permissions:
17
+ contents: read
13
18
 
14
19
  jobs:
15
20
  analysis:
16
21
  name: Scorecard analysis
17
22
  runs-on: ubuntu-latest
23
+ environment:
24
+ name: scorecard
25
+ deployment: false # Prevents creating a GitHub deployment object
26
+
18
27
  permissions:
19
- security-events: write
20
- id-token: write
28
+ security-events: write # allow uploading code scanning results
29
+ id-token: write # to allow OIDC authentication for publishing results to OpenSSF REST API
21
30
 
22
31
  steps:
23
32
  - name: "Checkout code"
24
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
33
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
25
34
  with:
26
35
  persist-credentials: false
27
36
 
28
37
  - name: "Run analysis"
29
- uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a
38
+ uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc
30
39
  with:
31
40
  results_file: results.sarif
32
41
  results_format: sarif
@@ -48,7 +57,7 @@ jobs:
48
57
  # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
49
58
  # format to the repository Actions tab.
50
59
  - name: "Upload artifact"
51
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f
60
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
52
61
  with:
53
62
  name: SARIF file
54
63
  path: results.sarif
@@ -57,6 +66,6 @@ jobs:
57
66
  # Upload the results to GitHub's code scanning dashboard (optional).
58
67
  # Commenting out will disable upload of results to your repo's Code Scanning dashboard
59
68
  - name: "Upload to code-scanning"
60
- uses: github/codeql-action/upload-sarif@89a39a4e59826350b863aa6b6252a07ad50cf83e
69
+ uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938
61
70
  with:
62
71
  sarif_file: results.sarif
@@ -2,7 +2,11 @@ name: Test
2
2
 
3
3
  permissions:
4
4
  contents: read
5
-
5
+
6
+ concurrency:
7
+ group: test-${{ github.event.pull_request.number || github.ref }}
8
+ cancel-in-progress: true
9
+
6
10
  on:
7
11
  push:
8
12
  branches:
@@ -10,9 +14,6 @@ on:
10
14
  pull_request:
11
15
  merge_group:
12
16
  workflow_call:
13
- secrets:
14
- CODECOV_TOKEN:
15
- required: true
16
17
  workflow_dispatch:
17
18
  inputs:
18
19
  debug:
@@ -28,12 +29,9 @@ on:
28
29
  jobs:
29
30
  linux:
30
31
  runs-on: ubuntu-latest
31
- permissions:
32
- contents: read
33
- actions: write
34
32
  strategy:
35
33
  matrix:
36
- python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
34
+ python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15']
37
35
  env:
38
36
  COVERAGE_FILE: linux-py${{ matrix.python-version }}.coverage
39
37
 
@@ -42,19 +40,21 @@ jobs:
42
40
  if: ${{ github.event.inputs.clear_cache == 'true' }}
43
41
  run: sudo rm -rf /opt/hostedtoolcache
44
42
 
45
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
43
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
46
44
  with:
47
45
  persist-credentials: false
48
46
  - name: Set up Python ${{ matrix.python-version }}
49
47
  id: sp
50
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
48
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
51
49
  with:
52
50
  python-version: ${{ matrix.python-version }}
53
51
  allow-prereleases: true
54
52
  - name: Install Just
55
- uses: extractions/setup-just@f8a3cce218d9f83db3a2ecd90e41ac3de6cdfd9b
53
+ uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
54
+ with:
55
+ just-version: 1.58.0
56
56
  - name: Install uv
57
- uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098
57
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
58
58
  with:
59
59
  enable-cache: true
60
60
  - name: Install Emacs
@@ -63,7 +63,7 @@ jobs:
63
63
  sudo apt install emacs
64
64
  - name: Setup tmate session
65
65
  if: ${{ github.event.inputs.debug == 'true' }}
66
- uses: mxschmitt/action-tmate@c0afd6f790e3a5564914980036ebf83216678101
66
+ uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113
67
67
  with:
68
68
  detached: true
69
69
  - name: Install Dependencies
@@ -76,19 +76,16 @@ jobs:
76
76
  just test
77
77
 
78
78
  - name: Store coverage files
79
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f
79
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
80
80
  with:
81
81
  name: ${{ env.COVERAGE_FILE }}
82
82
  path: ${{ env.COVERAGE_FILE }}
83
83
 
84
84
  macos:
85
85
  runs-on: macos-latest
86
- permissions:
87
- contents: read
88
- actions: write
89
86
  strategy:
90
87
  matrix:
91
- python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
88
+ python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14', '3.15']
92
89
  env:
93
90
  COVERAGE_FILE: macos-py${{ matrix.python-version }}.coverage
94
91
 
@@ -97,19 +94,21 @@ jobs:
97
94
  if: ${{ github.event.inputs.clear_cache == 'true' }}
98
95
  run: sudo rm -rf /Users/runner/hostedtoolcache
99
96
 
100
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
97
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
101
98
  with:
102
99
  persist-credentials: false
103
100
  - name: Set up Python ${{ matrix.python-version }}
104
101
  id: sp
105
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
102
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
106
103
  with:
107
104
  python-version: ${{ matrix.python-version }}
108
105
  allow-prereleases: true
109
106
  - name: Install Just
110
- uses: extractions/setup-just@f8a3cce218d9f83db3a2ecd90e41ac3de6cdfd9b
107
+ uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
108
+ with:
109
+ just-version: 1.58.0
111
110
  - name: Install uv
112
- uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098
111
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
113
112
  with:
114
113
  enable-cache: true
115
114
  - name: install-emacs-macos
@@ -118,7 +117,7 @@ jobs:
118
117
  brew install emacs
119
118
  - name: Setup tmate session
120
119
  if: ${{ github.event.inputs.debug == 'true' }}
121
- uses: mxschmitt/action-tmate@c0afd6f790e3a5564914980036ebf83216678101
120
+ uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113
122
121
  with:
123
122
  detached: true
124
123
  - name: Install Dependencies
@@ -131,19 +130,16 @@ jobs:
131
130
  just test
132
131
 
133
132
  - name: Store coverage files
134
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f
133
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
135
134
  with:
136
135
  name: ${{ env.COVERAGE_FILE }}
137
136
  path: ${{ env.COVERAGE_FILE }}
138
137
 
139
138
  windows:
140
139
  runs-on: windows-latest
141
- permissions:
142
- contents: read
143
- actions: write
144
140
  strategy:
145
141
  matrix:
146
- python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
142
+ python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14', '3.15']
147
143
  env:
148
144
  COVERAGE_FILE: windows-py${{ matrix.python-version }}.coverage
149
145
 
@@ -151,27 +147,29 @@ jobs:
151
147
  - name: Clear GitHub Actions cache
152
148
  if: ${{ github.event.inputs.clear_cache == 'true' }}
153
149
  run: Remove-Item -Recurse -Force C:\hostedtoolcache
154
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
150
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
155
151
  with:
156
152
  persist-credentials: false
157
153
  - name: Set up Python ${{ matrix.python-version }}
158
154
  id: sp
159
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
155
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
160
156
  with:
161
157
  python-version: ${{ matrix.python-version }}
162
158
  allow-prereleases: true
163
159
  - name: Install Just
164
- uses: extractions/setup-just@f8a3cce218d9f83db3a2ecd90e41ac3de6cdfd9b
160
+ uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
161
+ with:
162
+ just-version: 1.58.0
165
163
  - name: Install uv
166
- uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098
164
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
167
165
  with:
168
166
  enable-cache: true
169
167
  - name: install-vim-windows
170
168
  if: ${{ github.event.inputs.debug == 'true' }}
171
- uses: rhysd/action-setup-vim@19e3dd31a84dbc2c5445d65e9b363f616cab96c1
169
+ uses: rhysd/action-setup-vim@febef33995d6649302e9d88dda81e071b68f16a7
172
170
  - name: Setup tmate session
173
171
  if: ${{ github.event.inputs.debug == 'true' }}
174
- uses: mxschmitt/action-tmate@c0afd6f790e3a5564914980036ebf83216678101
172
+ uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113
175
173
  with:
176
174
  detached: true
177
175
  - name: Install Dependencies
@@ -184,7 +182,7 @@ jobs:
184
182
  just test
185
183
 
186
184
  - name: Store coverage files
187
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f
185
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
188
186
  with:
189
187
  name: ${{ env.COVERAGE_FILE }}
190
188
  path: ${{ env.COVERAGE_FILE }}
@@ -192,22 +190,27 @@ jobs:
192
190
  coverage-combine:
193
191
  needs: [linux, macos, windows]
194
192
  runs-on: ubuntu-latest
193
+ permissions:
194
+ contents: read
195
+ id-token: write # for oidc authentication to codecov
195
196
 
196
197
  steps:
197
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
198
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
198
199
  with:
199
200
  persist-credentials: false
200
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
201
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
201
202
  id: sp
202
203
  with:
203
204
  python-version: '3.14'
204
205
 
205
206
  - name: Install uv
206
- uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098
207
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
207
208
  with:
208
209
  enable-cache: true
209
210
  - name: Setup Just
210
- uses: extractions/setup-just@f8a3cce218d9f83db3a2ecd90e41ac3de6cdfd9b
211
+ uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
212
+ with:
213
+ just-version: 1.58.0
211
214
  - name: Install Release Dependencies
212
215
  env:
213
216
  PYTHON_PATH: ${{ steps.sp.outputs.python-path }}
@@ -215,7 +218,7 @@ jobs:
215
218
  just setup "$PYTHON_PATH"
216
219
 
217
220
  - name: Get coverage files
218
- uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3
221
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
219
222
  with:
220
223
  pattern: "*.coverage"
221
224
  merge-multiple: true
@@ -223,7 +226,8 @@ jobs:
223
226
  - run: just coverage
224
227
 
225
228
  - name: Upload coverage to Codecov
226
- uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de
229
+ uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f
227
230
  with:
228
- token: ${{ secrets.CODECOV_TOKEN }}
229
- file: ./coverage.xml
231
+ use_oidc: true
232
+ files:
233
+ ./coverage.xml
@@ -12,22 +12,26 @@ on:
12
12
  permissions:
13
13
  contents: read
14
14
 
15
+ concurrency:
16
+ group: zizmor-${{ github.event.pull_request.number || github.ref }}
17
+ cancel-in-progress: true
18
+
15
19
  jobs:
16
20
  zizmor-analysis:
17
21
  name: Run Zizmor
18
22
  runs-on: ubuntu-latest
19
23
  permissions:
20
24
  contents: read
21
- security-events: write
25
+ security-events: write # for post to GH security
22
26
 
23
27
  steps:
24
28
  - name: Checkout repository
25
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
29
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
26
30
  with:
27
31
  persist-credentials: false
28
32
 
29
33
  - name: Set up Rust
30
- uses: actions-rust-lang/setup-rust-toolchain@a0b538fa0b742a6aa35d6e2c169b4bd06d225a98
34
+ uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659
31
35
  - name: Install jq
32
36
  run: |
33
37
  sudo apt-get update
@@ -38,17 +42,17 @@ jobs:
38
42
 
39
43
  - name: Run Zizmor analysis
40
44
  run: |
41
- zizmor --format sarif .github/workflows/ > results.sarif
45
+ zizmor --persona auditor --format sarif .github/workflows/ > results.sarif
42
46
 
43
47
  - name: Upload analysis results
44
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f
48
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
45
49
  with:
46
50
  name: zizmor-results
47
51
  path: results.sarif
48
52
  retention-days: 7
49
53
 
50
54
  - name: Upload to code-scanning
51
- uses: github/codeql-action/upload-sarif@89a39a4e59826350b863aa6b6252a07ad50cf83e
55
+ uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938
52
56
  with:
53
57
  sarif_file: results.sarif
54
58
 
@@ -0,0 +1,3 @@
1
+ rules:
2
+ anonymous-definition:
3
+ disable: true
@@ -134,3 +134,6 @@ dmypy.json
134
134
  .idea
135
135
  .ruff_cache
136
136
  CLAUDE.md
137
+ uv.lock
138
+
139
+ zizmor.sarif
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: enum-properties
3
- Version: 2.7.0
3
+ Version: 2.8.1
4
4
  Summary: Add properties and method specializations to Python enumeration values with a simple declarative syntax.
5
5
  Project-URL: Homepage, https://github.com/bckohan/enum-properties
6
6
  Project-URL: Documentation, https://enum-properties.readthedocs.io
@@ -24,6 +24,7 @@ Classifier: Programming Language :: Python :: 3.11
24
24
  Classifier: Programming Language :: Python :: 3.12
25
25
  Classifier: Programming Language :: Python :: 3.13
26
26
  Classifier: Programming Language :: Python :: 3.14
27
+ Classifier: Programming Language :: Python :: 3.15
27
28
  Classifier: Topic :: Software Development :: Libraries
28
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
29
30
  Classifier: Typing :: Typed
@@ -2,6 +2,17 @@
2
2
  Change Log
3
3
  ==========
4
4
 
5
+ v2.8.1 (2026-09-02)
6
+ ===================
7
+
8
+ * Add missing Python 3.15 classifier.
9
+
10
+ v2.8.0 (2026-08-03)
11
+ ===================
12
+
13
+ * Throw TypeError instead of ValueError when wrong types are encountered in enum class definitions.
14
+ * Fix linting issues with latest versions of ruff.
15
+
5
16
  v2.7.0 (2026-03-04)
6
17
  ===================
7
18
 
@@ -1,6 +1,6 @@
1
1
  set windows-shell := ["powershell.exe", "-NoLogo", "-Command"]
2
- set unstable := true
3
- set script-interpreter := ['uv', 'run', '--script']
2
+ set unstable
3
+ set script-interpreter := ['uv', 'run', '--project', '.', '--script']
4
4
 
5
5
  export PYTHONPATH := source_directory()
6
6
 
@@ -181,11 +181,16 @@ lint: sort-imports
181
181
  # fix formatting, linting issues and import sorting
182
182
  fix: lint format
183
183
 
184
+ # run zizmor security analysis of CI
185
+ zizmor:
186
+ cargo install --locked zizmor
187
+ zizmor --persona auditor --format sarif .github/workflows/ > zizmor.sarif
188
+
184
189
  # run all static checks
185
190
  check: check-lint check-format check-types check-package check-docs check-readme
186
191
 
187
192
  # run all checks including documentation link checking (slow)
188
- check-all: check check-docs-links
193
+ check-all: check zizmor check-docs-links
189
194
 
190
195
  # run tests
191
196
  test *TESTS:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "enum-properties"
7
- version = "2.7.0"
7
+ version = "2.8.1"
8
8
  description = "Add properties and method specializations to Python enumeration values with a simple declarative syntax."
9
9
  requires-python = ">=3.10,<4.0"
10
10
  authors = [
@@ -30,6 +30,7 @@ classifiers = [
30
30
  "Programming Language :: Python :: 3.12",
31
31
  "Programming Language :: Python :: 3.13",
32
32
  "Programming Language :: Python :: 3.14",
33
+ "Programming Language :: Python :: 3.15",
33
34
  "Topic :: Software Development :: Libraries",
34
35
  "Topic :: Software Development :: Libraries :: Python Modules",
35
36
  "Typing :: Typed"
@@ -139,6 +140,7 @@ exclude = [
139
140
  "examples",
140
141
  "tests/resources/bad_code.py"
141
142
  ]
143
+ extend-exclude = ["*.md"]
142
144
 
143
145
  [tool.ruff.lint]
144
146
  exclude = [