ducktools-classbuilder 0.6.2__tar.gz → 0.6.3__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.
Potentially problematic release.
This version of ducktools-classbuilder might be problematic. Click here for more details.
- {ducktools_classbuilder-0.6.2/src/ducktools_classbuilder.egg-info → ducktools_classbuilder-0.6.3}/PKG-INFO +1 -1
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/__init__.py +1 -1
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/prefab.py +11 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/prefab.pyi +1 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3/src/ducktools_classbuilder.egg-info}/PKG-INFO +1 -1
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools_classbuilder.egg-info/SOURCES.txt +1 -0
- ducktools_classbuilder-0.6.3/tests/prefab/dynamic/test_private.py +24 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/LICENSE.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/MANIFEST.in +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/README.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/Makefile +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/api.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/approach_vs_tool.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/conf.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/extension_examples.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/generated_code.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/index.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/make.bat +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/perf/performance_tests.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/prefab/index.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/tutorial.md +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/pyproject.toml +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/setup.cfg +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/__init__.pyi +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/annotations.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/annotations.pyi +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/py.typed +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools_classbuilder.egg-info/dependency_links.txt +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools_classbuilder.egg-info/requires.txt +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools_classbuilder.egg-info/top_level.txt +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/annotations/test_annotated.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/annotations/test_annotations_module.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/conftest.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/dynamic/test_compare_attrib.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/dynamic/test_construction.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/dynamic/test_internals.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/dynamic/test_pre_post_init.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/dynamic/test_slots_novalues.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/dynamic/test_slotted_class.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/dynamic/test_subclass_implementation.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/conftest.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/creation.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/creation_empty.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/dunders.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/fails/creation_1.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/fails/creation_2.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/fails/creation_3.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/fails/creation_5.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/fails/inheritance_1.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/fails/inheritance_2.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/frozen_prefabs.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/funcs_prefabs.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/hint_syntax.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/inheritance.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/init_ex.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/kw_only.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/examples/repr_func.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_creation.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_dunders.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_frozen.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_funcs.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_hint_syntax.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_inheritance.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_init.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_kw_only.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_repr.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/py312_tests/test_generic_annotations.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/test_core.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/test_field_flags.py +0 -0
- {ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/test_slotmakermeta.py +0 -0
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/prefab.py
RENAMED
|
@@ -294,6 +294,7 @@ def attribute(
|
|
|
294
294
|
kw_only=False,
|
|
295
295
|
serialize=True,
|
|
296
296
|
exclude_field=False,
|
|
297
|
+
private=False,
|
|
297
298
|
doc=None,
|
|
298
299
|
type=NOTHING,
|
|
299
300
|
):
|
|
@@ -310,6 +311,7 @@ def attribute(
|
|
|
310
311
|
:param kw_only: Make this argument keyword only in init
|
|
311
312
|
:param serialize: Include this attribute in methods that serialize to dict
|
|
312
313
|
:param exclude_field: Shorthand for setting repr, compare, iter and serialize to False
|
|
314
|
+
:param private: Short for init, repr, compare, iter, serialize = False, must have default or factory
|
|
313
315
|
:param doc: Parameter documentation for slotted classes
|
|
314
316
|
:param type: Type of this attribute (for slotted classes)
|
|
315
317
|
|
|
@@ -321,6 +323,15 @@ def attribute(
|
|
|
321
323
|
iter = False
|
|
322
324
|
serialize = False
|
|
323
325
|
|
|
326
|
+
if private:
|
|
327
|
+
if default is NOTHING and default_factory is NOTHING:
|
|
328
|
+
raise AttributeError("Private attributes must have defaults or factories.")
|
|
329
|
+
init = False
|
|
330
|
+
repr = False
|
|
331
|
+
compare = False
|
|
332
|
+
iter = False
|
|
333
|
+
serialize = False
|
|
334
|
+
|
|
324
335
|
return Attribute(
|
|
325
336
|
default=default,
|
|
326
337
|
default_factory=default_factory,
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/prefab.pyi
RENAMED
|
@@ -81,6 +81,7 @@ def attribute(
|
|
|
81
81
|
kw_only: bool = False,
|
|
82
82
|
serialize: bool = True,
|
|
83
83
|
exclude_field: bool = False,
|
|
84
|
+
private: bool = False,
|
|
84
85
|
) -> Attribute: ...
|
|
85
86
|
|
|
86
87
|
def prefab_gatherer(cls_or_ns: type | MappingProxyType) -> tuple[dict[str, Attribute], dict[str, typing.Any]]: ...
|
|
@@ -35,6 +35,7 @@ tests/prefab/dynamic/test_compare_attrib.py
|
|
|
35
35
|
tests/prefab/dynamic/test_construction.py
|
|
36
36
|
tests/prefab/dynamic/test_internals.py
|
|
37
37
|
tests/prefab/dynamic/test_pre_post_init.py
|
|
38
|
+
tests/prefab/dynamic/test_private.py
|
|
38
39
|
tests/prefab/dynamic/test_slots_novalues.py
|
|
39
40
|
tests/prefab/dynamic/test_slotted_class.py
|
|
40
41
|
tests/prefab/dynamic/test_subclass_implementation.py
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from ducktools.classbuilder.prefab import Prefab, attribute, get_attributes
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_private_attribute():
|
|
5
|
+
class Ex(Prefab):
|
|
6
|
+
_internal: "str | None" = attribute(default=None, private=True)
|
|
7
|
+
a: int
|
|
8
|
+
b: str
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
ex = Ex(1, "Hello")
|
|
12
|
+
|
|
13
|
+
assert ex.a == 1
|
|
14
|
+
assert ex.b == "Hello"
|
|
15
|
+
|
|
16
|
+
assert ex._internal is None
|
|
17
|
+
|
|
18
|
+
_internal_attrib = get_attributes(Ex)["_internal"]
|
|
19
|
+
|
|
20
|
+
assert _internal_attrib.init is False
|
|
21
|
+
assert _internal_attrib.repr is False
|
|
22
|
+
assert _internal_attrib.iter is False
|
|
23
|
+
assert _internal_attrib.compare is False
|
|
24
|
+
assert _internal_attrib.serialize is False
|
|
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
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/docs/perf/performance_tests.md
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
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/src/ducktools/classbuilder/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/annotations/test_annotated.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/dynamic/test_internals.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/conftest.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
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_creation.py
RENAMED
|
File without changes
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_dunders.py
RENAMED
|
File without changes
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_frozen.py
RENAMED
|
File without changes
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_funcs.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_init.py
RENAMED
|
File without changes
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_kw_only.py
RENAMED
|
File without changes
|
{ducktools_classbuilder-0.6.2 → ducktools_classbuilder-0.6.3}/tests/prefab/shared/test_repr.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|