enum-properties 2.8.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.
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.github/workflows/lint.yml +11 -5
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.github/workflows/release.yml +13 -13
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.github/workflows/scorecard.yml +11 -6
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.github/workflows/test.yml +29 -26
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.github/workflows/zizmor.yml +8 -4
- enum_properties-2.8.1/.github/zizmor.yml +3 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.gitignore +2 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/PKG-INFO +3 -2
- {enum_properties-2.8.0 → enum_properties-2.8.1}/doc/source/changelog.rst +5 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/justfile +6 -1
- {enum_properties-2.8.0 → enum_properties-2.8.1}/pyproject.toml +2 -1
- {enum_properties-2.8.0 → enum_properties-2.8.1}/src/enum_properties/__init__.py +1 -1
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_flags.py +90 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.codecov.yml +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.github/CODEOWNERS +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.github/dependabot.yml +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/.pre-commit-config.yaml +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/CODE_OF_CONDUCT.md +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/CONTRIBUTING.md +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/LICENSE +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/README.md +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/SECURITY.md +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/conftest.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/doc/.readthedocs.yaml +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/doc/source/_static/style.css +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/doc/source/conf.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/doc/source/howto.rst +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/doc/source/index.rst +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/doc/source/reference.rst +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/doc/source/tutorial.rst +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/src/enum_properties/__init__.pyi +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/src/enum_properties/py.typed +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/__init__.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_aliases.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_future_annotations.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_interface_eq.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_nestedclass.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_none_coercion.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_perf.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_pickle.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_specialize.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_symmetric.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_type_hints.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/big_enum.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/big_enum_annotations.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/__init__.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/address.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/color_example.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/hash_equiv_def.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_add_props.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_dataclass.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_dataclass_integration.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_flag.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_flag_boundaries.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_flags_no_iterable.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_functional.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_hash_equiv.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_hash_equiv_def.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_legacy.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_members_and_aliases.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_metaclass.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_nested_classes.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_nested_classes_313.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_specialized.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_specialized_default.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_specialized_list.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_specialized_missing.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_symmetric_builtins.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_symmetric_decorator.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_symmetric_metaclass.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_symmetric_overload.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_symmetry.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_verify_unique.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/mapbox.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/specialization_example.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/symmetric_example.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/test_examples.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/__init__.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test_flags.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test_interface_eq.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test_multi_primitives.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test_nestedclass.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test_none_coercion.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test_perf.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test_pickle.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test_specialize.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/legacy/test_type_hints.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/pickle_enums.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/pickle_enums_annotations.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/test_functional.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/type_hints/__init__.py +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/type_hints/pyright.json +0 -0
- {enum_properties-2.8.0 → enum_properties-2.8.1}/tests/type_hints/test.py +0 -0
|
@@ -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.
|
|
31
|
+
python-version: [ '3.10', '3.15' ]
|
|
28
32
|
steps:
|
|
29
|
-
- uses: actions/checkout@
|
|
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@
|
|
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@
|
|
43
|
+
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
|
|
40
44
|
with:
|
|
41
45
|
enable-cache: true
|
|
42
46
|
- name: Install Just
|
|
43
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 }}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
|
|
2
2
|
name: Publish Release
|
|
3
3
|
|
|
4
|
-
permissions:
|
|
4
|
+
permissions:
|
|
5
|
+
contents: read
|
|
5
6
|
|
|
6
7
|
concurrency:
|
|
7
8
|
# stop previous release runs if tag is recreated
|
|
@@ -18,41 +19,40 @@ jobs:
|
|
|
18
19
|
lint:
|
|
19
20
|
permissions:
|
|
20
21
|
contents: read
|
|
21
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
uses: ./.github/workflows/test.yml
|
|
27
|
+
id-token: write # to allow codecov oidc upload
|
|
28
|
+
uses: $/.github/workflows/test.yml
|
|
30
29
|
|
|
31
30
|
build:
|
|
32
31
|
name: Build Package
|
|
33
32
|
runs-on: ubuntu-latest
|
|
34
33
|
permissions:
|
|
35
34
|
contents: read
|
|
36
|
-
actions: write
|
|
37
35
|
outputs:
|
|
38
36
|
PACKAGE_NAME: ${{ steps.set-package.outputs.package_name }}
|
|
39
37
|
RELEASE_VERSION: ${{ steps.set-package.outputs.release_version }}
|
|
40
38
|
steps:
|
|
41
|
-
- uses: actions/checkout@
|
|
39
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
42
40
|
with:
|
|
43
|
-
persist-credentials:
|
|
41
|
+
persist-credentials: false
|
|
44
42
|
- name: Set up Python
|
|
45
|
-
uses: actions/setup-python@
|
|
43
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
|
|
46
44
|
with:
|
|
47
45
|
python-version: ">=3.11" # for tomlib
|
|
48
46
|
- name: Install uv
|
|
49
|
-
uses: astral-sh/setup-uv@
|
|
47
|
+
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
|
|
50
48
|
with:
|
|
51
49
|
enable-cache: false
|
|
52
50
|
restore-cache: false
|
|
53
51
|
save-cache: false
|
|
54
52
|
- name: Setup Just
|
|
55
53
|
uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
|
|
54
|
+
with:
|
|
55
|
+
just-version: 1.58.0
|
|
56
56
|
- name: Verify Tag
|
|
57
57
|
run: |
|
|
58
58
|
TAG_NAME=${GITHUB_REF#refs/tags/}
|
|
@@ -102,7 +102,7 @@ jobs:
|
|
|
102
102
|
name: python-package-distributions
|
|
103
103
|
path: dist/
|
|
104
104
|
- name: Publish distribution 📦 to PyPI
|
|
105
|
-
uses: pypa/gh-action-pypi-publish@
|
|
105
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33
|
|
106
106
|
|
|
107
107
|
github-release:
|
|
108
108
|
name: Publish GitHub Release
|
|
@@ -122,7 +122,7 @@ jobs:
|
|
|
122
122
|
name: python-package-distributions
|
|
123
123
|
path: dist/
|
|
124
124
|
- name: Sign the dists with Sigstore
|
|
125
|
-
uses: sigstore/gh-action-sigstore-python@
|
|
125
|
+
uses: sigstore/gh-action-sigstore-python@790bc6befb9d733738f18d8f895854b453640ec9
|
|
126
126
|
with:
|
|
127
127
|
inputs: >-
|
|
128
128
|
./dist/*.tar.gz
|
|
@@ -9,7 +9,12 @@ on:
|
|
|
9
9
|
branches: [ main ]
|
|
10
10
|
workflow_dispatch:
|
|
11
11
|
|
|
12
|
-
|
|
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:
|
|
@@ -20,17 +25,17 @@ jobs:
|
|
|
20
25
|
deployment: false # Prevents creating a GitHub deployment object
|
|
21
26
|
|
|
22
27
|
permissions:
|
|
23
|
-
security-events: write
|
|
24
|
-
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
|
|
25
30
|
|
|
26
31
|
steps:
|
|
27
32
|
- name: "Checkout code"
|
|
28
|
-
uses: actions/checkout@
|
|
33
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
29
34
|
with:
|
|
30
35
|
persist-credentials: false
|
|
31
36
|
|
|
32
37
|
- name: "Run analysis"
|
|
33
|
-
uses: ossf/scorecard-action@
|
|
38
|
+
uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc
|
|
34
39
|
with:
|
|
35
40
|
results_file: results.sarif
|
|
36
41
|
results_format: sarif
|
|
@@ -61,6 +66,6 @@ jobs:
|
|
|
61
66
|
# Upload the results to GitHub's code scanning dashboard (optional).
|
|
62
67
|
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
|
|
63
68
|
- name: "Upload to code-scanning"
|
|
64
|
-
uses: github/codeql-action/upload-sarif@
|
|
69
|
+
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938
|
|
65
70
|
with:
|
|
66
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:
|
|
@@ -25,12 +29,9 @@ on:
|
|
|
25
29
|
jobs:
|
|
26
30
|
linux:
|
|
27
31
|
runs-on: ubuntu-latest
|
|
28
|
-
permissions:
|
|
29
|
-
contents: read
|
|
30
|
-
actions: write
|
|
31
32
|
strategy:
|
|
32
33
|
matrix:
|
|
33
|
-
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']
|
|
34
35
|
env:
|
|
35
36
|
COVERAGE_FILE: linux-py${{ matrix.python-version }}.coverage
|
|
36
37
|
|
|
@@ -39,19 +40,21 @@ jobs:
|
|
|
39
40
|
if: ${{ github.event.inputs.clear_cache == 'true' }}
|
|
40
41
|
run: sudo rm -rf /opt/hostedtoolcache
|
|
41
42
|
|
|
42
|
-
- uses: actions/checkout@
|
|
43
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
43
44
|
with:
|
|
44
45
|
persist-credentials: false
|
|
45
46
|
- name: Set up Python ${{ matrix.python-version }}
|
|
46
47
|
id: sp
|
|
47
|
-
uses: actions/setup-python@
|
|
48
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
|
|
48
49
|
with:
|
|
49
50
|
python-version: ${{ matrix.python-version }}
|
|
50
51
|
allow-prereleases: true
|
|
51
52
|
- name: Install Just
|
|
52
53
|
uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
|
|
54
|
+
with:
|
|
55
|
+
just-version: 1.58.0
|
|
53
56
|
- name: Install uv
|
|
54
|
-
uses: astral-sh/setup-uv@
|
|
57
|
+
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
|
|
55
58
|
with:
|
|
56
59
|
enable-cache: true
|
|
57
60
|
- name: Install Emacs
|
|
@@ -80,12 +83,9 @@ jobs:
|
|
|
80
83
|
|
|
81
84
|
macos:
|
|
82
85
|
runs-on: macos-latest
|
|
83
|
-
permissions:
|
|
84
|
-
contents: read
|
|
85
|
-
actions: write
|
|
86
86
|
strategy:
|
|
87
87
|
matrix:
|
|
88
|
-
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']
|
|
89
89
|
env:
|
|
90
90
|
COVERAGE_FILE: macos-py${{ matrix.python-version }}.coverage
|
|
91
91
|
|
|
@@ -94,19 +94,21 @@ jobs:
|
|
|
94
94
|
if: ${{ github.event.inputs.clear_cache == 'true' }}
|
|
95
95
|
run: sudo rm -rf /Users/runner/hostedtoolcache
|
|
96
96
|
|
|
97
|
-
- uses: actions/checkout@
|
|
97
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
98
98
|
with:
|
|
99
99
|
persist-credentials: false
|
|
100
100
|
- name: Set up Python ${{ matrix.python-version }}
|
|
101
101
|
id: sp
|
|
102
|
-
uses: actions/setup-python@
|
|
102
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
|
|
103
103
|
with:
|
|
104
104
|
python-version: ${{ matrix.python-version }}
|
|
105
105
|
allow-prereleases: true
|
|
106
106
|
- name: Install Just
|
|
107
107
|
uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
|
|
108
|
+
with:
|
|
109
|
+
just-version: 1.58.0
|
|
108
110
|
- name: Install uv
|
|
109
|
-
uses: astral-sh/setup-uv@
|
|
111
|
+
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
|
|
110
112
|
with:
|
|
111
113
|
enable-cache: true
|
|
112
114
|
- name: install-emacs-macos
|
|
@@ -135,12 +137,9 @@ jobs:
|
|
|
135
137
|
|
|
136
138
|
windows:
|
|
137
139
|
runs-on: windows-latest
|
|
138
|
-
permissions:
|
|
139
|
-
contents: read
|
|
140
|
-
actions: write
|
|
141
140
|
strategy:
|
|
142
141
|
matrix:
|
|
143
|
-
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']
|
|
144
143
|
env:
|
|
145
144
|
COVERAGE_FILE: windows-py${{ matrix.python-version }}.coverage
|
|
146
145
|
|
|
@@ -148,19 +147,21 @@ jobs:
|
|
|
148
147
|
- name: Clear GitHub Actions cache
|
|
149
148
|
if: ${{ github.event.inputs.clear_cache == 'true' }}
|
|
150
149
|
run: Remove-Item -Recurse -Force C:\hostedtoolcache
|
|
151
|
-
- uses: actions/checkout@
|
|
150
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
152
151
|
with:
|
|
153
152
|
persist-credentials: false
|
|
154
153
|
- name: Set up Python ${{ matrix.python-version }}
|
|
155
154
|
id: sp
|
|
156
|
-
uses: actions/setup-python@
|
|
155
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
|
|
157
156
|
with:
|
|
158
157
|
python-version: ${{ matrix.python-version }}
|
|
159
158
|
allow-prereleases: true
|
|
160
159
|
- name: Install Just
|
|
161
160
|
uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3
|
|
161
|
+
with:
|
|
162
|
+
just-version: 1.58.0
|
|
162
163
|
- name: Install uv
|
|
163
|
-
uses: astral-sh/setup-uv@
|
|
164
|
+
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
|
|
164
165
|
with:
|
|
165
166
|
enable-cache: true
|
|
166
167
|
- name: install-vim-windows
|
|
@@ -191,23 +192,25 @@ jobs:
|
|
|
191
192
|
runs-on: ubuntu-latest
|
|
192
193
|
permissions:
|
|
193
194
|
contents: read
|
|
194
|
-
id-token: write
|
|
195
|
+
id-token: write # for oidc authentication to codecov
|
|
195
196
|
|
|
196
197
|
steps:
|
|
197
|
-
- uses: actions/checkout@
|
|
198
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
198
199
|
with:
|
|
199
200
|
persist-credentials: false
|
|
200
|
-
- uses: actions/setup-python@
|
|
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@
|
|
207
|
+
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d
|
|
207
208
|
with:
|
|
208
209
|
enable-cache: true
|
|
209
210
|
- name: Setup Just
|
|
210
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 }}
|
|
@@ -12,17 +12,21 @@ 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@
|
|
29
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
26
30
|
with:
|
|
27
31
|
persist-credentials: false
|
|
28
32
|
|
|
@@ -38,7 +42,7 @@ 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
48
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
|
|
@@ -48,7 +52,7 @@ jobs:
|
|
|
48
52
|
retention-days: 7
|
|
49
53
|
|
|
50
54
|
- name: Upload to code-scanning
|
|
51
|
-
uses: github/codeql-action/upload-sarif@
|
|
55
|
+
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938
|
|
52
56
|
with:
|
|
53
57
|
sarif_file: results.sarif
|
|
54
58
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: enum-properties
|
|
3
|
-
Version: 2.8.
|
|
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
|
|
@@ -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.8.
|
|
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"
|
|
@@ -29,7 +29,7 @@ from collections.abc import Generator, Hashable, Iterable, Mapping
|
|
|
29
29
|
from dataclasses import dataclass
|
|
30
30
|
from functools import cached_property
|
|
31
31
|
|
|
32
|
-
VERSION = (2, 8,
|
|
32
|
+
VERSION = (2, 8, 1)
|
|
33
33
|
|
|
34
34
|
__title__ = "Enum Properties"
|
|
35
35
|
__version__ = ".".join(str(i) for i in VERSION)
|
|
@@ -405,6 +405,96 @@ class TestFlags(TestCase):
|
|
|
405
405
|
def label(self):
|
|
406
406
|
return "label"
|
|
407
407
|
|
|
408
|
+
if sys.version_info >= (3, 15): # pragma: no cover
|
|
409
|
+
|
|
410
|
+
def test_show_flag_values(self):
|
|
411
|
+
"""
|
|
412
|
+
In 3.15, show_flag_values was added to enum.__all__ making it
|
|
413
|
+
public API.
|
|
414
|
+
"""
|
|
415
|
+
import enum
|
|
416
|
+
|
|
417
|
+
self.assertIn("show_flag_values", enum.__all__)
|
|
418
|
+
|
|
419
|
+
class Perm(IntFlagProperties):
|
|
420
|
+
label: Annotated[str, Symmetric(case_fold=True)]
|
|
421
|
+
|
|
422
|
+
R = 1, "read"
|
|
423
|
+
W = 2, "write"
|
|
424
|
+
X = 4, "execute"
|
|
425
|
+
RWX = 7, "all"
|
|
426
|
+
|
|
427
|
+
self.assertEqual(enum.show_flag_values(Perm.R), [1])
|
|
428
|
+
self.assertEqual(enum.show_flag_values(Perm.R | Perm.X), [1, 4])
|
|
429
|
+
self.assertEqual(enum.show_flag_values(Perm.RWX), [1, 2, 4])
|
|
430
|
+
self.assertEqual(enum.show_flag_values(Perm("all")), [1, 2, 4])
|
|
431
|
+
self.assertEqual(enum.show_flag_values(Perm(0)), [])
|
|
432
|
+
|
|
433
|
+
class FPerm(FlagProperties):
|
|
434
|
+
label: Annotated[str, Symmetric(case_fold=True)]
|
|
435
|
+
|
|
436
|
+
R = auto(), "read"
|
|
437
|
+
W = auto(), "write"
|
|
438
|
+
X = auto(), "execute"
|
|
439
|
+
|
|
440
|
+
self.assertEqual(enum.show_flag_values(FPerm.W), [2])
|
|
441
|
+
self.assertEqual(enum.show_flag_values(FPerm(["read", "execute"])), [1, 4])
|
|
442
|
+
|
|
443
|
+
def test_enum_bin(self):
|
|
444
|
+
"""
|
|
445
|
+
In 3.15, bin was added to enum.__all__ making it public API. It
|
|
446
|
+
renders twos-complement with an explicit leading sign bit.
|
|
447
|
+
"""
|
|
448
|
+
import enum
|
|
449
|
+
|
|
450
|
+
self.assertIn("bin", enum.__all__)
|
|
451
|
+
|
|
452
|
+
self.assertEqual(enum.bin(10), "0b0 1010")
|
|
453
|
+
self.assertEqual(enum.bin(~10), "0b1 0101")
|
|
454
|
+
|
|
455
|
+
class Perm(IntFlagProperties):
|
|
456
|
+
label: Annotated[str, Symmetric(case_fold=True)]
|
|
457
|
+
|
|
458
|
+
R = 1, "read"
|
|
459
|
+
W = 2, "write"
|
|
460
|
+
X = 4, "execute"
|
|
461
|
+
|
|
462
|
+
self.assertEqual(enum.bin(Perm.R), "0b0 1")
|
|
463
|
+
self.assertEqual(enum.bin(Perm.W | Perm.X), "0b0 110")
|
|
464
|
+
self.assertEqual(enum.bin(Perm("read") | Perm("write")), "0b0 11")
|
|
465
|
+
|
|
466
|
+
def test_flag_negative_value_inversion(self):
|
|
467
|
+
"""
|
|
468
|
+
In 3.15, negative flag values declared in the class body are
|
|
469
|
+
inverted against the mask of positive member bits, so members
|
|
470
|
+
can be declared with ~ and negative lookups resolve to their
|
|
471
|
+
positive complement.
|
|
472
|
+
"""
|
|
473
|
+
|
|
474
|
+
class Perm(IntFlagProperties):
|
|
475
|
+
label: Annotated[str, Symmetric(case_fold=True)]
|
|
476
|
+
|
|
477
|
+
R = 1, "read"
|
|
478
|
+
W = 2, "write"
|
|
479
|
+
X = 4, "execute"
|
|
480
|
+
NOT_R = ~1, "not read"
|
|
481
|
+
|
|
482
|
+
# ~1 == -2 is masked against R|W|X to the positive composite W|X
|
|
483
|
+
self.assertEqual(Perm.NOT_R.value, 6)
|
|
484
|
+
self.assertEqual(Perm.NOT_R.label, "not read")
|
|
485
|
+
self.assertIs(~Perm.R, Perm.NOT_R)
|
|
486
|
+
self.assertEqual((~Perm.R).label, "not read")
|
|
487
|
+
self.assertIs(Perm.NOT_R, Perm.W | Perm.X)
|
|
488
|
+
|
|
489
|
+
# negative lookup values also resolve to the positive complement
|
|
490
|
+
self.assertIs(Perm(-2), Perm.NOT_R)
|
|
491
|
+
self.assertIs(Perm(~Perm.R.value), Perm.NOT_R)
|
|
492
|
+
|
|
493
|
+
# symmetric property lookup still works for ~-declared members
|
|
494
|
+
self.assertIs(Perm("not read"), Perm.NOT_R)
|
|
495
|
+
self.assertIs(Perm("NOT READ"), Perm.NOT_R)
|
|
496
|
+
self.assertIs(Perm(["write", "execute"]), Perm.NOT_R)
|
|
497
|
+
|
|
408
498
|
if sys.version_info >= (3, 12): # pragma: no cover
|
|
409
499
|
|
|
410
500
|
def test_enum_dataclass_support(self):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{enum_properties-2.8.0 → enum_properties-2.8.1}/tests/annotations/test_future_annotations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{enum_properties-2.8.0 → enum_properties-2.8.1}/tests/examples/howto_dataclass_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|