frigid 4.1__tar.gz → 4.2__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.
- {frigid-4.1 → frigid-4.2}/.gitignore +5 -0
- {frigid-4.1 → frigid-4.2}/PKG-INFO +31 -2
- {frigid-4.1 → frigid-4.2}/README.rst +30 -1
- {frigid-4.1 → frigid-4.2}/pyproject.toml +53 -13
- {frigid-4.1 → frigid-4.2}/sources/frigid/__/__init__.py +0 -8
- {frigid-4.1 → frigid-4.2}/sources/frigid/__/imports.py +1 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/__/nomina.py +1 -1
- {frigid-4.1 → frigid-4.2}/sources/frigid/__init__.py +1 -1
- {frigid-4.1 → frigid-4.2}/sources/frigid/classes.py +22 -7
- {frigid-4.1 → frigid-4.2}/sources/frigid/dictionaries.py +1 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/exceptions.py +2 -2
- {frigid-4.1 → frigid-4.2}/sources/frigid/modules.py +1 -0
- {frigid-4.1 → frigid-4.2}/LICENSE.txt +0 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/__/dictionaries.py +0 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/__/doctab.py +0 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/__/exceptions.py +0 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/_typedecls/__builtins__.pyi +0 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/installers.py +0 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/namespaces.py +0 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/py.typed +0 -0
- {frigid-4.1 → frigid-4.2}/sources/frigid/sequences.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frigid
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.2
|
|
4
4
|
Summary: Immutable data structures.
|
|
5
5
|
Project-URL: Homepage, https://github.com/emcd/python-frigid
|
|
6
6
|
Project-URL: Documentation, https://emcd.github.io/python-frigid
|
|
@@ -106,6 +106,18 @@ Key Features ⭐
|
|
|
106
106
|
Installation 📦
|
|
107
107
|
===============================================================================
|
|
108
108
|
|
|
109
|
+
Method: Install Python Package
|
|
110
|
+
-------------------------------------------------------------------------------
|
|
111
|
+
|
|
112
|
+
Install via `uv <https://github.com/astral-sh/uv/blob/main/README.md>`_ ``pip``
|
|
113
|
+
command:
|
|
114
|
+
|
|
115
|
+
::
|
|
116
|
+
|
|
117
|
+
uv pip install frigid
|
|
118
|
+
|
|
119
|
+
Or, install via ``pip``:
|
|
120
|
+
|
|
109
121
|
::
|
|
110
122
|
|
|
111
123
|
pip install frigid
|
|
@@ -204,7 +216,24 @@ Use Cases 🎯
|
|
|
204
216
|
complete immutability guarantees.
|
|
205
217
|
|
|
206
218
|
|
|
207
|
-
|
|
219
|
+
Contribution 🤝
|
|
220
|
+
===============================================================================
|
|
221
|
+
|
|
222
|
+
Contribution to this project is welcome! However, it must follow the `code of
|
|
223
|
+
conduct
|
|
224
|
+
<https://emcd.github.io/python-project-common/stable/sphinx-html/common/conduct.html>`_
|
|
225
|
+
for the project.
|
|
226
|
+
|
|
227
|
+
Please file bug reports and feature requests in the `issue tracker
|
|
228
|
+
<https://github.com/emcd/python-frigid/issues>`_ or submit `pull
|
|
229
|
+
requests <https://github.com/emcd/python-frigid/pulls>`_ to
|
|
230
|
+
improve the source code or documentation.
|
|
231
|
+
|
|
232
|
+
For development guidance and standards, please see the `development guide
|
|
233
|
+
<https://emcd.github.io/python-frigid/stable/sphinx-html/contribution.html#development>`_.
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
Additional Indicia
|
|
208
237
|
===============================================================================
|
|
209
238
|
|
|
210
239
|
.. image:: https://img.shields.io/github/last-commit/emcd/python-frigid
|
|
@@ -75,6 +75,18 @@ Key Features ⭐
|
|
|
75
75
|
Installation 📦
|
|
76
76
|
===============================================================================
|
|
77
77
|
|
|
78
|
+
Method: Install Python Package
|
|
79
|
+
-------------------------------------------------------------------------------
|
|
80
|
+
|
|
81
|
+
Install via `uv <https://github.com/astral-sh/uv/blob/main/README.md>`_ ``pip``
|
|
82
|
+
command:
|
|
83
|
+
|
|
84
|
+
::
|
|
85
|
+
|
|
86
|
+
uv pip install frigid
|
|
87
|
+
|
|
88
|
+
Or, install via ``pip``:
|
|
89
|
+
|
|
78
90
|
::
|
|
79
91
|
|
|
80
92
|
pip install frigid
|
|
@@ -173,7 +185,24 @@ Use Cases 🎯
|
|
|
173
185
|
complete immutability guarantees.
|
|
174
186
|
|
|
175
187
|
|
|
176
|
-
|
|
188
|
+
Contribution 🤝
|
|
189
|
+
===============================================================================
|
|
190
|
+
|
|
191
|
+
Contribution to this project is welcome! However, it must follow the `code of
|
|
192
|
+
conduct
|
|
193
|
+
<https://emcd.github.io/python-project-common/stable/sphinx-html/common/conduct.html>`_
|
|
194
|
+
for the project.
|
|
195
|
+
|
|
196
|
+
Please file bug reports and feature requests in the `issue tracker
|
|
197
|
+
<https://github.com/emcd/python-frigid/issues>`_ or submit `pull
|
|
198
|
+
requests <https://github.com/emcd/python-frigid/pulls>`_ to
|
|
199
|
+
improve the source code or documentation.
|
|
200
|
+
|
|
201
|
+
For development guidance and standards, please see the `development guide
|
|
202
|
+
<https://emcd.github.io/python-frigid/stable/sphinx-html/contribution.html#development>`_.
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
Additional Indicia
|
|
177
206
|
===============================================================================
|
|
178
207
|
|
|
179
208
|
.. image:: https://img.shields.io/github/last-commit/emcd/python-frigid
|
|
@@ -61,7 +61,7 @@ gha-runners = [
|
|
|
61
61
|
]
|
|
62
62
|
[tool.coverage.run]
|
|
63
63
|
branch = true
|
|
64
|
-
command_line = '-m pytest'
|
|
64
|
+
command_line = '-m pytest'
|
|
65
65
|
data_file = '.auxiliary/caches/pytest/coverage.sqlite3'
|
|
66
66
|
parallel = true
|
|
67
67
|
source = [ 'sources' ]
|
|
@@ -99,6 +99,7 @@ dependencies = [
|
|
|
99
99
|
'Jinja2',
|
|
100
100
|
'coverage[toml]',
|
|
101
101
|
'furo',
|
|
102
|
+
'isort',
|
|
102
103
|
'packaging',
|
|
103
104
|
'pre-commit',
|
|
104
105
|
'pyright',
|
|
@@ -108,6 +109,7 @@ dependencies = [
|
|
|
108
109
|
'sphinx-copybutton',
|
|
109
110
|
'sphinx-inline-tabs',
|
|
110
111
|
'towncrier',
|
|
112
|
+
'vulture',
|
|
111
113
|
# --- BEGIN: Injected by Copier ---
|
|
112
114
|
# --- END: Injected by Copier ---
|
|
113
115
|
]
|
|
@@ -121,15 +123,17 @@ PYTHONUNBUFFERED = 'TRUE' # TODO: Only for coverage/pytest.
|
|
|
121
123
|
# --- END: Injected by Copier ---
|
|
122
124
|
[tool.hatch.envs.develop.scripts]
|
|
123
125
|
docsgen = [
|
|
124
|
-
"""sphinx-build -E -b linkcheck -d .auxiliary/caches/sphinx \
|
|
125
|
-
|
|
126
|
-
"""sphinx-build -a -d .auxiliary/caches/sphinx \
|
|
127
|
-
|
|
126
|
+
"""sphinx-build -E -b linkcheck -d .auxiliary/caches/sphinx --quiet \
|
|
127
|
+
documentation .auxiliary/artifacts/sphinx-linkcheck""",
|
|
128
|
+
"""sphinx-build -a -d .auxiliary/caches/sphinx --quiet \
|
|
129
|
+
documentation .auxiliary/artifacts/sphinx-html""",
|
|
128
130
|
]
|
|
129
131
|
linters = [
|
|
130
132
|
"""ruff check --quiet sources documentation tests""",
|
|
131
133
|
# --- BEGIN: Injected by Copier ---
|
|
132
134
|
# --- END: Injected by Copier ---
|
|
135
|
+
"""isort --check-only --diff sources tests""",
|
|
136
|
+
"""vulture""",
|
|
133
137
|
"""pyright sources""",
|
|
134
138
|
]
|
|
135
139
|
packagers = [
|
|
@@ -137,14 +141,19 @@ packagers = [
|
|
|
137
141
|
# --- BEGIN: Injected by Copier ---
|
|
138
142
|
# --- END: Injected by Copier ---
|
|
139
143
|
]
|
|
144
|
+
testers-documentation = [
|
|
145
|
+
"""coverage run -m sphinx.cmd.build \
|
|
146
|
+
-E -b doctest -d .auxiliary/caches/sphinx --quiet \
|
|
147
|
+
documentation .auxiliary/artifacts/sphinx-doctest""",
|
|
148
|
+
]
|
|
149
|
+
testers-serotine = [ """coverage run -m pytest -m slow""" ]
|
|
140
150
|
testers-no-reports = [
|
|
141
|
-
'coverage erase',
|
|
142
151
|
'coverage run',
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
documentation .auxiliary/artifacts/sphinx-doctest""",
|
|
152
|
+
'testers-documentation',
|
|
153
|
+
'testers-serotine',
|
|
146
154
|
]
|
|
147
155
|
testers = [
|
|
156
|
+
'coverage erase',
|
|
148
157
|
'testers-no-reports',
|
|
149
158
|
'coverage combine',
|
|
150
159
|
'coverage report --skip-covered',
|
|
@@ -171,6 +180,25 @@ python = [
|
|
|
171
180
|
[tool.hatch.version]
|
|
172
181
|
path = 'sources/frigid/__init__.py'
|
|
173
182
|
|
|
183
|
+
# https://pycqa.github.io/isort/docs/configuration/config_files.html
|
|
184
|
+
[tool.isort]
|
|
185
|
+
# profile = 'black'
|
|
186
|
+
src_paths = [ 'sources', 'tests' ]
|
|
187
|
+
case_sensitive = true
|
|
188
|
+
# ensure_newline_before_comments = true
|
|
189
|
+
# force_sort_within_sections = true
|
|
190
|
+
ignore_whitespace = true
|
|
191
|
+
include_trailing_comma = true
|
|
192
|
+
known_first_party = [ 'frigid' ]
|
|
193
|
+
lines_between_types = 1
|
|
194
|
+
line_length = 79
|
|
195
|
+
multi_line_output = 3
|
|
196
|
+
quiet = true
|
|
197
|
+
# skip_gitignore = true
|
|
198
|
+
skip_glob = [ '*/__/imports.py', '*/__init__.py' ]
|
|
199
|
+
split_on_trailing_comma = true
|
|
200
|
+
use_parentheses = true
|
|
201
|
+
|
|
174
202
|
# https://mypy.readthedocs.io/en/stable/config_file.html
|
|
175
203
|
[tool.mypy]
|
|
176
204
|
# Note: Due to repeated painful experiences with Mypy, we use Pyright instead.
|
|
@@ -184,8 +212,8 @@ strict = false
|
|
|
184
212
|
|
|
185
213
|
# https://microsoft.github.io/pyright/#/configuration
|
|
186
214
|
[tool.pyright]
|
|
187
|
-
ignore = [ 'documentation', 'tests' ] #
|
|
188
|
-
include = [ 'sources' ]
|
|
215
|
+
ignore = [ '.auxiliary', 'documentation', 'tests' ] # Ignore diagnostics.
|
|
216
|
+
include = [ 'sources', 'tests' ] # Consider for operations.
|
|
189
217
|
reportConstantRedefinition = true
|
|
190
218
|
reportInvalidTypeVarUse = true
|
|
191
219
|
reportMatchNotExhaustive = true
|
|
@@ -217,16 +245,19 @@ stubPath = 'sources/frigid/_typedecls'
|
|
|
217
245
|
# Note: Cannot run doctests from Pytest, because Pytest tries to update '_'
|
|
218
246
|
# attribute on protected modules. Instead, we use Sphinx to run doctests.
|
|
219
247
|
minversion = '8.1'
|
|
220
|
-
addopts =
|
|
248
|
+
addopts = """--capture=no --exitfirst --quiet -rfE -m 'not slow'""" # TODO? '--fail-under'
|
|
221
249
|
testpaths = [ 'tests' ]
|
|
222
250
|
python_files = [ 'test_*.py' ]
|
|
223
251
|
python_functions = [ 'test_[0-9][0-9][0-9]_*' ]
|
|
224
252
|
cache_dir = '.auxiliary/caches/pytest'
|
|
225
|
-
|
|
253
|
+
markers = [
|
|
254
|
+
"slow: long-running tests",
|
|
255
|
+
]
|
|
226
256
|
|
|
227
257
|
[tool.ruff]
|
|
228
258
|
#builtins = [ 'ic' ]
|
|
229
259
|
cache-dir = '.auxiliary/caches/ruff'
|
|
260
|
+
extend-exclude = [ 'vulturefood.py' ]
|
|
230
261
|
indent-width = 4
|
|
231
262
|
line-length = 79
|
|
232
263
|
[tool.ruff.lint]
|
|
@@ -316,3 +347,12 @@ showcontent = true
|
|
|
316
347
|
directory = 'repair'
|
|
317
348
|
name = 'Repairs'
|
|
318
349
|
showcontent = true
|
|
350
|
+
|
|
351
|
+
[tool.vulture]
|
|
352
|
+
paths = [ '.auxiliary/configuration/vulturefood.py', 'sources' ]
|
|
353
|
+
min_confidence = 60
|
|
354
|
+
exclude = [
|
|
355
|
+
'*/imports.py',
|
|
356
|
+
]
|
|
357
|
+
ignore_decorators = [ '@__.abc.abstractmethod', '@__.typx.overload' ]
|
|
358
|
+
ignore_names = [ 'main' ]
|
|
@@ -25,11 +25,3 @@ from .dictionaries import *
|
|
|
25
25
|
from .doctab import *
|
|
26
26
|
from .imports import *
|
|
27
27
|
from .nomina import *
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
dynadoc_introspection_limiter = (
|
|
31
|
-
ccstd.dynadoc.produce_dynadoc_introspection_limiter(
|
|
32
|
-
attributes_namer = calculate_attrname ) )
|
|
33
|
-
dynadoc_introspection_control_on_class = (
|
|
34
|
-
ccstd.dynadoc.produce_dynadoc_introspection_control(
|
|
35
|
-
limiters = ( dynadoc_introspection_limiter, ) ) )
|
|
@@ -26,6 +26,12 @@
|
|
|
26
26
|
from . import __
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
abc_class_mutables = (
|
|
30
|
+
'_abc_cache',
|
|
31
|
+
'_abc_negative_cache',
|
|
32
|
+
'_abc_negative_cache_version',
|
|
33
|
+
'_abc_registry',
|
|
34
|
+
)
|
|
29
35
|
is_public_identifier = __.is_public_identifier
|
|
30
36
|
mutables_default = ( )
|
|
31
37
|
visibles_default = ( is_public_identifier, )
|
|
@@ -44,9 +50,7 @@ def _provide_error_class( name: str ) -> type[ Exception ]:
|
|
|
44
50
|
|
|
45
51
|
_dataclass_core = __.dcls.dataclass( kw_only = True, slots = True )
|
|
46
52
|
_dynadoc_configuration = (
|
|
47
|
-
__.ccstd.dynadoc.produce_dynadoc_configuration(
|
|
48
|
-
introspection = __.dynadoc_introspection_control_on_class,
|
|
49
|
-
table = __.fragments ) )
|
|
53
|
+
__.ccstd.dynadoc.produce_dynadoc_configuration( table = __.fragments ) )
|
|
50
54
|
_class_factory = __.funct.partial(
|
|
51
55
|
__.ccstd.class_factory,
|
|
52
56
|
attributes_namer = __.calculate_attrname,
|
|
@@ -232,7 +236,11 @@ class DataclassObjectMutable( metaclass = DataclassMutable ):
|
|
|
232
236
|
'class instance conceal' )
|
|
233
237
|
|
|
234
238
|
|
|
235
|
-
class Protocol(
|
|
239
|
+
class Protocol(
|
|
240
|
+
__.typx.Protocol,
|
|
241
|
+
metaclass = ProtocolClass,
|
|
242
|
+
class_mutables = abc_class_mutables,
|
|
243
|
+
):
|
|
236
244
|
''' Standard base protocol class. '''
|
|
237
245
|
|
|
238
246
|
_dynadoc_fragments_ = (
|
|
@@ -242,7 +250,10 @@ class Protocol( __.typx.Protocol, metaclass = ProtocolClass ):
|
|
|
242
250
|
|
|
243
251
|
|
|
244
252
|
class ProtocolMutable(
|
|
245
|
-
__.typx.Protocol,
|
|
253
|
+
__.typx.Protocol,
|
|
254
|
+
metaclass = ProtocolClass,
|
|
255
|
+
class_mutables = abc_class_mutables,
|
|
256
|
+
instances_mutables = '*',
|
|
246
257
|
):
|
|
247
258
|
''' Base protocol class with mutable instance attributes. '''
|
|
248
259
|
|
|
@@ -253,7 +264,9 @@ class ProtocolMutable(
|
|
|
253
264
|
|
|
254
265
|
|
|
255
266
|
class DataclassProtocol(
|
|
256
|
-
__.typx.Protocol,
|
|
267
|
+
__.typx.Protocol,
|
|
268
|
+
metaclass = ProtocolDataclass,
|
|
269
|
+
class_mutables = abc_class_mutables,
|
|
257
270
|
):
|
|
258
271
|
''' Standard base protocol dataclass. '''
|
|
259
272
|
|
|
@@ -264,7 +277,9 @@ class DataclassProtocol(
|
|
|
264
277
|
|
|
265
278
|
|
|
266
279
|
class DataclassProtocolMutable(
|
|
267
|
-
__.typx.Protocol,
|
|
280
|
+
__.typx.Protocol,
|
|
281
|
+
metaclass = ProtocolDataclassMutable,
|
|
282
|
+
class_mutables = abc_class_mutables,
|
|
268
283
|
):
|
|
269
284
|
''' Base protocol dataclass with mutable instance attributes. '''
|
|
270
285
|
|
|
@@ -162,6 +162,7 @@ class _DictionaryOperations( AbstractDictionary[ __.H, __.V ] ):
|
|
|
162
162
|
class Dictionary( # noqa: PLW1641
|
|
163
163
|
_DictionaryOperations[ __.H, __.V ],
|
|
164
164
|
metaclass = _classes.AbstractBaseClass,
|
|
165
|
+
class_mutables = _classes.abc_class_mutables,
|
|
165
166
|
):
|
|
166
167
|
''' Immutable dictionary. '''
|
|
167
168
|
|
|
@@ -32,8 +32,8 @@ from . import classes as _classes
|
|
|
32
32
|
|
|
33
33
|
class Omniexception(
|
|
34
34
|
_classes.Object, BaseException,
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
instances_mutables = __.ccexc.exception_mutables_default,
|
|
36
|
+
instances_visibles = __.ccexc.exception_visibles_default,
|
|
37
37
|
):
|
|
38
38
|
''' Base exceptions for package. '''
|
|
39
39
|
|
|
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
|