danielutils 1.1.1__tar.gz → 1.1.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.
- {danielutils-1.1.1/danielutils.egg-info → danielutils-1.1.2}/PKG-INFO +1 -1
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/__init__.py +0 -1
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/argument_info.py +5 -1
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/class_info.py +187 -159
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/decorator_info.py +1 -1
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/file_info.py +1180 -1163
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/function_info.py +518 -495
- {danielutils-1.1.1 → danielutils-1.1.2/danielutils.egg-info}/PKG-INFO +1 -1
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils.egg-info/SOURCES.txt +0 -2
- {danielutils-1.1.1 → danielutils-1.1.2}/pyproject.toml +1 -1
- danielutils-1.1.1/danielutils/reflection/class_/__init__.py +0 -1
- danielutils-1.1.1/danielutils/reflection/class_/class_reflection.py +0 -252
- {danielutils-1.1.1 → danielutils-1.1.2}/LICENSE +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/MANIFEST.in +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/README.md +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_definitions.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_exceptions.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_factory.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_initializer.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_models.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/dependencies.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/in_memory_database.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/persistent_in_memory_database.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/redis_database.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/sqlite_database.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/multiprogramming/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/multiprogramming/multi_id.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/multiprogramming/worker.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/multiprogramming/worker_pool.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/repl.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/aliases.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_cmd.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_command.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_layered_command.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_retry_executor.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_worker_pool.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/time_strategy.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/utils.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/counter.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/frange.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/factory.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/tdict.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/tlist.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/tset.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/ttuple.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/colors.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/attr_context.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/multi_context.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/optional_context.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/state_context.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/temporary_file.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/convenience.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/main_conversions.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/specialized_conversions/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/specialized_conversions/to_hex.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/specialized_conversions/to_int.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/custom_types.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/algorithms.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/comparer.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/default_dict.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/functions.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/binary_node.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/graph.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/multinode.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/node.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/heap/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/heap/heap.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/heap/max_heap.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/heap/min_heap.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/queue/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/queue/atomic_queue.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/queue/priority_queue.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/queue/queue.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/stack.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/trees/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/trees/binary_syntax_tree.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/trees/binary_tree.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/date.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/date_time.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/atomic.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/attach.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/chain_decorators.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/decorate_conditionally.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/delay_call.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/deprecate.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/final.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/limit_recursion.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/memo.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/normalize_decorator.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/overload.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/partially_implemented.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/processify.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/property.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/singleton.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/threadify.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/timeout.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/total_ordering.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/validate.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/exceptions.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/areoneof.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/check_foreach.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/factorial.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/flatten.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/foreach.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/isoftype.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/isoneof.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/multiloop.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/parallel_for.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/partition.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/powerset.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/subseteq.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/types_subseteq.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/generators/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/generators/conditional_generator.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/generators/generator_from_stream.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/generators/join_generators.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/internet.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/io_.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/java/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/java/interfaces/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/java/interfaces/comparable.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/java/java_interface.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/builtin_impls/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/builtin_impls/file_logger.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/builtin_impls/print_logger.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/log_level.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/logger.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/logger_strategy_impl_base.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/utils.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/lombok/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/lombok/builder.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/constants.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/functions.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/math_print.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/math_symbols.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/atomic_class_meta.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/implicit_data_deleter_meta.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/instance_cache_meta.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/interface.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/overload_meta.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/mock_/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/mock_/mock_module.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/path.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/print_.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/progress_bar/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/progress_bar/ascii_progress_bar.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/progress_bar/progress_bar.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/progress_bar/progress_bar_pool.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/protocols/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/protocols/dictable.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/protocols/evaluable.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/protocols/serializable.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/py.typed +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/random_.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/file/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/file/file_reflection.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/function/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/function/function_reflections.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/folder_info.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/import_info.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/callstack.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/get_traceback.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/interpreter.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/is_debugging.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/os_.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/packages.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/python_version.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/signals.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/tracer.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/module/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/module/lazy_module.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/module/module_reflections.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/module/package_reflection.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/constant_backoff.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/exponential_backoff.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/functional_backoff.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/linear_backoff.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/multiplicative_backoff.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/no_backoff.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategy.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/retry_executor.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/snippets/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/snippets/try_get.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/independent.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/layered_command.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/utils/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/utils/filetime.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/win32_ctime.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/windows.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/testing/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/testing/unittest_/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/testing/unittest_/always_teardown_testcase.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/testing/unittest_/auto_cwd_testcase.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/text.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/time.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/discreate_finite_automaton.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/languages/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/languages/language.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/languages/sat.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/turing_machine.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/databases/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/databases/all.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/encoding.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/huffman.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/lossless_encoding.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/lzw.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/run_length.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossy/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossy/lossy_encoding.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/gaussian.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/gradient.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/hough.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/laplacian.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/transformation.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/linear_algebra/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/linear_algebra/matrix.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/activation_functions/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/activation_functions/activation_function.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/activation_functions/relu.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/neuron.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/oop/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/oop/observer.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/oop/strategy.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/conditional_variable.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/continuous/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/bernoulli.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/binomial.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/conditional_from_discrete_probability_func.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/discrete.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/geometric.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/poisson.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/uniform.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/distributions.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/expressions/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/expressions/accumulation_expression.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/expressions/probability_expression.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/__init__.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/covariance.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/expected_value.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/probability_function.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/variance.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/operator.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/protocols.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/supp.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/transformation.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/versioned_imports.py +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils.egg-info/dependency_links.txt +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/danielutils.egg-info/top_level.txt +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/setup.cfg +0 -0
- {danielutils-1.1.1 → danielutils-1.1.2}/setup.py +0 -0
{danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/argument_info.py
RENAMED
|
@@ -77,9 +77,10 @@ class ArgumentInfo:
|
|
|
77
77
|
kwargs, args, kwarg_only, pname, parameters, name, type, default_value = m.groups()
|
|
78
78
|
type = None if type is None else type.strip()
|
|
79
79
|
default_value = None if default_value is None else default_value.strip()
|
|
80
|
+
|
|
80
81
|
return ArgumentInfo(
|
|
81
82
|
name=name or pname or (args.strip("*") if args else None) or (
|
|
82
|
-
kwargs.strip("*") if kwargs else None) or (kwarg_only
|
|
83
|
+
kwargs.strip("*") if kwargs else None) or (kwarg_only if kwarg_only else None) or None,
|
|
83
84
|
type=type,
|
|
84
85
|
default=default_value,
|
|
85
86
|
is_kwargs=kwargs is not None,
|
|
@@ -111,6 +112,9 @@ class ArgumentInfo:
|
|
|
111
112
|
res = []
|
|
112
113
|
for start, end in zip(indices[:-1], indices[1:]):
|
|
113
114
|
substr = string[start + 1:end].strip()
|
|
115
|
+
# Skip standalone * (keyword-only separator)
|
|
116
|
+
if substr == "*":
|
|
117
|
+
continue
|
|
114
118
|
res.append(ArgumentInfo._parse_one(substr))
|
|
115
119
|
return res
|
|
116
120
|
|
|
@@ -1,159 +1,187 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import inspect
|
|
3
|
-
import json
|
|
4
|
-
import re
|
|
5
|
-
from typing import List, Iterable, Type, TypeVar, Generic, get_origin
|
|
6
|
-
from .function_info import FunctionInfo
|
|
7
|
-
from .decorator_info import DecoratorInfo
|
|
8
|
-
from .argument_info import ArgumentInfo
|
|
9
|
-
|
|
10
|
-
from ...logging_.utils import get_logger
|
|
11
|
-
|
|
12
|
-
logger = get_logger(__name__)
|
|
13
|
-
|
|
14
|
-
T = TypeVar("T")
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class _A(Generic[T]):
|
|
18
|
-
...
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
_GenericAlias = type(_A[int])
|
|
22
|
-
|
|
23
|
-
del T, _A
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class ClassInfo:
|
|
27
|
-
CLASS_DEFINITION_REGEX: re.Pattern = re.compile(
|
|
28
|
-
r"(?P<decorations>[\s\S]*)?(^)?class (?P<name>\w[\w\d]*)(?:\((?P<bases>.*)\))?:(?P<body>[\s\S]+)", re.MULTILINE)
|
|
29
|
-
|
|
30
|
-
# r"(?P<decorations>[\s\S]*)?^class (?P<name>\w[\w\d]*)(?:\((?P<bases>.*)\))?:(?P<body>[\s\S]+)"
|
|
31
|
-
|
|
32
|
-
def __init__(self, cls: Type) -> None:
|
|
33
|
-
logger.debug("Creating ClassInfo for: %s", cls)
|
|
34
|
-
if
|
|
35
|
-
logger.debug("Converting generic alias to origin type")
|
|
36
|
-
cls = get_origin(cls) # type:ignore
|
|
37
|
-
if not inspect.isclass(cls):
|
|
38
|
-
error_msg = f"'{cls.__name__}' is not a class"
|
|
39
|
-
logger.error("ClassInfo creation failed: %s", error_msg)
|
|
40
|
-
raise TypeError(error_msg)
|
|
41
|
-
self._cls = cls
|
|
42
|
-
self._src_code: str = ""
|
|
43
|
-
self._name: str = ""
|
|
44
|
-
self._bases: List[ArgumentInfo] = []
|
|
45
|
-
self._functions: List[FunctionInfo] = []
|
|
46
|
-
self._decorations: List[DecoratorInfo] = []
|
|
47
|
-
logger.debug("Parsing source code for class: %s", cls.__name__)
|
|
48
|
-
self._parse_src_code()
|
|
49
|
-
logger.info("ClassInfo created successfully for: %s", cls.__name__)
|
|
50
|
-
|
|
51
|
-
def _parse_src_code(self) -> None:
|
|
52
|
-
logger.debug("Parsing source code")
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
logger.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
def
|
|
134
|
-
return
|
|
135
|
-
|
|
136
|
-
@property
|
|
137
|
-
def
|
|
138
|
-
return
|
|
139
|
-
|
|
140
|
-
@property
|
|
141
|
-
def
|
|
142
|
-
return self.
|
|
143
|
-
|
|
144
|
-
@property
|
|
145
|
-
def
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
@property
|
|
149
|
-
def
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
@property
|
|
153
|
-
def
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
1
|
+
import logging
|
|
2
|
+
import inspect
|
|
3
|
+
import json
|
|
4
|
+
import re
|
|
5
|
+
from typing import List, Iterable, Type, TypeVar, Generic, get_origin
|
|
6
|
+
from .function_info import FunctionInfo
|
|
7
|
+
from .decorator_info import DecoratorInfo
|
|
8
|
+
from .argument_info import ArgumentInfo
|
|
9
|
+
|
|
10
|
+
from ...logging_.utils import get_logger
|
|
11
|
+
|
|
12
|
+
logger = get_logger(__name__)
|
|
13
|
+
|
|
14
|
+
T = TypeVar("T")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class _A(Generic[T]):
|
|
18
|
+
...
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
_GenericAlias = type(_A[int])
|
|
22
|
+
|
|
23
|
+
del T, _A
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ClassInfo:
|
|
27
|
+
CLASS_DEFINITION_REGEX: re.Pattern = re.compile(
|
|
28
|
+
r"(?P<decorations>[\s\S]*)?(^)?class (?P<name>\w[\w\d]*)(?:\((?P<bases>.*)\))?:(?P<body>[\s\S]+)", re.MULTILINE)
|
|
29
|
+
|
|
30
|
+
# r"(?P<decorations>[\s\S]*)?^class (?P<name>\w[\w\d]*)(?:\((?P<bases>.*)\))?:(?P<body>[\s\S]+)"
|
|
31
|
+
|
|
32
|
+
def __init__(self, cls: Type) -> None:
|
|
33
|
+
logger.debug("Creating ClassInfo for: %s", cls)
|
|
34
|
+
if isinstance(cls, _GenericAlias):
|
|
35
|
+
logger.debug("Converting generic alias to origin type")
|
|
36
|
+
cls = get_origin(cls) # type:ignore
|
|
37
|
+
if not inspect.isclass(cls):
|
|
38
|
+
error_msg = f"'{getattr(cls, '__name__', type(cls).__name__)}' is not a class"
|
|
39
|
+
logger.error("ClassInfo creation failed: %s", error_msg)
|
|
40
|
+
raise TypeError(error_msg)
|
|
41
|
+
self._cls = cls
|
|
42
|
+
self._src_code: str = ""
|
|
43
|
+
self._name: str = ""
|
|
44
|
+
self._bases: List[ArgumentInfo] = []
|
|
45
|
+
self._functions: List[FunctionInfo] = []
|
|
46
|
+
self._decorations: List[DecoratorInfo] = []
|
|
47
|
+
logger.debug("Parsing source code for class: %s", cls.__name__)
|
|
48
|
+
self._parse_src_code()
|
|
49
|
+
logger.info("ClassInfo created successfully for: %s", cls.__name__)
|
|
50
|
+
|
|
51
|
+
def _parse_src_code(self) -> None:
|
|
52
|
+
logger.debug("Parsing source code")
|
|
53
|
+
try:
|
|
54
|
+
self._src_code = inspect.getsource(self._cls)
|
|
55
|
+
except (OSError, TypeError) as e:
|
|
56
|
+
logger.warning(
|
|
57
|
+
"Source code not available for class: %s - %s", self._cls.__name__, e)
|
|
58
|
+
self._src_code = ""
|
|
59
|
+
# Fall back to runtime introspection
|
|
60
|
+
self._name = self._cls.__name__
|
|
61
|
+
self._bases = []
|
|
62
|
+
self._parse_body()
|
|
63
|
+
return
|
|
64
|
+
|
|
65
|
+
m = ClassInfo.CLASS_DEFINITION_REGEX.match(self._src_code)
|
|
66
|
+
if m is None:
|
|
67
|
+
logger.warning(
|
|
68
|
+
"Failed to match class definition regex, falling back to runtime introspection")
|
|
69
|
+
# Fall back to runtime introspection
|
|
70
|
+
self._name = self._cls.__name__
|
|
71
|
+
self._bases = []
|
|
72
|
+
self._parse_body()
|
|
73
|
+
return
|
|
74
|
+
|
|
75
|
+
decorators, name, bases, _ = m.groupdict().values()
|
|
76
|
+
logger.debug("Parsed class name: %s, bases: %s", name, bases)
|
|
77
|
+
self._name = name
|
|
78
|
+
self._bases = ArgumentInfo.from_str(bases)
|
|
79
|
+
logger.debug("Parsed %s base classes", len(self._bases))
|
|
80
|
+
self._parse_body()
|
|
81
|
+
|
|
82
|
+
if decorators is not None:
|
|
83
|
+
logger.debug("Parsing %s decorators", len(
|
|
84
|
+
decorators.strip().splitlines()))
|
|
85
|
+
for substr in decorators.strip().splitlines():
|
|
86
|
+
try:
|
|
87
|
+
self._decorations.append(
|
|
88
|
+
DecoratorInfo.from_str(substr.strip()))
|
|
89
|
+
except ValueError as e:
|
|
90
|
+
logger.warning(
|
|
91
|
+
"Failed to parse decorator '%s': %s", substr.strip(), e)
|
|
92
|
+
# Skip invalid decorators
|
|
93
|
+
continue
|
|
94
|
+
logger.debug("Parsed %s decorators", len(self._decorations))
|
|
95
|
+
|
|
96
|
+
def _parse_body(self) -> None:
|
|
97
|
+
for attr in dir(self._cls):
|
|
98
|
+
obj = getattr(self._cls, attr, None)
|
|
99
|
+
if inspect.isbuiltin(obj):
|
|
100
|
+
continue
|
|
101
|
+
try:
|
|
102
|
+
if inspect.isroutine(obj):
|
|
103
|
+
inspect.getsource(obj)
|
|
104
|
+
elif inspect.isdatadescriptor(obj):
|
|
105
|
+
inspect.getsource(obj.fget) # type:ignore
|
|
106
|
+
else:
|
|
107
|
+
continue
|
|
108
|
+
except:
|
|
109
|
+
continue
|
|
110
|
+
|
|
111
|
+
try:
|
|
112
|
+
self._functions.append(FunctionInfo(
|
|
113
|
+
obj, self._cls)) # type: ignore
|
|
114
|
+
except TypeError as e:
|
|
115
|
+
# Skip functions that can't be parsed (e.g., lambda, built-ins)
|
|
116
|
+
logger.debug("Skipping function '%s': %s", attr, e)
|
|
117
|
+
continue
|
|
118
|
+
except Exception as e:
|
|
119
|
+
raise Exception(
|
|
120
|
+
f"Error parsing function '{attr}' of class '{self._name}': {e}", e) from e
|
|
121
|
+
|
|
122
|
+
def __str__(self) -> str:
|
|
123
|
+
body = json.dumps({
|
|
124
|
+
"name": self.name,
|
|
125
|
+
"bases": self.bases,
|
|
126
|
+
"decorations": self.decorations,
|
|
127
|
+
"static_methods": self.static_methods,
|
|
128
|
+
"class_methods": self.class_methods,
|
|
129
|
+
"instance_methods": self.instance_methods
|
|
130
|
+
}, default=str, indent=4)[1:-1]
|
|
131
|
+
return f"{self.__class__.__name__}({body})"
|
|
132
|
+
|
|
133
|
+
def __repr__(self):
|
|
134
|
+
return f"{self.__class__.__name__}(name=\"{self.name}\")"
|
|
135
|
+
|
|
136
|
+
@property
|
|
137
|
+
def name(self) -> str:
|
|
138
|
+
return self._name
|
|
139
|
+
|
|
140
|
+
@property
|
|
141
|
+
def decorations(self) -> List[DecoratorInfo]:
|
|
142
|
+
return self._decorations
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def bases(self) -> List[ArgumentInfo]:
|
|
146
|
+
return self._bases
|
|
147
|
+
|
|
148
|
+
@property
|
|
149
|
+
def static_methods(self) -> Iterable[FunctionInfo]:
|
|
150
|
+
return sorted(filter(lambda f: f.is_static_method, self._functions), key=lambda f: f.name)
|
|
151
|
+
|
|
152
|
+
@property
|
|
153
|
+
def class_methods(self) -> Iterable[FunctionInfo]:
|
|
154
|
+
return sorted(filter(lambda f: f.is_class_method, self._functions), key=lambda f: f.name)
|
|
155
|
+
|
|
156
|
+
@property
|
|
157
|
+
def instance_methods(self) -> Iterable[FunctionInfo]:
|
|
158
|
+
return sorted(filter(lambda f: f.is_instance_method, self._functions), key=lambda f: f.name)
|
|
159
|
+
|
|
160
|
+
@property
|
|
161
|
+
def inherited_methods(self) -> Iterable[FunctionInfo]:
|
|
162
|
+
return sorted(filter(lambda f: f.is_inherited, self._functions), key=lambda f: f.name)
|
|
163
|
+
|
|
164
|
+
@property
|
|
165
|
+
def abstract_methods(self) -> Iterable[FunctionInfo]:
|
|
166
|
+
return sorted(filter(lambda f: f.is_abstract, self._functions), key=lambda f: f.name)
|
|
167
|
+
|
|
168
|
+
@property
|
|
169
|
+
def functions(self) -> List[FunctionInfo]:
|
|
170
|
+
return self._functions
|
|
171
|
+
|
|
172
|
+
@property
|
|
173
|
+
def properties(self):
|
|
174
|
+
pass
|
|
175
|
+
|
|
176
|
+
@property
|
|
177
|
+
def instance_properties(self):
|
|
178
|
+
pass
|
|
179
|
+
|
|
180
|
+
@property
|
|
181
|
+
def class_properties(self):
|
|
182
|
+
pass
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
__all__ = [
|
|
186
|
+
"ClassInfo"
|
|
187
|
+
]
|
{danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/decorator_info.py
RENAMED
|
@@ -7,7 +7,7 @@ from .argument_info import ArgumentInfo
|
|
|
7
7
|
|
|
8
8
|
class DecoratorInfo:
|
|
9
9
|
DECORATOR_INFO_REGEX: re.Pattern = re.compile(
|
|
10
|
-
r"^@?(?P<name>\w[\w\d]*)(?:\((?P<arguments>.*)\))
|
|
10
|
+
r"^@?(?P<name>\w[\w\d]*)(?:\((?P<arguments>.*)\))?$")
|
|
11
11
|
|
|
12
12
|
def __init__(self, name: str, arguments: List[ArgumentInfo]):
|
|
13
13
|
self._name = name
|