pythonic-fp-gadgets 4.1.0__tar.gz → 4.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/PKG-INFO +21 -30
- pythonic_fp_gadgets-4.1.0/README.rst → pythonic_fp_gadgets-4.2.0/README.md +13 -21
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/pyproject.toml +29 -24
- pythonic_fp_gadgets-4.1.0/.github/workflows/static.yml +0 -64
- pythonic_fp_gadgets-4.1.0/.gitignore +0 -9
- pythonic_fp_gadgets-4.1.0/CHANGELOG.rst +0 -117
- pythonic_fp_gadgets-4.1.0/docs/Makefile +0 -78
- pythonic_fp_gadgets-4.1.0/docs/gen_conf.py +0 -110
- pythonic_fp_gadgets-4.1.0/docs/requirements.txt +0 -2
- pythonic_fp_gadgets-4.1.0/docs/source/_static/.gitkeep +0 -0
- pythonic_fp_gadgets-4.1.0/docs/source/_static/custom.css +0 -3
- pythonic_fp_gadgets-4.1.0/docs/source/_templates/.gitkeep +0 -0
- pythonic_fp_gadgets-4.1.0/docs/source/api/box.rst +0 -6
- pythonic_fp_gadgets-4.1.0/docs/source/api/functions/first_common_ancestor.rst +0 -4
- pythonic_fp_gadgets-4.1.0/docs/source/api/functions/index.rst +0 -8
- pythonic_fp_gadgets-4.1.0/docs/source/api/functions/iterate_over_arguments.rst +0 -4
- pythonic_fp_gadgets-4.1.0/docs/source/api/index.rst +0 -31
- pythonic_fp_gadgets-4.1.0/docs/source/api/sentinels/flavored.rst +0 -8
- pythonic_fp_gadgets-4.1.0/docs/source/api/sentinels/index.rst +0 -14
- pythonic_fp_gadgets-4.1.0/docs/source/api/sentinels/novalue.rst +0 -11
- pythonic_fp_gadgets-4.1.0/docs/source/api/wrap.rst +0 -6
- pythonic_fp_gadgets-4.1.0/docs/source/changelog.rst +0 -7
- pythonic_fp_gadgets-4.1.0/docs/source/description.rst +0 -8
- pythonic_fp_gadgets-4.1.0/docs/source/index.rst +0 -30
- pythonic_fp_gadgets-4.1.0/docs/source/releases.rst +0 -28
- pythonic_fp_gadgets-4.1.0/docs/source/usage.rst +0 -160
- pythonic_fp_gadgets-4.1.0/tests/sentinels/test_novalue.py +0 -83
- pythonic_fp_gadgets-4.1.0/tests/sentinels/test_sentinel_hidden_implemetation_detail.py +0 -70
- pythonic_fp_gadgets-4.1.0/tests/sentinels/test_sentinel_with_functions.py +0 -31
- pythonic_fp_gadgets-4.1.0/tests/test_box.py +0 -95
- pythonic_fp_gadgets-4.1.0/tests/test_first_common_ancestor.py +0 -115
- pythonic_fp_gadgets-4.1.0/tests/test_hwrap.py +0 -76
- pythonic_fp_gadgets-4.1.0/tests/test_iterate_over_arguments.py +0 -46
- pythonic_fp_gadgets-4.1.0/tests/test_wrap.py +0 -71
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/LICENSE +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/__init__.py +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/__init__.pyi +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/box.py +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/box.pyi +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/py.typed +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/sentinels/__init__.py +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/sentinels/__init__.pyi +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/sentinels/flavored.py +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/sentinels/flavored.pyi +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/sentinels/novalue.py +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/sentinels/novalue.pyi +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/wrap.py +0 -0
- {pythonic_fp_gadgets-4.1.0 → pythonic_fp_gadgets-4.2.0}/src/pythonic_fp/gadgets/wrap.pyi +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: pythonic-fp-gadgets
|
|
3
|
-
Version: 4.
|
|
4
|
-
Summary: Gadgets
|
|
3
|
+
Version: 4.2.0
|
|
4
|
+
Summary: Gadgets without external Pythonic FP dependencies.
|
|
5
5
|
Keywords: gadgets
|
|
6
6
|
Author-email: "Geoffrey R. Scheller" <geoffrey@scheller.com>
|
|
7
7
|
Requires-Python: >=3.13
|
|
8
|
-
Description-Content-Type: text/
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
9
|
Classifier: Development Status :: 4 - Beta
|
|
10
10
|
Classifier: Framework :: Pytest
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
@@ -14,46 +14,37 @@ Classifier: Operating System :: OS Independent
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.14
|
|
15
15
|
Classifier: Typing :: Typed
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
|
|
18
|
-
|
|
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/projects/gadgets.html
|
|
17
|
+
Project-URL: Changelog, https://github.com/grscheller/pythonic-fp-gadgets/blob/main/CHANGELOG.md
|
|
18
|
+
Project-URL: Documentation, https://grscheller.github.io/pythonic-fp-gadgets/release/html/
|
|
21
19
|
Project-URL: Homepage, https://grscheller.github.io/pythonic-fp/
|
|
22
20
|
Project-URL: Source, https://github.com/grscheller/pythonic-fp-gadgets
|
|
23
|
-
|
|
21
|
+
Import-Name: pythonic_fp.gadgets
|
|
22
|
+
Import-Namespace: pythonic_fp
|
|
24
23
|
|
|
25
|
-
Pythonic FP - Gadgets
|
|
26
|
-
=====================
|
|
27
|
-
|
|
28
|
-
PyPI project
|
|
29
|
-
`pythonic-fp-gadgets
|
|
30
|
-
<https://pypi.org/project/pythonic-fp-gadgets>`_.
|
|
24
|
+
# Pythonic FP - Gadgets
|
|
31
25
|
|
|
32
26
|
Library of simple, but useful, classes and functions with no dependencies
|
|
33
27
|
outside the Python Standard Library.
|
|
34
28
|
|
|
35
|
-
|
|
29
|
+
PyPI project
|
|
30
|
+
[pythonic-fp-gadgets](https://pypi.org/project/pythonic-fp-gadgets).
|
|
31
|
+
Part of the
|
|
32
|
+
[pythonic-fp](https://grscheller.github.io/pythonic-fp/)
|
|
33
|
+
PyPI projects.
|
|
34
|
+
|
|
35
|
+
## Documentation
|
|
36
|
+
|
|
37
|
+
Documentation and other links for this project are hosted on
|
|
38
|
+
[GitHub Pages](https://grscheller.github.io/pythonic-fp/projects/gadgets.html).
|
|
36
39
|
|
|
40
|
+
- Gadgets
|
|
37
41
|
- single item box
|
|
38
42
|
- immutable wrapped (hashable) references
|
|
39
43
|
- function returning iterator of its arguments
|
|
40
44
|
- function to find the latest common ancestor of two classes
|
|
41
45
|
- sentinel values
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
`pythonic-fp
|
|
45
|
-
<https://grscheller.github.io/pythonic-fp/>`_
|
|
46
|
-
PyPI projects.
|
|
47
|
-
|
|
48
|
-
Documentation
|
|
49
|
-
-------------
|
|
50
|
-
|
|
51
|
-
Documentation and other links for this project are hosted on
|
|
52
|
-
`GitHub Pages
|
|
53
|
-
<https://grscheller.github.io/pythonic-fp/projects/gadgets.html>`_.
|
|
54
|
-
|
|
55
|
-
Copyright and License
|
|
56
|
-
---------------------
|
|
47
|
+
## Copyright and License
|
|
57
48
|
|
|
58
49
|
Copyright (c) 2025-2026 Geoffrey R. Scheller. Licensed under the Apache
|
|
59
50
|
License, Version 2.0. See the LICENSE file for details.
|
|
@@ -1,35 +1,27 @@
|
|
|
1
|
-
Pythonic FP - Gadgets
|
|
2
|
-
=====================
|
|
3
|
-
|
|
4
|
-
PyPI project
|
|
5
|
-
`pythonic-fp-gadgets
|
|
6
|
-
<https://pypi.org/project/pythonic-fp-gadgets>`_.
|
|
1
|
+
# Pythonic FP - Gadgets
|
|
7
2
|
|
|
8
3
|
Library of simple, but useful, classes and functions with no dependencies
|
|
9
4
|
outside the Python Standard Library.
|
|
10
5
|
|
|
11
|
-
|
|
6
|
+
PyPI project
|
|
7
|
+
[pythonic-fp-gadgets](https://pypi.org/project/pythonic-fp-gadgets).
|
|
8
|
+
Part of the
|
|
9
|
+
[pythonic-fp](https://grscheller.github.io/pythonic-fp/)
|
|
10
|
+
PyPI projects.
|
|
11
|
+
|
|
12
|
+
## Documentation
|
|
13
|
+
|
|
14
|
+
Documentation and other links for this project are hosted on
|
|
15
|
+
[GitHub Pages](https://grscheller.github.io/pythonic-fp/projects/gadgets.html).
|
|
12
16
|
|
|
17
|
+
- Gadgets
|
|
13
18
|
- single item box
|
|
14
19
|
- immutable wrapped (hashable) references
|
|
15
20
|
- function returning iterator of its arguments
|
|
16
21
|
- function to find the latest common ancestor of two classes
|
|
17
22
|
- sentinel values
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
`pythonic-fp
|
|
21
|
-
<https://grscheller.github.io/pythonic-fp/>`_
|
|
22
|
-
PyPI projects.
|
|
23
|
-
|
|
24
|
-
Documentation
|
|
25
|
-
-------------
|
|
26
|
-
|
|
27
|
-
Documentation and other links for this project are hosted on
|
|
28
|
-
`GitHub Pages
|
|
29
|
-
<https://grscheller.github.io/pythonic-fp/projects/gadgets.html>`_.
|
|
30
|
-
|
|
31
|
-
Copyright and License
|
|
32
|
-
---------------------
|
|
24
|
+
## Copyright and License
|
|
33
25
|
|
|
34
26
|
Copyright (c) 2025-2026 Geoffrey R. Scheller. Licensed under the Apache
|
|
35
27
|
License, Version 2.0. See the LICENSE file for details.
|
|
@@ -4,9 +4,10 @@ build-backend = "flit_core.buildapi"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pythonic-fp-gadgets"
|
|
7
|
-
version = "4.
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
version = "4.2.0"
|
|
8
|
+
description = "Gadgets without external Pythonic FP dependencies."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.13" # syntactic floor: known to SyntaxError below this
|
|
10
11
|
authors = [
|
|
11
12
|
{ name = "Geoffrey R. Scheller", email = "geoffrey@scheller.com" },
|
|
12
13
|
]
|
|
@@ -19,27 +20,43 @@ classifiers = [
|
|
|
19
20
|
"Intended Audience :: Developers",
|
|
20
21
|
"License :: OSI Approved :: Apache Software License",
|
|
21
22
|
"Operating System :: OS Independent",
|
|
22
|
-
"Programming Language :: Python :: 3.14",
|
|
23
|
+
"Programming Language :: Python :: 3.14", # tested: pytest test suite successful
|
|
23
24
|
"Typing :: Typed",
|
|
24
25
|
]
|
|
25
26
|
dependencies = []
|
|
26
|
-
dynamic = ["description"]
|
|
27
27
|
|
|
28
28
|
[project.urls]
|
|
29
|
-
Changelog = "https://github.com/grscheller/pythonic-fp-gadgets/blob/main/CHANGELOG.
|
|
30
|
-
Documentation =
|
|
29
|
+
Changelog = "https://github.com/grscheller/pythonic-fp-gadgets/blob/main/CHANGELOG.md"
|
|
30
|
+
Documentation ="https://grscheller.github.io/pythonic-fp-gadgets/release/html/"
|
|
31
31
|
Homepage = "https://grscheller.github.io/pythonic-fp/"
|
|
32
32
|
Source = "https://github.com/grscheller/pythonic-fp-gadgets"
|
|
33
33
|
|
|
34
|
-
[
|
|
34
|
+
[dependency-groups]
|
|
35
|
+
docs = [
|
|
36
|
+
"furo>=2025.12.19",
|
|
37
|
+
"sphinx>=9.1",
|
|
38
|
+
]
|
|
39
|
+
pub = [
|
|
40
|
+
"flit",
|
|
41
|
+
]
|
|
35
42
|
test = [
|
|
36
43
|
"pytest>=8.4.1",
|
|
37
|
-
"pythonic-fp-circulararray>=6.0.4",
|
|
38
44
|
]
|
|
39
45
|
|
|
40
46
|
[tool.flit.module]
|
|
41
47
|
name = "pythonic_fp.gadgets"
|
|
42
48
|
|
|
49
|
+
[tool.flit.sdist]
|
|
50
|
+
exclude = [
|
|
51
|
+
"docs/",
|
|
52
|
+
"tests/",
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
[tool.pytest]
|
|
56
|
+
addopts = ["-ra"]
|
|
57
|
+
consider_namespace_packages = true
|
|
58
|
+
testpaths = ["tests/"]
|
|
59
|
+
|
|
43
60
|
[tool.mypy]
|
|
44
61
|
explicit_package_bases = true
|
|
45
62
|
local_partial_types = true
|
|
@@ -48,23 +65,12 @@ warn_redundant_casts = true
|
|
|
48
65
|
warn_return_any = true
|
|
49
66
|
warn_unused_configs = true
|
|
50
67
|
|
|
51
|
-
[tool.pylsp-mypy]
|
|
52
|
-
enabled = true
|
|
53
|
-
live-mode = true
|
|
54
|
-
dmypy = false
|
|
55
|
-
strict = true
|
|
56
|
-
report_progress = true
|
|
57
|
-
|
|
58
|
-
[tool.pytest]
|
|
59
|
-
addopts = [
|
|
60
|
-
"-ra",
|
|
61
|
-
]
|
|
62
|
-
consider_namespace_packages = true
|
|
63
|
-
testpaths = ["tests/"]
|
|
64
|
-
|
|
65
68
|
[tool.ruff]
|
|
66
69
|
target-version = "py314"
|
|
67
70
|
|
|
71
|
+
[tool.ruff.lint]
|
|
72
|
+
ignore = ["RUF022", "E741"]
|
|
73
|
+
|
|
68
74
|
[tool.ruff.lint.flake8-quotes]
|
|
69
75
|
docstring-quotes = "double"
|
|
70
76
|
|
|
@@ -73,7 +79,6 @@ docstring-quotes = "double"
|
|
|
73
79
|
"E731",
|
|
74
80
|
"C901",
|
|
75
81
|
]
|
|
76
|
-
"**/*.py" = ["E741"]
|
|
77
82
|
|
|
78
83
|
[tool.ruff.format]
|
|
79
84
|
quote-style = "single"
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
name: Build and Deploy Furo Themed Sphinx Documentation
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: ["main"]
|
|
6
|
-
workflow_dispatch:
|
|
7
|
-
|
|
8
|
-
env:
|
|
9
|
-
RELEASE: '4.1.0'
|
|
10
|
-
DEVEL: '4.1.1'
|
|
11
|
-
PYTHON: '3.14'
|
|
12
|
-
|
|
13
|
-
permissions:
|
|
14
|
-
contents: read
|
|
15
|
-
pages: write
|
|
16
|
-
id-token: write
|
|
17
|
-
|
|
18
|
-
concurrency:
|
|
19
|
-
group: "pages"
|
|
20
|
-
cancel-in-progress: false
|
|
21
|
-
|
|
22
|
-
jobs:
|
|
23
|
-
deploy:
|
|
24
|
-
runs-on: ubuntu-latest
|
|
25
|
-
environment:
|
|
26
|
-
name: github-pages
|
|
27
|
-
url: ${{ steps.deployment.outputs.page_url }}
|
|
28
|
-
steps:
|
|
29
|
-
- name: Checkout
|
|
30
|
-
uses: actions/checkout@v6
|
|
31
|
-
|
|
32
|
-
- name: Select Python
|
|
33
|
-
uses: actions/setup-python@v6
|
|
34
|
-
with:
|
|
35
|
-
python-version: ${{ env.PYTHON }}
|
|
36
|
-
|
|
37
|
-
- name: Install Sphinx Dependencies
|
|
38
|
-
run: |
|
|
39
|
-
pip install -r docs/requirements.txt
|
|
40
|
-
sudo apt-get install -y graphviz
|
|
41
|
-
|
|
42
|
-
- name: Build Release Docs
|
|
43
|
-
run: |
|
|
44
|
-
pip install pythonic-fp-gadgets
|
|
45
|
-
docs/gen_conf.py release ${{ env.RELEASE }} Gadgets gadgets > docs/source/conf.py
|
|
46
|
-
sphinx-build -M html docs/source docs/build/release
|
|
47
|
-
|
|
48
|
-
- name: Build Development Docs
|
|
49
|
-
run: |
|
|
50
|
-
pip install -e .
|
|
51
|
-
docs/gen_conf.py devel ${{ env.DEVEL }} Gadgets gadgets > docs/source/conf.py
|
|
52
|
-
sphinx-build -M html docs/source docs/build/development
|
|
53
|
-
|
|
54
|
-
- name: Setup Pages
|
|
55
|
-
uses: actions/configure-pages@v6
|
|
56
|
-
|
|
57
|
-
- name: Upload Artifact
|
|
58
|
-
uses: actions/upload-pages-artifact@v5
|
|
59
|
-
with:
|
|
60
|
-
path: docs/build
|
|
61
|
-
|
|
62
|
-
- name: Deploy to GitHub Pages
|
|
63
|
-
uses: actions/deploy-pages@v5
|
|
64
|
-
id: deployment
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
CHANGELOG
|
|
2
|
-
=========
|
|
3
|
-
|
|
4
|
-
PyPI pythonic-fp-gadgets project.
|
|
5
|
-
|
|
6
|
-
Semantic Versioning
|
|
7
|
-
-------------------
|
|
8
|
-
|
|
9
|
-
Strict 3 digit semantic versioning
|
|
10
|
-
|
|
11
|
-
- **MAJOR** version incremented for incompatible API changes
|
|
12
|
-
- **MINOR** version incremented for backward compatible added functionality
|
|
13
|
-
- **PATCH** version incremented for backward compatible bug fixes
|
|
14
|
-
|
|
15
|
-
See `Semantic Versioning 2.0.0 <https://semver.org>`_.
|
|
16
|
-
|
|
17
|
-
Releases and Important Milestones
|
|
18
|
-
---------------------------------
|
|
19
|
-
|
|
20
|
-
PyPI 4.1.0 - 2026-05-12
|
|
21
|
-
~~~~~~~~~~~~~~~~~~~~~~~
|
|
22
|
-
|
|
23
|
-
- documentation now in maintenance mode
|
|
24
|
-
- development status now "4 - Beta"
|
|
25
|
-
- added a few missing methods
|
|
26
|
-
|
|
27
|
-
PyPI 4.0.4 - 2026-04-26
|
|
28
|
-
~~~~~~~~~~~~~~~~~~~~~~~
|
|
29
|
-
|
|
30
|
-
Much docstring work for sentinels. Need to push now to fix
|
|
31
|
-
broken links on PyPI before going into documentation maintenance.
|
|
32
|
-
|
|
33
|
-
Development Status Reappraisal - 2026-05-05
|
|
34
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
35
|
-
|
|
36
|
-
Maintainer appraised the Development Status for
|
|
37
|
-
pythonic-fp-gadgets to be "3 - Alpha".
|
|
38
|
-
|
|
39
|
-
PyPI 4.0.3 - 2026-04-26
|
|
40
|
-
~~~~~~~~~~~~~~~~~~~~~~~
|
|
41
|
-
|
|
42
|
-
Redoing docs based on circulararray and booleans.
|
|
43
|
-
|
|
44
|
-
- made some innovations which I will back port to the above two.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
PyPI 4.0.2 - 2026-01-08
|
|
48
|
-
~~~~~~~~~~~~~~~~~~~~~~~
|
|
49
|
-
|
|
50
|
-
Docstring improvements based on lessons learned from my PyPI
|
|
51
|
-
boring-math-abstract-algebra project.
|
|
52
|
-
|
|
53
|
-
PyPI v4.0.1 - 2025-12-02
|
|
54
|
-
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
55
|
-
|
|
56
|
-
Move functions out of their own packages to __init__.py (2025-10-13).
|
|
57
|
-
|
|
58
|
-
- latest_common_ancestor.lca -> first_common_ancestor
|
|
59
|
-
- iterate_arguments.ita -> iterate_over_arguments
|
|
60
|
-
|
|
61
|
-
Unfortunately I forgot to push these changes to PyPI for a
|
|
62
|
-
month and a half!
|
|
63
|
-
|
|
64
|
-
PyPI v3.0.1 - 2025-09-09
|
|
65
|
-
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
66
|
-
|
|
67
|
-
Corrected incorrect dependencies.
|
|
68
|
-
|
|
69
|
-
PyPI v3.0.0 - 2025-08-31
|
|
70
|
-
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
71
|
-
|
|
72
|
-
Discovered I was not quite compliant with
|
|
73
|
-
Python typing 3.12+ conventions.
|
|
74
|
-
|
|
75
|
-
- No longer explicitly using TypeVar directly.
|
|
76
|
-
|
|
77
|
-
- Removed Unions with Never from .py files
|
|
78
|
-
|
|
79
|
-
- the "happy path" returns just types (pythonic convention)
|
|
80
|
-
- stubgen actually puts them back in .pyi files
|
|
81
|
-
|
|
82
|
-
- renamed it.it -> iterate_arguments.ita
|
|
83
|
-
- renamed lca.latest_common_ancestor -> latest_common_ancestor.lca
|
|
84
|
-
|
|
85
|
-
PyPI v2.2.0 - 2025-08-30
|
|
86
|
-
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
87
|
-
|
|
88
|
-
Moved for pythonic_fp.gadgets package to a new GitHub repo,
|
|
89
|
-
pythonic-fp-gadgets. Replaced it with the empty Python
|
|
90
|
-
module pythonic_fp.name_claim in pythonic-fp.
|
|
91
|
-
|
|
92
|
-
The gadgets package being different from the other namespace
|
|
93
|
-
packages was throwing off my workflow.
|
|
94
|
-
|
|
95
|
-
- added function it.it
|
|
96
|
-
- added function lca.latest_common_ancestor
|
|
97
|
-
|
|
98
|
-
Update - 2025-08-09
|
|
99
|
-
~~~~~~~~~~~~~~~~~~~
|
|
100
|
-
|
|
101
|
-
Preparing for upcoming PyPI release for gadgets.
|
|
102
|
-
|
|
103
|
-
- decided to make gadget's pyproject.toml the exemplar for rest of pythonic-fp namespace
|
|
104
|
-
- pythonic_fp.gadget works with previous and next release of singletons
|
|
105
|
-
|
|
106
|
-
PyPI v1.1.0 - 2025-08-02
|
|
107
|
-
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
108
|
-
|
|
109
|
-
Released pythonic-fp v1.1.0 which contains pythonic_fp.gadgets package.
|
|
110
|
-
|
|
111
|
-
Update - 2025-08-01
|
|
112
|
-
~~~~~~~~~~~~~~~~~~~
|
|
113
|
-
|
|
114
|
-
Added package pythonic_fp.gadgets to the "name-claim" PyPI
|
|
115
|
-
project pythonic-fp. The gadgets library is for simple,
|
|
116
|
-
but useful, functions and data structures with minimal
|
|
117
|
-
dependencies.
|
|
@@ -1,78 +0,0 @@
|
|
|
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.1.0
|
|
9
|
-
DEVEL_VERSION = 4.1.1
|
|
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
|
|
@@ -1,110 +0,0 @@
|
|
|
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
|
-
''')
|
|
File without changes
|
|
File without changes
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
Gadgets
|
|
2
|
-
=======
|
|
3
|
-
|
|
4
|
-
.. automodule:: pythonic_fp.gadgets
|
|
5
|
-
:no-members:
|
|
6
|
-
:ignore-module-all:
|
|
7
|
-
:no-index:
|
|
8
|
-
|
|
9
|
-
.. toctree::
|
|
10
|
-
:caption: functions
|
|
11
|
-
:maxdepth: 1
|
|
12
|
-
|
|
13
|
-
functions/index
|
|
14
|
-
|
|
15
|
-
.. toctree::
|
|
16
|
-
:caption: module box
|
|
17
|
-
:maxdepth: 1
|
|
18
|
-
|
|
19
|
-
box
|
|
20
|
-
|
|
21
|
-
.. toctree::
|
|
22
|
-
:caption: module wrap
|
|
23
|
-
:maxdepth: 1
|
|
24
|
-
|
|
25
|
-
wrap
|
|
26
|
-
|
|
27
|
-
.. toctree::
|
|
28
|
-
:caption: module sentinels
|
|
29
|
-
:maxdepth: 1
|
|
30
|
-
|
|
31
|
-
sentinels/index
|