worktoy 1.0.1.dev1__tar.gz → 1.1.0.dev1__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.
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/PKG-INFO +15 -11
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/README.md +13 -10
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/pyproject.toml +5 -9
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/__init__.py +10 -1
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/core/__init__.py +4 -1
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/core/_instance_owner.py +23 -12
- worktoy-1.1.0.dev1/src/worktoy/core/_meta_type.py +410 -0
- worktoy-1.1.0.dev1/src/worktoy/core/_object.py +1068 -0
- worktoy-1.1.0.dev1/src/worktoy/core/control_flow/__init__.py +38 -0
- worktoy-1.1.0.dev1/src/worktoy/core/control_flow/_control_flow.py +23 -0
- worktoy-1.1.0.dev1/src/worktoy/core/control_flow/_control_space.py +96 -0
- {worktoy-1.0.1.dev1/src/worktoy/waitaminute → worktoy-1.1.0.dev1/src/worktoy/core}/control_flow/_meta_flow.py +28 -10
- worktoy-1.1.0.dev1/src/worktoy/core/control_flow/_skip_set.py +28 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/core/sentinels/__init__.py +15 -1
- worktoy-1.1.0.dev1/src/worktoy/core/sentinels/_args.py +189 -0
- worktoy-1.1.0.dev1/src/worktoy/core/sentinels/_deleted.py +30 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/core/sentinels/_desc.py +8 -4
- worktoy-1.1.0.dev1/src/worktoy/core/sentinels/_meta_call.py +27 -0
- worktoy-1.1.0.dev1/src/worktoy/core/sentinels/_owner.py +27 -0
- worktoy-1.1.0.dev1/src/worktoy/core/sentinels/_sentinel.py +200 -0
- worktoy-1.1.0.dev1/src/worktoy/core/sentinels/_this.py +467 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/desc/__init__.py +12 -0
- worktoy-1.1.0.dev1/src/worktoy/desc/_alias.py +212 -0
- worktoy-1.1.0.dev1/src/worktoy/desc/_attri_box.py +698 -0
- worktoy-1.1.0.dev1/src/worktoy/desc/_base_descriptor.py +707 -0
- worktoy-1.1.0.dev1/src/worktoy/desc/_fast_box.py +481 -0
- worktoy-1.1.0.dev1/src/worktoy/desc/_field.py +306 -0
- worktoy-1.1.0.dev1/src/worktoy/desc/_fix_box.py +93 -0
- worktoy-1.1.0.dev1/src/worktoy/desc/_root_alias.py +132 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/desc/_symbolic_name.py +63 -20
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/dispatch/__init__.py +4 -3
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/dispatch/_call_me_maybe.py +114 -66
- worktoy-1.1.0.dev1/src/worktoy/dispatch/_dispatcher.py +1473 -0
- worktoy-1.1.0.dev1/src/worktoy/dispatch/_flex_call.py +155 -0
- worktoy-1.1.0.dev1/src/worktoy/dispatch/_overload.py +774 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/dispatch/_permuter.py +81 -48
- worktoy-1.1.0.dev1/src/worktoy/dispatch/_permuter_method.py +62 -0
- worktoy-1.1.0.dev1/src/worktoy/dispatch/_type_sig.py +451 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/ezdata/__init__.py +6 -5
- worktoy-1.1.0.dev1/src/worktoy/ezdata/_ez_data.py +98 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/ezdata/_ez_field.py +163 -30
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/ezdata/_ez_hook.py +505 -215
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/ezdata/_ez_meta.py +49 -13
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/ezdata/_ez_space.py +46 -9
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/ezdata/_ez_store.py +23 -15
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/ezdata/_fields.py +1 -1
- worktoy-1.1.0.dev1/src/worktoy/keenum/_kee_box.py +164 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_kee_flag.py +15 -18
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_kee_flags.py +110 -46
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_kee_flags_hook.py +13 -11
- worktoy-1.1.0.dev1/src/worktoy/keenum/_kee_flags_meta.py +337 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_kee_flags_space.py +67 -18
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_kee_member.py +41 -23
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_kee_meta.py +205 -86
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_kee_meta_meta.py +19 -9
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_kee_num.py +64 -23
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_kee_space.py +61 -24
- worktoy-1.1.0.dev1/src/worktoy/keenum/_kee_space_hook.py +61 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/lorem_ipsum/__init__.py +2 -1
- worktoy-1.1.0.dev1/src/worktoy/lorem_ipsum/_base_generator.py +166 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/lorem_ipsum/_clause.py +77 -58
- worktoy-1.1.0.dev1/src/worktoy/lorem_ipsum/_gaussian_lengths.py +70 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/lorem_ipsum/_paragraph.py +58 -19
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/lorem_ipsum/_sentence.py +70 -20
- worktoy-1.1.0.dev1/src/worktoy/lorem_ipsum/_stochastic_variable.py +231 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/lorem_ipsum/_stochastic_word.py +72 -61
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/mcls/__init__.py +13 -7
- worktoy-1.1.0.dev1/src/worktoy/mcls/_abstract_metaclass.py +555 -0
- worktoy-1.1.0.dev1/src/worktoy/mcls/_abstract_namespace.py +616 -0
- worktoy-1.1.0.dev1/src/worktoy/mcls/_base_meta.py +37 -0
- worktoy-1.1.0.dev1/src/worktoy/mcls/_base_object.py +51 -0
- worktoy-1.1.0.dev1/src/worktoy/mcls/_base_space.py +890 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/mcls/space_hooks/__init__.py +2 -1
- worktoy-1.1.0.dev1/src/worktoy/mcls/space_hooks/_abstract_space_hook.py +283 -0
- worktoy-1.1.0.dev1/src/worktoy/mcls/space_hooks/_flex_call_hook.py +38 -0
- worktoy-1.1.0.dev1/src/worktoy/mcls/space_hooks/_load_space_hook.py +228 -0
- worktoy-1.1.0.dev1/src/worktoy/mcls/space_hooks/_name_hook.py +382 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/mcls/space_hooks/_reserved_names.py +10 -3
- worktoy-1.1.0.dev1/src/worktoy/mcls/space_hooks/_reserved_namespace_hook.py +53 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/mcls/space_hooks/_space_desc.py +10 -4
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/__init__.py +14 -7
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_args_count.py +1 -1
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_bipartite_matching.py +8 -4
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_directory.py +19 -4
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_exception_info.py +8 -1
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_join_words.py +5 -5
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_maybe.py +1 -1
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_quick_desc.py +21 -21
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_replace_flex.py +8 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_resolve_mro.py +1 -1
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_text_fmt.py +6 -2
- worktoy-1.1.0.dev1/src/worktoy/utilities/_type_cast.py +266 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_unpack.py +39 -8
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_valid_slice.py +1 -1
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_word_wrap.py +1 -1
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/combinatorics/_arrangement.py +12 -6
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/combinatorics/_arrangements.py +2 -2
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/combinatorics/_index_permutations.py +12 -8
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/__init__.py +13 -4
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/_missing_variable.py +18 -10
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/_subclass_exception.py +13 -12
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/_type_exception.py +6 -3
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/_uncheckable_type.py +81 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/_unpack_exception.py +7 -6
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/_variable_not_none.py +2 -1
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/_work_toy_exception.py +25 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/control_flow/__init__.py +43 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/__init__.py +51 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/desc/_access_error.py +3 -2
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/_dangling_alias.py +80 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/_descriptor_exception.py +47 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/_missing_instance_dict.py +59 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/_nameless_callback.py +67 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/_not_a_descriptor.py +68 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/_overload_reference.py +55 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/desc/_phantom_box_error.py +12 -7
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/desc/_protected_error.py +8 -6
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/desc/_read_only_error.py +9 -6
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/_recursive_read.py +63 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/_reference_conflict.py +64 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/desc/_shared_descriptor.py +90 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/desc/_without_exception.py +10 -9
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/desc/_write_once_error.py +3 -2
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/dispatch/__init__.py +10 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/dispatch/_bare_overload.py +60 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/dispatch/_dispatch_exception.py +28 -11
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/dispatch/_duplicate_signature.py +19 -7
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/dispatch/_type_cast_exception.py +4 -2
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/dispatch/_unbound_cast_hook.py +63 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/ezdata/__init__.py +6 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/ezdata/_class_field_error.py +11 -6
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/ezdata/_duplicate_error.py +48 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/ezdata/_extra_keyword_exception.py +48 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/ezdata/_extra_positional_exception.py +12 -7
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/ezdata/_incomplete_field_exception.py +8 -3
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/ezdata/_kw_only_exception.py +6 -4
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/ezdata/_repeated_field_exception.py +42 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/ezdata/_reserved_attribute_error.py +61 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/ezdata/_reserved_field_error.py +18 -14
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/ezdata/_reserved_method_error.py +62 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/__init__.py +2 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/_kee_box_exception.py +4 -2
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/_kee_box_type_error.py +4 -2
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/_kee_box_value_error.py +3 -1
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/keenum/_kee_case_exception.py +36 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/_kee_duplicate.py +3 -2
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/_kee_flag_duplicate.py +3 -2
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/keenum/_kee_flag_name_error.py +51 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/keenum/_kee_member_name_error.py +56 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/_kee_name_conflict.py +5 -4
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/_kee_resolve_error.py +7 -4
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/_kee_type_exception.py +4 -2
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/keenum/_kee_write_once_error.py +4 -2
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/__init__.py +48 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/_claimed_name.py +53 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/_control_class_error.py +54 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/meta/_del_exception.py +14 -12
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/meta/_duplicate_hook.py +2 -1
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/_duplicate_sentinel.py +71 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/meta/_hook_exception.py +8 -6
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/meta/_illegal_instantiation.py +5 -4
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/_mixed_method_kind.py +83 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/_overload_conflict.py +63 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/meta/_questionable_syntax.py +4 -1
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/_rebound_overload.py +58 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/waitaminute/meta/_reserved_name.py +7 -4
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/_shadowed_class_hook.py +77 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/_slots_refused.py +51 -0
- worktoy-1.1.0.dev1/src/worktoy/waitaminute/meta/_unbound_class_hook.py +76 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/work_test/__init__.py +1 -1
- worktoy-1.1.0.dev1/src/worktoy/work_test/_base_test.py +227 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/work_test/_complex_mixin.py +48 -21
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/work_test/_complex_test.py +71 -17
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/work_test/_sub_test.py +73 -23
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/work_test/samplers/__init__.py +11 -1
- worktoy-1.1.0.dev1/src/worktoy/work_test/samplers/_base_sampler.py +336 -0
- worktoy-1.1.0.dev1/src/worktoy/work_test/samplers/_float_sampler.py +78 -0
- worktoy-1.1.0.dev1/src/worktoy/work_test/samplers/_gaussian_sampler.py +128 -0
- worktoy-1.1.0.dev1/src/worktoy/work_test/samplers/_int_sampler.py +140 -0
- worktoy-1.1.0.dev1/src/worktoy/work_test/samplers/_lorem_sampler.py +66 -0
- worktoy-1.1.0.dev1/src/worktoy/work_test/samplers/_lorem_text.py +102 -0
- worktoy-1.1.0.dev1/src/worktoy/work_test/samplers/_sampler_meta.py +31 -0
- worktoy-1.1.0.dev1/src/worktoy/work_test/samplers/_symbolic_sampler.py +84 -0
- worktoy-1.1.0.dev1/src/worktoy/work_test/samplers/_word_sampler.py +33 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy.egg-info/PKG-INFO +15 -11
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy.egg-info/SOURCES.txt +34 -6
- worktoy-1.1.0.dev1/tests/test_smoke.py +19 -0
- worktoy-1.0.1.dev1/src/worktoy/core/_meta_type.py +0 -39
- worktoy-1.0.1.dev1/src/worktoy/core/_object.py +0 -528
- worktoy-1.0.1.dev1/src/worktoy/core/sentinels/_args.py +0 -78
- worktoy-1.0.1.dev1/src/worktoy/core/sentinels/_deleted.py +0 -25
- worktoy-1.0.1.dev1/src/worktoy/core/sentinels/_meta_call.py +0 -18
- worktoy-1.0.1.dev1/src/worktoy/core/sentinels/_owner.py +0 -20
- worktoy-1.0.1.dev1/src/worktoy/core/sentinels/_sentinel.py +0 -111
- worktoy-1.0.1.dev1/src/worktoy/core/sentinels/_this.py +0 -25
- worktoy-1.0.1.dev1/src/worktoy/desc/_alias.py +0 -87
- worktoy-1.0.1.dev1/src/worktoy/desc/_attri_box.py +0 -609
- worktoy-1.0.1.dev1/src/worktoy/desc/_base_descriptor.py +0 -273
- worktoy-1.0.1.dev1/src/worktoy/desc/_fast_box.py +0 -163
- worktoy-1.0.1.dev1/src/worktoy/desc/_field.py +0 -239
- worktoy-1.0.1.dev1/src/worktoy/desc/_fix_box.py +0 -60
- worktoy-1.0.1.dev1/src/worktoy/dispatch/_dispatcher.py +0 -769
- worktoy-1.0.1.dev1/src/worktoy/dispatch/_flex_call.py +0 -161
- worktoy-1.0.1.dev1/src/worktoy/dispatch/_overload.py +0 -403
- worktoy-1.0.1.dev1/src/worktoy/dispatch/_permuter_method.py +0 -47
- worktoy-1.0.1.dev1/src/worktoy/dispatch/_type_sig.py +0 -296
- worktoy-1.0.1.dev1/src/worktoy/ezdata/_ez_data.py +0 -79
- worktoy-1.0.1.dev1/src/worktoy/keenum/_kee_box.py +0 -202
- worktoy-1.0.1.dev1/src/worktoy/keenum/_kee_flags_meta.py +0 -268
- worktoy-1.0.1.dev1/src/worktoy/keenum/_kee_space_hook.py +0 -45
- worktoy-1.0.1.dev1/src/worktoy/lorem_ipsum/_base_generator.py +0 -103
- worktoy-1.0.1.dev1/src/worktoy/lorem_ipsum/_gaussian_lengths.py +0 -98
- worktoy-1.0.1.dev1/src/worktoy/lorem_ipsum/_stochastic_variable.py +0 -258
- worktoy-1.0.1.dev1/src/worktoy/mcls/_abstract_metaclass.py +0 -349
- worktoy-1.0.1.dev1/src/worktoy/mcls/_abstract_namespace.py +0 -357
- worktoy-1.0.1.dev1/src/worktoy/mcls/_base_meta.py +0 -47
- worktoy-1.0.1.dev1/src/worktoy/mcls/_base_object.py +0 -25
- worktoy-1.0.1.dev1/src/worktoy/mcls/_base_space.py +0 -466
- worktoy-1.0.1.dev1/src/worktoy/mcls/space_hooks/_abstract_space_hook.py +0 -186
- worktoy-1.0.1.dev1/src/worktoy/mcls/space_hooks/_flex_call_hook.py +0 -53
- worktoy-1.0.1.dev1/src/worktoy/mcls/space_hooks/_load_space_hook.py +0 -125
- worktoy-1.0.1.dev1/src/worktoy/mcls/space_hooks/_name_hook.py +0 -228
- worktoy-1.0.1.dev1/src/worktoy/mcls/space_hooks/_reserved_namespace_hook.py +0 -97
- worktoy-1.0.1.dev1/src/worktoy/utilities/_type_cast.py +0 -233
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/control_flow/__init__.py +0 -21
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/control_flow/_control_class_error.py +0 -47
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/control_flow/_control_flow.py +0 -14
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/control_flow/_control_space.py +0 -65
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/control_flow/_skip_set.py +0 -26
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/desc/__init__.py +0 -30
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/desc/_descriptor_exception.py +0 -19
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/ezdata/_duplicate_error.py +0 -37
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/ezdata/_reserved_method_error.py +0 -50
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/keenum/_kee_case_exception.py +0 -32
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/keenum/_kee_flag_name_error.py +0 -44
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/meta/__init__.py +0 -27
- worktoy-1.0.1.dev1/src/worktoy/waitaminute/meta/_unbound_class_hook.py +0 -45
- worktoy-1.0.1.dev1/src/worktoy/work_test/_base_test.py +0 -190
- worktoy-1.0.1.dev1/src/worktoy/work_test/samplers/_base_sampler.py +0 -248
- worktoy-1.0.1.dev1/src/worktoy/work_test/samplers/_float_sampler.py +0 -131
- worktoy-1.0.1.dev1/src/worktoy/work_test/samplers/_gaussian_sampler.py +0 -192
- worktoy-1.0.1.dev1/src/worktoy/work_test/samplers/_int_sampler.py +0 -179
- worktoy-1.0.1.dev1/src/worktoy/work_test/samplers/_lorem_sampler.py +0 -80
- worktoy-1.0.1.dev1/src/worktoy/work_test/samplers/_symbolic_sampler.py +0 -112
- worktoy-1.0.1.dev1/src/worktoy/work_test/samplers/_word_sampler.py +0 -53
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/LICENSE +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/setup.cfg +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/__init__.py +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/keenum/_access_num.py +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/lorem_ipsum/_words.py +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/py.typed +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_class_body_template.py +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_slice_len.py +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/_string_list.py +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy/utilities/combinatorics/__init__.py +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy.egg-info/dependency_links.txt +0 -0
- {worktoy-1.0.1.dev1 → worktoy-1.1.0.dev1}/src/worktoy.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: worktoy
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.1.0.dev1
|
|
4
4
|
Summary: Declarative structure for Python that enforces types at runtime and enables true function overloading
|
|
5
5
|
Author-email: Asger Jon Vistisen <asgerjon2@gmail.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
17
18
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
18
19
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
19
20
|
Classifier: Operating System :: OS Independent
|
|
@@ -32,12 +33,12 @@ Dynamic: license-file
|
|
|
32
33
|
[](https://pypi.org/project/worktoy/)
|
|
33
34
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
34
35
|
|
|
35
|
-
# worktoy v1.0
|
|
36
|
+
# worktoy v1.1.0-dev1 (development build)
|
|
36
37
|
|
|
37
38
|
**worktoy** provides utilities for Python development focused on
|
|
38
39
|
reducing boilerplate while improving type safety and readability. Each
|
|
39
40
|
release is tested thoroughly on each supported Python version from 3.7*
|
|
40
|
-
to 3.
|
|
41
|
+
to 3.15.
|
|
41
42
|
|
|
42
43
|
*Maybe it is time to consider updating if you are still using Python 3.7.
|
|
43
44
|
|
|
@@ -108,13 +109,15 @@ Attributes are declared explicitly at the class level. Despite this,
|
|
|
108
109
|
flexibility remains, for example:
|
|
109
110
|
|
|
110
111
|
```python
|
|
111
|
-
point = Point(69,
|
|
112
|
+
point = Point(69, 420) # int, int
|
|
112
113
|
point.x == 69.0
|
|
113
114
|
point.y == 420.0
|
|
114
115
|
```
|
|
115
116
|
|
|
116
|
-
When types do not match, `AttriBox`
|
|
117
|
-
|
|
117
|
+
When types do not match, `AttriBox` converts what converts without loss,
|
|
118
|
+
as an `int` to a `float`, and refuses the rest: `Point(69, '420')` raises
|
|
119
|
+
`TypeException`, since no string is ever parsed. Same ergonomics. Stronger
|
|
120
|
+
guarantees.
|
|
118
121
|
|
|
119
122
|
Note that `Point` above is a plain class: both `AttriBox` and `Field`
|
|
120
123
|
are ordinary descriptors and work on any class. The `BaseObject` base
|
|
@@ -168,7 +171,7 @@ from worktoy.core.sentinels import THIS
|
|
|
168
171
|
from worktoy.dispatch import overload
|
|
169
172
|
from worktoy.desc import AttriBox
|
|
170
173
|
|
|
171
|
-
if TYPE_CHECKING: # pragma: no cover
|
|
174
|
+
if TYPE_CHECKING: # pragma: no cover, no mutate
|
|
172
175
|
from typing import Self
|
|
173
176
|
|
|
174
177
|
|
|
@@ -316,10 +319,11 @@ class Point:
|
|
|
316
319
|
def __init__(self, *args, ) -> None: ... # Implementation as before
|
|
317
320
|
```
|
|
318
321
|
|
|
319
|
-
Both improve clarity
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
322
|
+
Both improve clarity, but neither makes `x` and `y` part of the class.
|
|
323
|
+
With annotations alone, `Point.x` raises `AttributeError`; with
|
|
324
|
+
`__slots__`, `Point.x` is a bare slot that knows nothing of the type.
|
|
325
|
+
Either way the values appear only once `__init__` sets them, as attributes
|
|
326
|
+
of the instance, and setting them there makes no difference compared to
|
|
323
327
|
setting them anywhere else. Structure remains implicit.
|
|
324
328
|
|
|
325
329
|
With **worktoy** attributes are an essential part of the class structure
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
[](https://pypi.org/project/worktoy/)
|
|
5
5
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
6
6
|
|
|
7
|
-
# worktoy v1.0
|
|
7
|
+
# worktoy v1.1.0-dev1 (development build)
|
|
8
8
|
|
|
9
9
|
**worktoy** provides utilities for Python development focused on
|
|
10
10
|
reducing boilerplate while improving type safety and readability. Each
|
|
11
11
|
release is tested thoroughly on each supported Python version from 3.7*
|
|
12
|
-
to 3.
|
|
12
|
+
to 3.15.
|
|
13
13
|
|
|
14
14
|
*Maybe it is time to consider updating if you are still using Python 3.7.
|
|
15
15
|
|
|
@@ -80,13 +80,15 @@ Attributes are declared explicitly at the class level. Despite this,
|
|
|
80
80
|
flexibility remains, for example:
|
|
81
81
|
|
|
82
82
|
```python
|
|
83
|
-
point = Point(69,
|
|
83
|
+
point = Point(69, 420) # int, int
|
|
84
84
|
point.x == 69.0
|
|
85
85
|
point.y == 420.0
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
When types do not match, `AttriBox`
|
|
89
|
-
|
|
88
|
+
When types do not match, `AttriBox` converts what converts without loss,
|
|
89
|
+
as an `int` to a `float`, and refuses the rest: `Point(69, '420')` raises
|
|
90
|
+
`TypeException`, since no string is ever parsed. Same ergonomics. Stronger
|
|
91
|
+
guarantees.
|
|
90
92
|
|
|
91
93
|
Note that `Point` above is a plain class: both `AttriBox` and `Field`
|
|
92
94
|
are ordinary descriptors and work on any class. The `BaseObject` base
|
|
@@ -140,7 +142,7 @@ from worktoy.core.sentinels import THIS
|
|
|
140
142
|
from worktoy.dispatch import overload
|
|
141
143
|
from worktoy.desc import AttriBox
|
|
142
144
|
|
|
143
|
-
if TYPE_CHECKING: # pragma: no cover
|
|
145
|
+
if TYPE_CHECKING: # pragma: no cover, no mutate
|
|
144
146
|
from typing import Self
|
|
145
147
|
|
|
146
148
|
|
|
@@ -288,10 +290,11 @@ class Point:
|
|
|
288
290
|
def __init__(self, *args, ) -> None: ... # Implementation as before
|
|
289
291
|
```
|
|
290
292
|
|
|
291
|
-
Both improve clarity
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
293
|
+
Both improve clarity, but neither makes `x` and `y` part of the class.
|
|
294
|
+
With annotations alone, `Point.x` raises `AttributeError`; with
|
|
295
|
+
`__slots__`, `Point.x` is a bare slot that knows nothing of the type.
|
|
296
|
+
Either way the values appear only once `__init__` sets them, as attributes
|
|
297
|
+
of the instance, and setting them there makes no difference compared to
|
|
295
298
|
setting them anywhere else. Structure remains implicit.
|
|
296
299
|
|
|
297
300
|
With **worktoy** attributes are an essential part of the class structure
|
|
@@ -5,7 +5,7 @@ build-backend = 'setuptools.build_meta'
|
|
|
5
5
|
|
|
6
6
|
[project]
|
|
7
7
|
name = "worktoy"
|
|
8
|
-
version = "1.0
|
|
8
|
+
version = "1.1.0-dev1"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "Asger Jon Vistisen", email = "asgerjon2@gmail.com" },
|
|
11
11
|
]
|
|
@@ -22,6 +22,7 @@ classifiers = [
|
|
|
22
22
|
'Programming Language :: Python :: 3.12',
|
|
23
23
|
'Programming Language :: Python :: 3.13',
|
|
24
24
|
'Programming Language :: Python :: 3.14',
|
|
25
|
+
'Programming Language :: Python :: 3.15',
|
|
25
26
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
26
27
|
"License :: OSI Approved :: Apache Software License",
|
|
27
28
|
"Operating System :: OS Independent",
|
|
@@ -40,9 +41,11 @@ test = [
|
|
|
40
41
|
'pytest>=9.0.2',
|
|
41
42
|
'pytest-cov>=7.0.0',
|
|
42
43
|
]
|
|
44
|
+
# The same packages as docs/requirements.txt. markwork brings Pygments.
|
|
43
45
|
docs = [
|
|
44
46
|
'sphinx>=7.0.0',
|
|
45
|
-
'
|
|
47
|
+
'furo>=2024.1',
|
|
48
|
+
'markwork>=0.1.0',
|
|
46
49
|
]
|
|
47
50
|
dev = [
|
|
48
51
|
'icecream>=2.1.8',
|
|
@@ -54,13 +57,6 @@ dev = [
|
|
|
54
57
|
[tool.setuptools.package-data]
|
|
55
58
|
worktoy = ["py.typed"]
|
|
56
59
|
|
|
57
|
-
[tool.coverage.run]
|
|
58
|
-
omit = [
|
|
59
|
-
# Pre-PEP 634 fallback. Unreachable on 3.14 where coverage
|
|
60
|
-
# runs; exercised by unittest on <3.10.
|
|
61
|
-
"tests/test_ezdata/_match_args_legacy_helpers.py",
|
|
62
|
-
]
|
|
63
|
-
|
|
64
60
|
# pytest configuration lives here rather than in a root 'pytest.ini' so
|
|
65
61
|
# the repository root stays uncluttered. pytest auto-discovers this
|
|
66
62
|
# table, so no '-c' flag is needed locally or in CI.
|
|
@@ -34,12 +34,21 @@ chain.
|
|
|
34
34
|
descriptors.
|
|
35
35
|
- work_test: Testing support, providing 'BaseTest' and the random-data
|
|
36
36
|
samplers used across the test suite.
|
|
37
|
+
|
|
38
|
+
Nested classes: 'worktoy' is designed around custom metaclasses and the
|
|
39
|
+
class statements they build, not around classes nested in the body of
|
|
40
|
+
another class. A nested class may well work, but some edge cases are not
|
|
41
|
+
supported. One example is a nested class with the same base as the
|
|
42
|
+
enclosing class: a 'THIS[Parent]' reference in the enclosing body places
|
|
43
|
+
its clone on the next subclass created of the class holding the
|
|
44
|
+
descriptor, 'Parent' or a base of it, which is then the nested class,
|
|
45
|
+
and the enclosing class is left without the decoration.
|
|
37
46
|
"""
|
|
38
47
|
# Apache-2.0 license
|
|
39
48
|
# Copyright (c) 2025-2026 Asger Jon Vistisen
|
|
40
49
|
from __future__ import annotations
|
|
41
50
|
|
|
42
|
-
__version__ = '1.0
|
|
51
|
+
__version__ = '1.1.0-dev1'
|
|
43
52
|
|
|
44
53
|
from . import utilities
|
|
45
54
|
from . import waitaminute
|
|
@@ -6,18 +6,21 @@ metaclass framework and the descriptor layer build on.
|
|
|
6
6
|
- Object
|
|
7
7
|
- ContextInstance, ContextOwner
|
|
8
8
|
- sentinels
|
|
9
|
+
- control_flow
|
|
9
10
|
"""
|
|
10
11
|
# Apache-2.0 license
|
|
11
12
|
# Copyright (c) 2025-2026 Asger Jon Vistisen
|
|
12
13
|
from __future__ import annotations
|
|
13
14
|
|
|
15
|
+
from ._meta_type import MetaType
|
|
14
16
|
from . import sentinels
|
|
17
|
+
from . import control_flow
|
|
15
18
|
from ._instance_owner import ContextInstance, ContextOwner
|
|
16
|
-
from ._meta_type import MetaType
|
|
17
19
|
from ._object import Object
|
|
18
20
|
|
|
19
21
|
__all__ = [
|
|
20
22
|
'sentinels',
|
|
23
|
+
'control_flow',
|
|
21
24
|
'ContextInstance',
|
|
22
25
|
'ContextOwner',
|
|
23
26
|
'MetaType',
|
|
@@ -8,17 +8,24 @@ from __future__ import annotations
|
|
|
8
8
|
|
|
9
9
|
from typing import TYPE_CHECKING
|
|
10
10
|
|
|
11
|
-
if TYPE_CHECKING: # pragma: no cover
|
|
11
|
+
if TYPE_CHECKING: # pragma: no cover, no mutate
|
|
12
12
|
from typing import Any
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class ContextInstance:
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
"""
|
|
17
|
+
Inside the hooks of a descriptor based on 'Object', 'self.instance'
|
|
18
|
+
must give the instance of the access in progress, the object the
|
|
19
|
+
attribute is read from, written to or deleted from. The same name read
|
|
20
|
+
through the class must give something harmless, and the descriptor
|
|
21
|
+
machinery must never depend on it, since a subclass may shadow it.
|
|
22
|
+
|
|
23
|
+
Implementation
|
|
24
|
+
--------------
|
|
25
|
+
|
|
26
|
+
Through the class, the descriptor returns itself. Through an 'Object',
|
|
27
|
+
it returns 'getContextInstance()', which reads the top frame of the
|
|
28
|
+
context stack, and fails outside an access as that method describes.
|
|
22
29
|
"""
|
|
23
30
|
|
|
24
31
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
@@ -32,12 +39,16 @@ class ContextInstance:
|
|
|
32
39
|
|
|
33
40
|
|
|
34
41
|
class ContextOwner:
|
|
35
|
-
"""
|
|
42
|
+
"""
|
|
43
|
+
Inside the hooks of a descriptor based on 'Object', 'self.owner' must
|
|
44
|
+
give the owning class of the access in progress.
|
|
45
|
+
|
|
46
|
+
Implementation
|
|
47
|
+
--------------
|
|
36
48
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
context frame is active.
|
|
49
|
+
Through the class, the descriptor returns itself. Through an 'Object',
|
|
50
|
+
it returns 'getContextOwner()', which reads the top frame of the
|
|
51
|
+
context stack, and fails outside an access as that method describes.
|
|
41
52
|
"""
|
|
42
53
|
|
|
43
54
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|