pythonic-fp-gadgets 4.0.3__tar.gz → 4.0.4__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.
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/.github/workflows/static.yml +11 -5
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/.gitignore +1 -3
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/CHANGELOG.rst +12 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/PKG-INFO +8 -8
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/README.rst +4 -4
- pythonic_fp_gadgets-4.0.4/docs/Makefile +78 -0
- pythonic_fp_gadgets-4.0.4/docs/gen_conf.py +110 -0
- pythonic_fp_gadgets-4.0.4/docs/source/_static/custom.css +3 -0
- {pythonic_fp_gadgets-4.0.3/docs/source/docs → pythonic_fp_gadgets-4.0.4/docs/source/api}/functions/first_common_ancestor.rst +1 -1
- {pythonic_fp_gadgets-4.0.3/docs/source/docs → pythonic_fp_gadgets-4.0.4/docs/source/api}/functions/iterate_over_arguments.rst +1 -1
- {pythonic_fp_gadgets-4.0.3/docs/source/docs → pythonic_fp_gadgets-4.0.4/docs/source/api}/sentinels/index.rst +4 -2
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/docs/source/changelog.rst +1 -1
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/docs/source/description.rst +3 -2
- pythonic_fp_gadgets-4.0.3/docs/index_release.rst → pythonic_fp_gadgets-4.0.4/docs/source/index.rst +3 -3
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/docs/source/releases.rst +5 -1
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/pyproject.toml +7 -5
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/__init__.py +19 -19
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/__init__.pyi +2 -2
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/box.py +54 -25
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/sentinels/__init__.py +14 -3
- pythonic_fp_gadgets-4.0.4/src/pythonic_fp/gadgets/sentinels/__init__.pyi +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/sentinels/flavored.py +49 -32
- pythonic_fp_gadgets-4.0.4/src/pythonic_fp/gadgets/sentinels/novalue.py +187 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/sentinels/novalue.pyi +2 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/wrap.py +25 -10
- pythonic_fp_gadgets-4.0.3/docs/Makefile +0 -47
- pythonic_fp_gadgets-4.0.3/docs/build/index.html +0 -44
- pythonic_fp_gadgets-4.0.3/docs/build/style.css +0 -44
- pythonic_fp_gadgets-4.0.3/docs/conf_devel.py +0 -61
- pythonic_fp_gadgets-4.0.3/docs/conf_release.py +0 -61
- pythonic_fp_gadgets-4.0.3/docs/index_devel.rst +0 -30
- pythonic_fp_gadgets-4.0.3/src/pythonic_fp/gadgets/sentinels/novalue.py +0 -128
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/LICENSE +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/docs/requirements.txt +0 -0
- /pythonic_fp_gadgets-4.0.3/docs/build/.nojekyll → /pythonic_fp_gadgets-4.0.4/docs/source/_static/.gitkeep +0 -0
- /pythonic_fp_gadgets-4.0.3/src/pythonic_fp/gadgets/py.typed → /pythonic_fp_gadgets-4.0.4/docs/source/_templates/.gitkeep +0 -0
- {pythonic_fp_gadgets-4.0.3/docs/source/docs → pythonic_fp_gadgets-4.0.4/docs/source/api}/box.rst +0 -0
- {pythonic_fp_gadgets-4.0.3/docs/source/docs → pythonic_fp_gadgets-4.0.4/docs/source/api}/functions/index.rst +0 -0
- {pythonic_fp_gadgets-4.0.3/docs/source/docs → pythonic_fp_gadgets-4.0.4/docs/source/api}/index.rst +0 -0
- {pythonic_fp_gadgets-4.0.3/docs/source/docs → pythonic_fp_gadgets-4.0.4/docs/source/api}/sentinels/flavored.rst +0 -0
- {pythonic_fp_gadgets-4.0.3/docs/source/docs → pythonic_fp_gadgets-4.0.4/docs/source/api}/sentinels/novalue.rst +0 -0
- {pythonic_fp_gadgets-4.0.3/docs/source/docs → pythonic_fp_gadgets-4.0.4/docs/source/api}/wrap.rst +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/docs/source/usage.rst +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/box.pyi +0 -0
- /pythonic_fp_gadgets-4.0.3/src/pythonic_fp/gadgets/sentinels/__init__.pyi → /pythonic_fp_gadgets-4.0.4/src/pythonic_fp/gadgets/py.typed +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/sentinels/flavored.pyi +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/wrap.pyi +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/tests/sentinels/test_novalue.py +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/tests/sentinels/test_sentinel_hidden_implemetation_detail.py +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/tests/sentinels/test_sentinel_with_functions.py +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/tests/test_box.py +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/tests/test_first_common_ancestor.py +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/tests/test_hwrap.py +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/tests/test_iterate_over_arguments.py +0 -0
- {pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/tests/test_wrap.py +0 -0
|
@@ -5,6 +5,11 @@ on:
|
|
|
5
5
|
branches: ["main"]
|
|
6
6
|
workflow_dispatch:
|
|
7
7
|
|
|
8
|
+
env:
|
|
9
|
+
RELEASE: '4.0.4'
|
|
10
|
+
DEVEL: '4.0.4'
|
|
11
|
+
PYTHON: '3.14'
|
|
12
|
+
|
|
8
13
|
permissions:
|
|
9
14
|
contents: read
|
|
10
15
|
pages: write
|
|
@@ -17,6 +22,9 @@ concurrency:
|
|
|
17
22
|
jobs:
|
|
18
23
|
deploy:
|
|
19
24
|
runs-on: ubuntu-latest
|
|
25
|
+
environment:
|
|
26
|
+
name: github-pages
|
|
27
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
20
28
|
steps:
|
|
21
29
|
- name: Checkout
|
|
22
30
|
uses: actions/checkout@v6
|
|
@@ -24,7 +32,7 @@ jobs:
|
|
|
24
32
|
- name: Select Python
|
|
25
33
|
uses: actions/setup-python@v6
|
|
26
34
|
with:
|
|
27
|
-
python-version:
|
|
35
|
+
python-version: ${{ env.PYTHON }}
|
|
28
36
|
|
|
29
37
|
- name: Install Sphinx Dependencies
|
|
30
38
|
run: |
|
|
@@ -34,15 +42,13 @@ jobs:
|
|
|
34
42
|
- name: Build Release Docs
|
|
35
43
|
run: |
|
|
36
44
|
pip install pythonic-fp-gadgets
|
|
37
|
-
|
|
38
|
-
cp docs/conf_release.py docs/source/conf.py
|
|
45
|
+
docs/gen_conf.py release ${{ env.RELEASE }} Gadgets gadgets > docs/source/conf.py
|
|
39
46
|
sphinx-build -M html docs/source docs/build/release
|
|
40
47
|
|
|
41
48
|
- name: Build Development Docs
|
|
42
49
|
run: |
|
|
43
50
|
pip install -e .
|
|
44
|
-
|
|
45
|
-
cp docs/conf_devel.py docs/source/conf.py
|
|
51
|
+
docs/gen_conf.py devel ${{ env.DEVEL }} Gadgets gadgets > docs/source/conf.py
|
|
46
52
|
sphinx-build -M html docs/source docs/build/development
|
|
47
53
|
|
|
48
54
|
- name: Setup Pages
|
|
@@ -17,6 +17,18 @@ See `Semantic Versioning 2.0.0 <https://semver.org>`_.
|
|
|
17
17
|
Releases and Important Milestones
|
|
18
18
|
---------------------------------
|
|
19
19
|
|
|
20
|
+
PyPI 4.0.4 - 2026-04-26
|
|
21
|
+
~~~~~~~~~~~~~~~~~~~~~~~
|
|
22
|
+
|
|
23
|
+
Much docstring work for sentinels. Need to push now going into
|
|
24
|
+
documentation maintenance to fix broken links on PyPI.
|
|
25
|
+
|
|
26
|
+
Development Status Reappraisal - 2026-05-05
|
|
27
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
28
|
+
|
|
29
|
+
Maintainer appraised the Development Status for
|
|
30
|
+
pythonic-fp-gadgets to be ``"3 - Alpha"``.
|
|
31
|
+
|
|
20
32
|
PyPI 4.0.3 - 2026-04-26
|
|
21
33
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
22
34
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pythonic-fp-gadgets
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.4
|
|
4
4
|
Summary: Gadgets
|
|
5
5
|
Keywords: gadgets
|
|
6
6
|
Author-email: "Geoffrey R. Scheller" <geoffrey@scheller.com>
|
|
7
7
|
Requires-Python: >=3.13
|
|
8
8
|
Description-Content-Type: text/x-rst
|
|
9
|
-
Classifier: Development Status ::
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
10
|
Classifier: Framework :: Pytest
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
12
12
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
@@ -17,8 +17,8 @@ License-File: LICENSE
|
|
|
17
17
|
Requires-Dist: pytest>=8.4.1 ; extra == "test"
|
|
18
18
|
Requires-Dist: pythonic-fp-circulararray>=6.0.4 ; extra == "test"
|
|
19
19
|
Project-URL: Changelog, https://github.com/grscheller/pythonic-fp-gadgets/blob/main/CHANGELOG.rst
|
|
20
|
-
Project-URL: Documentation, https://grscheller.github.io/pythonic-fp
|
|
21
|
-
Project-URL: Homepage, https://grscheller.github.io/pythonic-fp/
|
|
20
|
+
Project-URL: Documentation, https://grscheller.github.io/pythonic-fp/projects/gadgets.html
|
|
21
|
+
Project-URL: Homepage, https://grscheller.github.io/pythonic-fp/
|
|
22
22
|
Project-URL: Source, https://github.com/grscheller/pythonic-fp-gadgets
|
|
23
23
|
Provides-Extra: test
|
|
24
24
|
|
|
@@ -35,22 +35,22 @@ outside the Python Standard Library.
|
|
|
35
35
|
- Gadgets
|
|
36
36
|
|
|
37
37
|
- single item box
|
|
38
|
-
- wrapped (hashable) references
|
|
38
|
+
- immutable wrapped (hashable) references
|
|
39
39
|
- function returning iterator of its arguments
|
|
40
40
|
- function to find the latest common ancestor of two classes
|
|
41
41
|
- sentinel values
|
|
42
42
|
|
|
43
43
|
Part of the
|
|
44
44
|
`pythonic-fp
|
|
45
|
-
<https://grscheller.github.io/pythonic-fp
|
|
45
|
+
<https://grscheller.github.io/pythonic-fp/>`_
|
|
46
46
|
PyPI projects.
|
|
47
47
|
|
|
48
48
|
Documentation
|
|
49
49
|
-------------
|
|
50
50
|
|
|
51
|
-
Documentation for this project
|
|
51
|
+
Documentation and other links for this project are hosted on
|
|
52
52
|
`GitHub Pages
|
|
53
|
-
<https://grscheller.github.io/pythonic-fp
|
|
53
|
+
<https://grscheller.github.io/pythonic-fp/projects/gadgets.html>`_.
|
|
54
54
|
|
|
55
55
|
Copyright and License
|
|
56
56
|
---------------------
|
|
@@ -11,22 +11,22 @@ outside the Python Standard Library.
|
|
|
11
11
|
- Gadgets
|
|
12
12
|
|
|
13
13
|
- single item box
|
|
14
|
-
- wrapped (hashable) references
|
|
14
|
+
- immutable wrapped (hashable) references
|
|
15
15
|
- function returning iterator of its arguments
|
|
16
16
|
- function to find the latest common ancestor of two classes
|
|
17
17
|
- sentinel values
|
|
18
18
|
|
|
19
19
|
Part of the
|
|
20
20
|
`pythonic-fp
|
|
21
|
-
<https://grscheller.github.io/pythonic-fp
|
|
21
|
+
<https://grscheller.github.io/pythonic-fp/>`_
|
|
22
22
|
PyPI projects.
|
|
23
23
|
|
|
24
24
|
Documentation
|
|
25
25
|
-------------
|
|
26
26
|
|
|
27
|
-
Documentation for this project
|
|
27
|
+
Documentation and other links for this project are hosted on
|
|
28
28
|
`GitHub Pages
|
|
29
|
-
<https://grscheller.github.io/pythonic-fp
|
|
29
|
+
<https://grscheller.github.io/pythonic-fp/projects/gadgets.html>`_.
|
|
30
30
|
|
|
31
31
|
Copyright and License
|
|
32
32
|
---------------------
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Makefile for Sphinx documentation
|
|
2
|
+
|
|
3
|
+
# Last and future releases
|
|
4
|
+
# - former needs to agree with PyPI
|
|
5
|
+
# - later needs to agree with pyproject.toml
|
|
6
|
+
PROJECT_NAME = Gadgets
|
|
7
|
+
PYPI_NAME = gadgets
|
|
8
|
+
RELEASE_VERSION = 4.0.4
|
|
9
|
+
DEVEL_VERSION = 4.0.4
|
|
10
|
+
CUSTOM_VERSION = 0.0.0
|
|
11
|
+
|
|
12
|
+
SPHINXOPTS ?=
|
|
13
|
+
SPHINXBUILD ?= sphinx-build
|
|
14
|
+
SOURCEDIR = source
|
|
15
|
+
BUILDDIR = build
|
|
16
|
+
|
|
17
|
+
STATICDIR = source/_static
|
|
18
|
+
TEMPLATEDIR = source/_templates
|
|
19
|
+
|
|
20
|
+
# Put help first so that "make" without argument is like "make help".
|
|
21
|
+
help:
|
|
22
|
+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
|
23
|
+
|
|
24
|
+
clean_source:
|
|
25
|
+
@rm -f "$(SOURCEDIR)"/conf.py
|
|
26
|
+
|
|
27
|
+
clean_devel:
|
|
28
|
+
@rm -rf "$(BUILDDIR)"/development
|
|
29
|
+
|
|
30
|
+
clean_release:
|
|
31
|
+
@rm -rf "$(BUILDDIR)"/release
|
|
32
|
+
|
|
33
|
+
clean_custom:
|
|
34
|
+
@rm -rf "$(BUILDDIR)"/custom
|
|
35
|
+
|
|
36
|
+
clean: clean_devel clean_release clean_custom clean_source
|
|
37
|
+
@rm -rf $(BUILDDIR)
|
|
38
|
+
@echo Removed all doc build artifacts.
|
|
39
|
+
|
|
40
|
+
setup_devel: clean_devel
|
|
41
|
+
@./gen_conf.py devel "$(DEVEL_VERSION)" "$(PROJECT_NAME)" "$(PYPI_NAME)" > "$(SOURCEDIR)"/conf.py
|
|
42
|
+
|
|
43
|
+
setup_release: clean_release
|
|
44
|
+
@./gen_conf.py release "$(RELEASE_VERSION)" "$(PROJECT_NAME)" "$(PYPI_NAME)" > "$(SOURCEDIR)"/conf.py
|
|
45
|
+
|
|
46
|
+
setup_custom: clean_custom
|
|
47
|
+
@./gen_conf.py custom "$(CUSTOM_VERSION)" "$(PROJECT_NAME)" "$(PYPI_NAME)" > "$(SOURCEDIR)"/conf.py
|
|
48
|
+
|
|
49
|
+
setup_redo: clean_custom
|
|
50
|
+
@echo Redoing custom build with a possibly reeditted conf.py
|
|
51
|
+
@./gen_conf.py redo "" "" ""
|
|
52
|
+
|
|
53
|
+
# Build development labeled html docs.
|
|
54
|
+
devel: Makefile setup_devel
|
|
55
|
+
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/development $(SPHINXOPTS)
|
|
56
|
+
|
|
57
|
+
# Build release labeled html docs.
|
|
58
|
+
release: Makefile setup_release
|
|
59
|
+
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/release $(SPHINXOPTS)
|
|
60
|
+
|
|
61
|
+
# Build custom labeled html docs.
|
|
62
|
+
custom: Makefile setup_custom
|
|
63
|
+
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/custom $(SPHINXOPTS)
|
|
64
|
+
|
|
65
|
+
# Build HTML docs with previous generated (possibly hand edited) source/conf.py,
|
|
66
|
+
# put results in $(BUILDDIR)/custom.
|
|
67
|
+
redo: Makefile setup_redo
|
|
68
|
+
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/custom $(SPHINXOPTS)
|
|
69
|
+
|
|
70
|
+
# Catch-all target: route all unknown targets to Sphinx and save to $(BUILDDIR)/custom.
|
|
71
|
+
# Reuse a previously generated source/conf.py.
|
|
72
|
+
%: Makefile setup_redo
|
|
73
|
+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)"/custom $(SPHINXOPTS)
|
|
74
|
+
|
|
75
|
+
.PHONY: help Makefile
|
|
76
|
+
.PHONY: setup_devel setup_release setup_custom
|
|
77
|
+
.PHONY: devel release
|
|
78
|
+
.PHONY: clean_source clean_devel clean_release clean_custom clean
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Generate conf.py Sphinx configuration executable
|
|
3
|
+
|
|
4
|
+
import sys
|
|
5
|
+
import os
|
|
6
|
+
|
|
7
|
+
project_prefix = 'Pythonic FP'
|
|
8
|
+
pypi_prefix = 'pythonic-fp'
|
|
9
|
+
author = 'Geoffrey R. Scheller'
|
|
10
|
+
copyright = f'2023-2026, {author}'
|
|
11
|
+
|
|
12
|
+
args = sys.argv[1:]
|
|
13
|
+
num_args = len(args)
|
|
14
|
+
|
|
15
|
+
if num_args == 4:
|
|
16
|
+
build_type, version, project_name, pypi_name = args
|
|
17
|
+
project = project_prefix + ' - ' + project_name
|
|
18
|
+
pypi_project_repo = pypi_prefix + '-' + pypi_name
|
|
19
|
+
project_url_rst = f'`{project} <https://pypi.org/project/{pypi_project_repo}/>`_'
|
|
20
|
+
homepage_url_rst = f'`{project_prefix} <https://grscheller.github.io/{pypi_prefix}/>`_'
|
|
21
|
+
|
|
22
|
+
else:
|
|
23
|
+
sys.exit('Error: gen_conf.py takes exactly 4 arguments')
|
|
24
|
+
|
|
25
|
+
match build_type:
|
|
26
|
+
case 'custom':
|
|
27
|
+
release = f'{version}'
|
|
28
|
+
release_string = f'**Custom PyPI Non-release version {release}**'
|
|
29
|
+
case 'devel':
|
|
30
|
+
release = f'{version}'
|
|
31
|
+
release_string = f'**Proposed PyPI release version {release}**'
|
|
32
|
+
case 'release':
|
|
33
|
+
release = f'{version}'
|
|
34
|
+
release_string = f'**PyPI release version {release}**'
|
|
35
|
+
case 'redo':
|
|
36
|
+
if not os.path.isfile('source/conf.py'):
|
|
37
|
+
sys.exit('Error: cannot redo without source/conf.py')
|
|
38
|
+
sys.exit()
|
|
39
|
+
case _:
|
|
40
|
+
sys.exit(f'Error: unknown built_type {build_type} given')
|
|
41
|
+
|
|
42
|
+
print(f'''# Generated conf.py Sphinx configuration executable
|
|
43
|
+
|
|
44
|
+
from typing import Any
|
|
45
|
+
from sphinx.application import Sphinx
|
|
46
|
+
|
|
47
|
+
project = '{project}'
|
|
48
|
+
author = '{author}'
|
|
49
|
+
copyright = '{copyright}'
|
|
50
|
+
release = '{release}'
|
|
51
|
+
release_string = '{release_string}'
|
|
52
|
+
|
|
53
|
+
def skip_abc_methods(
|
|
54
|
+
app: Any, what: str, name: str, obj: Any, skip: bool, options: Any
|
|
55
|
+
) -> bool:
|
|
56
|
+
if name in [
|
|
57
|
+
'__init_subclass__',
|
|
58
|
+
'__subclasshook__',
|
|
59
|
+
'__class_getitem__',
|
|
60
|
+
'__weakref__',
|
|
61
|
+
]:
|
|
62
|
+
return True # Skip these members
|
|
63
|
+
return skip
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def setup(app: Sphinx) -> None:
|
|
67
|
+
app.connect('autodoc-skip-member', skip_abc_methods)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
extensions = [
|
|
71
|
+
'sphinx.ext.autodoc',
|
|
72
|
+
'sphinx.ext.graphviz',
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
autodoc_default_options = {{
|
|
76
|
+
'members': True,
|
|
77
|
+
'private-members': True,
|
|
78
|
+
'special-members': True,
|
|
79
|
+
'inherited-members': False,
|
|
80
|
+
'show-inheritance': True,
|
|
81
|
+
}}
|
|
82
|
+
autodoc_member_order = 'bysource'
|
|
83
|
+
autoclass_content = 'class'
|
|
84
|
+
autodoc_class_signature = 'separated'
|
|
85
|
+
autodoc_typehints_format = 'short'
|
|
86
|
+
autodoc_use_type_comments = True
|
|
87
|
+
autodoc_docstring_signature = False
|
|
88
|
+
autodoc_preserve_defaults = True
|
|
89
|
+
autodoc_warningiserror = False
|
|
90
|
+
|
|
91
|
+
templates_path = ['_templates']
|
|
92
|
+
exclude_patterns: list[str] = []
|
|
93
|
+
|
|
94
|
+
html_theme_options = {{
|
|
95
|
+
'light_css_variables': {{
|
|
96
|
+
'color-link--visited': 'var(--color-link)',
|
|
97
|
+
}},
|
|
98
|
+
'dark_css_variables': {{
|
|
99
|
+
'color-link--visited': 'var(--color-link)',
|
|
100
|
+
}},
|
|
101
|
+
}}
|
|
102
|
+
html_theme = 'furo'
|
|
103
|
+
html_static_path = ['_static']
|
|
104
|
+
html_css_files = ['custom.css']
|
|
105
|
+
|
|
106
|
+
rst_epilog = """
|
|
107
|
+
.. |RELEASE_STRING| replace:: {release_string}
|
|
108
|
+
|
|
109
|
+
"""
|
|
110
|
+
''')
|
pythonic_fp_gadgets-4.0.3/docs/index_release.rst → pythonic_fp_gadgets-4.0.4/docs/source/index.rst
RENAMED
|
@@ -2,12 +2,12 @@ pythonic-fp-gadgets
|
|
|
2
2
|
===================
|
|
3
3
|
|
|
4
4
|
Project
|
|
5
|
-
`
|
|
5
|
+
`Pythonic FP - Gadgets <https://pypi.org/project/pythonic-fp-gadgets/>`_
|
|
6
6
|
one of the
|
|
7
7
|
`Pythonic FP <https://grscheller.github.io/pythonic-fp/>`_
|
|
8
8
|
PyPI projects.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
|RELEASE_STRING|
|
|
11
11
|
|
|
12
12
|
.. toctree::
|
|
13
13
|
:caption: Overview
|
|
@@ -27,4 +27,4 @@ PyPI projects.
|
|
|
27
27
|
:caption: API Documentation
|
|
28
28
|
:maxdepth: 1
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
api/index
|
|
@@ -8,7 +8,11 @@ PyPI releases
|
|
|
8
8
|
+=====================================================================================+==============+
|
|
9
9
|
| `development <https://grscheller.github.io/pythonic-fp-gadgets/development/html/>`_ | |
|
|
10
10
|
+-------------------------------------------------------------------------------------+--------------+
|
|
11
|
-
| `v4.0.
|
|
11
|
+
| `v4.0.4 <https://grscheller.github.io/pythonic-fp-gadgets/release/html/>`_ | 2026-05-12 |
|
|
12
|
+
+-------------------------------------------------------------------------------------+--------------+
|
|
13
|
+
| v4.0.3 | 2026-04-26 |
|
|
14
|
+
+-------------------------------------------------------------------------------------+--------------+
|
|
15
|
+
| v4.0.2 | 2026-01-08 |
|
|
12
16
|
+-------------------------------------------------------------------------------------+--------------+
|
|
13
17
|
| v4.0.1 | 2025-12-02 |
|
|
14
18
|
+-------------------------------------------------------------------------------------+--------------+
|
|
@@ -4,15 +4,17 @@ build-backend = "flit_core.buildapi"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pythonic-fp-gadgets"
|
|
7
|
-
version = "4.0.
|
|
7
|
+
version = "4.0.4"
|
|
8
8
|
readme = "README.rst"
|
|
9
9
|
requires-python = ">=3.13"
|
|
10
|
-
authors = [
|
|
10
|
+
authors = [
|
|
11
|
+
{ name = "Geoffrey R. Scheller", email = "geoffrey@scheller.com" },
|
|
12
|
+
]
|
|
11
13
|
keywords = [
|
|
12
14
|
"gadgets",
|
|
13
15
|
]
|
|
14
16
|
classifiers = [
|
|
15
|
-
"Development Status ::
|
|
17
|
+
"Development Status :: 3 - Alpha",
|
|
16
18
|
"Framework :: Pytest",
|
|
17
19
|
"Intended Audience :: Developers",
|
|
18
20
|
"License :: OSI Approved :: Apache Software License",
|
|
@@ -25,8 +27,8 @@ dynamic = ["description"]
|
|
|
25
27
|
|
|
26
28
|
[project.urls]
|
|
27
29
|
Changelog = "https://github.com/grscheller/pythonic-fp-gadgets/blob/main/CHANGELOG.rst"
|
|
28
|
-
Documentation = "https://grscheller.github.io/pythonic-fp
|
|
29
|
-
Homepage = "https://grscheller.github.io/pythonic-fp/
|
|
30
|
+
Documentation = "https://grscheller.github.io/pythonic-fp/projects/gadgets.html"
|
|
31
|
+
Homepage = "https://grscheller.github.io/pythonic-fp/"
|
|
30
32
|
Source = "https://github.com/grscheller/pythonic-fp-gadgets"
|
|
31
33
|
|
|
32
34
|
[project.optional-dependencies]
|
|
@@ -14,14 +14,15 @@
|
|
|
14
14
|
|
|
15
15
|
"""
|
|
16
16
|
Gadgets
|
|
17
|
-
|
|
17
|
+
=======
|
|
18
18
|
|
|
19
19
|
.. admonition:: Collection of mostly self-contained functions and classes
|
|
20
20
|
|
|
21
21
|
- Functions and classes which could go multiple places or have
|
|
22
22
|
no good place to go.
|
|
23
23
|
- Self-contained with minimal dependencies.
|
|
24
|
-
|
|
24
|
+
|
|
25
|
+
- No pythonic_fp dependencies at all.
|
|
25
26
|
|
|
26
27
|
"""
|
|
27
28
|
|
|
@@ -42,23 +43,22 @@ def first_common_ancestor(cls1: type, cls2: type) -> type:
|
|
|
42
43
|
Find the least upper bound in the inheritance graph
|
|
43
44
|
of two classes.
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
:param cls1: A class in the inheritance hierarchy.
|
|
47
|
+
:param cls2: A class in the inheritance hierarchy.
|
|
48
|
+
:returns: First common ancestor based on ``getmro`` order.
|
|
49
|
+
:raises TypeError: Raised when no common ancestor exists, or when
|
|
50
|
+
not caught when raised by ``inspect.getmro``.
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
- type 'bool' is not an acceptable base type
|
|
52
|
+
.. warning::
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
This function can fail with a TypeError. Some error messages
|
|
55
|
+
seen are
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
:returns: First common ancestor based on ``getmro`` order.
|
|
59
|
-
:raises TypeError: Raised when no common ancestor exists, or when
|
|
60
|
-
not caught when raised by ``inspect.getmro``.
|
|
57
|
+
- multiple bases have instance lay-out conflict
|
|
58
|
+
- type 'bool' is not an acceptable base type
|
|
61
59
|
|
|
60
|
+
This happens frequently when the function is given
|
|
61
|
+
Python builtin types or in multiple inheritance situations.
|
|
62
62
|
"""
|
|
63
63
|
if issubclass(cls1, cls2):
|
|
64
64
|
return cls2
|
|
@@ -77,12 +77,12 @@ def iterate_over_arguments[A](*args: A) -> Iterator[A]:
|
|
|
77
77
|
|
|
78
78
|
Function returning an iterator over its arguments.
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
:param args: Objects to iterate over.
|
|
81
|
+
:returns: An iterator of the function's arguments.
|
|
81
82
|
|
|
82
|
-
|
|
83
|
+
.. note::
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
:returns: An iterator of the functions arguments.
|
|
85
|
+
Does not create a Python object to iterate over.
|
|
86
86
|
|
|
87
87
|
"""
|
|
88
88
|
yield from args
|
{pythonic_fp_gadgets-4.0.3 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/__init__.pyi
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from collections.abc import Iterator
|
|
2
2
|
|
|
3
|
-
__all__ = ['
|
|
3
|
+
__all__ = ['first_common_ancestor', 'iterate_over_arguments']
|
|
4
4
|
|
|
5
|
-
def iterate_over_arguments[A](*args: A) -> Iterator[A]: ...
|
|
6
5
|
def first_common_ancestor(cls1: type, cls2: type) -> type: ...
|
|
6
|
+
def iterate_over_arguments[A](*args: A) -> Iterator[A]: ...
|