orionis 0.210.0__tar.gz → 0.211.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {orionis-0.210.0/orionis.egg-info → orionis-0.211.0}/PKG-INFO +1 -1
- {orionis-0.210.0 → orionis-0.211.0}/orionis/framework.py +1 -1
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/functions.py +47 -19
- orionis-0.211.0/orionis/luminate/support/inspection/reflection.py +221 -0
- orionis-0.211.0/orionis/luminate/support/inspection/reflexion_concrete.py +276 -0
- {orionis-0.210.0 → orionis-0.211.0/orionis.egg-info}/PKG-INFO +1 -1
- {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/SOURCES.txt +2 -0
- orionis-0.211.0/tests/support/inspection/fakes/fake_reflection_concrete.py +44 -0
- orionis-0.211.0/tests/support/inspection/test_reflection_concrete.py +139 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/test_reflection_instance.py +1 -1
- {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/test_reflection_instance_with_abstract.py +1 -1
- orionis-0.210.0/orionis/luminate/support/inspection/reflection.py +0 -649
- orionis-0.210.0/orionis/luminate/support/inspection/reflexion_concrete.py +0 -24
- {orionis-0.210.0 → orionis-0.211.0}/LICENCE +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/MANIFEST.in +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/README.md +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/console.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/contracts/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/contracts/manager.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/contracts/output.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/contracts/setup.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/manager.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/output.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/setup.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/application.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/app.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/auth.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/cache.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/cors.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/database.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/filesystems.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/logging.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/mail.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/queue.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/session.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/base/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/base/command.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/command_filter.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/help.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/version.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/cli-orionis-value-error.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/cli_runtime_error.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/cli_schedule_exception.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/kernel.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/console.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/executor.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/progress_bar.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/styles.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/parser.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/container.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/container_integrity.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/exception.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/lifetimes.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/resolve.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/application.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/config/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/config/config.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/base/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/base/command.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/command_filter.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/kernel.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/output/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/output/console.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/output/executor.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/output/progress_bar.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/parser.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/task_manager.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/container/container.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/container/container_integrity.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/commands/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/commands/commands_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/commands/scheduler_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/config/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/config/config_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/environment/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/environment/environment_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/files/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/files/path_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/log/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/log/log_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/tests/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/tests/tests_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/bootstraper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/config/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/config/config_bootstrapper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/console/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/console/command_bootstrapper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/environment/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/environment/environment_bootstrapper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/providers/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/providers/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/providers/service_provider.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/commands/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/commands/reactor_commands_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/commands/schedule_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/config/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/config/config_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/environment/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/environment/environment_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/files/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/files/path_resolver_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/log/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/log/log_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/support/exception_parse.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/support/reflection.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/support/std.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/app_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/commands/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/commands/commands_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/commands/scheduler_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/config/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/config/config_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/environment/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/environment/environment_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/files/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/files/path_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/log/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/log/log_facade.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/config/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/config/config_bootstrapper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/console/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/console/command_bootstrapper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/environment/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/environment/environment_bootstrapper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/exceptions/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/exceptions/exception_bootstrapper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/exceptions/exception_providers.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/providers/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/providers/service_providers_bootstrapper.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/patterns/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/patterns/singleton.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/commands/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/commands/reactor_commands_service_provider.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/commands/scheduler_provider.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/config/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/config/config_service_provider.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/environment/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/environment/environment__service_provider.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/files/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/files/paths_provider.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/log/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/log/log_service_provider.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/service_provider.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/commands/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/commands/reactor_commands_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/commands/scheduler_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/config/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/config/config_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/environment/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/environment/environment_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/files/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/files/path_resolver_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/log/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/log/log_service.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/asyn_run.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/dot_dict.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/exception_parse.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/container_integrity.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_abstract.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_concrete_with_abstract.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_instance.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_instance_with_abstract.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_module.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_module_with_classname.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/reflection.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/std.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_case.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_exception.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_result.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_status.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_std_out.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_suite.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_unit.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/static/ascii/icon.ascii +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/static/ascii/info.ascii +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/static/bg/galaxy.jpg +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/static/favicon/OrionisFrameworkFavicon.png +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework.jpg +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework.png +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework.psd +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework2.png +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework3.png +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/dependency_links.txt +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/entry_points.txt +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/requires.txt +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/top_level.txt +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/setup.cfg +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/setup.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/example/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/example/test_example.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/support/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/fakes/__init__.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/fakes/fake_reflection_abstract.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/fakes/fake_reflection_instance.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/fakes/fake_reflection_instance_with_abstract.py +0 -0
- {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/test_reflection_abstract.py +0 -0
@@ -2,7 +2,7 @@ from typing import Any, Type
|
|
2
2
|
import inspect
|
3
3
|
import importlib
|
4
4
|
|
5
|
-
def
|
5
|
+
def _is_valid_module(module_name: str) -> bool:
|
6
6
|
"""Check if a module name is valid and can be imported.
|
7
7
|
|
8
8
|
Parameters
|
@@ -21,7 +21,7 @@ def is_valid_module(module_name: str) -> bool:
|
|
21
21
|
except ImportError:
|
22
22
|
return False
|
23
23
|
|
24
|
-
def
|
24
|
+
def _ensure_valid_module(module_name: str) -> None:
|
25
25
|
"""Ensure a module name is valid and can be imported.
|
26
26
|
|
27
27
|
Parameters
|
@@ -36,10 +36,10 @@ def ensure_valid_module(module_name: str) -> None:
|
|
36
36
|
"""
|
37
37
|
if not isinstance(module_name, str):
|
38
38
|
raise TypeError(f"Module name must be a string, got {type(module_name)}")
|
39
|
-
if not
|
39
|
+
if not _is_valid_module(module_name):
|
40
40
|
raise ValueError(f"Invalid or non-importable module: {module_name}")
|
41
41
|
|
42
|
-
def
|
42
|
+
def _is_instantiable_class(cls: Type) -> bool:
|
43
43
|
"""Check if a class is concrete and can be instantiated.
|
44
44
|
|
45
45
|
Parameters
|
@@ -54,7 +54,7 @@ def is_instantiable_class(cls: Type) -> bool:
|
|
54
54
|
"""
|
55
55
|
if not isinstance(cls, type):
|
56
56
|
return False
|
57
|
-
if
|
57
|
+
if _is_abstract_class(cls):
|
58
58
|
return False
|
59
59
|
try:
|
60
60
|
# Try to create an instance to verify it's truly concrete
|
@@ -63,7 +63,33 @@ def is_instantiable_class(cls: Type) -> bool:
|
|
63
63
|
except TypeError:
|
64
64
|
return False
|
65
65
|
|
66
|
-
def
|
66
|
+
def _ensure_not_builtin_type(cls: Type) -> None:
|
67
|
+
"""Ensure a class is not a built-in or primitive type.
|
68
|
+
|
69
|
+
Parameters
|
70
|
+
----------
|
71
|
+
cls : Type
|
72
|
+
The class to check
|
73
|
+
|
74
|
+
Raises
|
75
|
+
------
|
76
|
+
TypeError
|
77
|
+
If the input is not a class
|
78
|
+
ValueError
|
79
|
+
If the class is a built-in or primitive type
|
80
|
+
"""
|
81
|
+
if not isinstance(cls, type):
|
82
|
+
raise TypeError(f"Expected a class, got {type(cls)}")
|
83
|
+
|
84
|
+
builtin_types = {
|
85
|
+
int, float, str, bool, bytes, type(None), complex,
|
86
|
+
list, tuple, dict, set, frozenset
|
87
|
+
}
|
88
|
+
|
89
|
+
if cls in builtin_types:
|
90
|
+
raise ValueError(f"Class '{cls.__name__}' is a built-in or primitive type and cannot be used.")
|
91
|
+
|
92
|
+
def _ensure_instantiable_class(cls: Type) -> None:
|
67
93
|
"""Ensure a class is concrete and can be instantiated.
|
68
94
|
|
69
95
|
Parameters
|
@@ -78,16 +104,18 @@ def ensure_instantiable_class(cls: Type) -> None:
|
|
78
104
|
ValueError
|
79
105
|
If the class is abstract or cannot be instantiated
|
80
106
|
"""
|
107
|
+
if _ensure_not_builtin_type(cls):
|
108
|
+
raise TypeError(f"Invalid class: {cls!r}")
|
81
109
|
if not isinstance(cls, type):
|
82
110
|
raise TypeError(f"Expected a class, got {type(cls)}")
|
83
|
-
if
|
111
|
+
if _is_abstract_class(cls):
|
84
112
|
raise ValueError(f"Class '{cls.__name__}' is abstract")
|
85
113
|
try:
|
86
114
|
cls()
|
87
115
|
except TypeError as e:
|
88
116
|
raise ValueError(f"Class '{cls.__name__}' cannot be instantiated: {str(e)}")
|
89
117
|
|
90
|
-
def
|
118
|
+
def _is_valid_class_name(module_name: str, class_name: str) -> bool:
|
91
119
|
"""Check if a class exists in a given module.
|
92
120
|
|
93
121
|
Parameters
|
@@ -108,7 +136,7 @@ def is_valid_class_name(module_name: str, class_name: str) -> bool:
|
|
108
136
|
except ImportError:
|
109
137
|
return False
|
110
138
|
|
111
|
-
def
|
139
|
+
def _ensure_valid_class_name(module_name: str, class_name: str) -> None:
|
112
140
|
"""Ensure a class exists in a given module.
|
113
141
|
|
114
142
|
Parameters
|
@@ -123,10 +151,10 @@ def ensure_valid_class_name(module_name: str, class_name: str) -> None:
|
|
123
151
|
ValueError
|
124
152
|
If the class doesn't exist in the module
|
125
153
|
"""
|
126
|
-
if not
|
154
|
+
if not _is_valid_class_name(module_name, class_name):
|
127
155
|
raise ValueError(f"Class '{class_name}' not found in module '{module_name}'")
|
128
156
|
|
129
|
-
def
|
157
|
+
def _is_user_defined_class_instance(instance: Any) -> bool:
|
130
158
|
"""Check if an object is an instance of a user-defined class.
|
131
159
|
|
132
160
|
Parameters
|
@@ -141,7 +169,7 @@ def is_user_defined_class_instance(instance: Any) -> bool:
|
|
141
169
|
"""
|
142
170
|
return isinstance(instance, object) and type(instance).__module__ not in {'builtins', 'abc', '__main__'}
|
143
171
|
|
144
|
-
def
|
172
|
+
def _ensure_user_defined_class_instance(instance: Any) -> None:
|
145
173
|
"""Ensure an object is an instance of a user-defined class.
|
146
174
|
|
147
175
|
Parameters
|
@@ -164,7 +192,7 @@ def ensure_user_defined_class_instance(instance: Any) -> None:
|
|
164
192
|
if module == '__main__':
|
165
193
|
raise ValueError("Instance originates from '__main__', origin indeterminate.")
|
166
194
|
|
167
|
-
def
|
195
|
+
def _is_abstract_class(cls: Type) -> bool:
|
168
196
|
"""Check if a class is abstract.
|
169
197
|
|
170
198
|
Parameters
|
@@ -179,7 +207,7 @@ def is_abstract_class(cls: Type) -> bool:
|
|
179
207
|
"""
|
180
208
|
return isinstance(cls, type) and bool(getattr(cls, '__abstractmethods__', False))
|
181
209
|
|
182
|
-
def
|
210
|
+
def _ensure_abstract_class(cls: Type) -> None:
|
183
211
|
"""Ensure a class is abstract.
|
184
212
|
|
185
213
|
Parameters
|
@@ -196,10 +224,10 @@ def ensure_abstract_class(cls: Type) -> None:
|
|
196
224
|
"""
|
197
225
|
if not isinstance(cls, type):
|
198
226
|
raise TypeError(f"Invalid class: {cls!r}")
|
199
|
-
if not
|
227
|
+
if not _is_abstract_class(cls):
|
200
228
|
raise ValueError(f"Class '{cls.__name__}' is not abstract.")
|
201
229
|
|
202
|
-
def
|
230
|
+
def _is_concrete_class(cls: Type) -> bool:
|
203
231
|
"""Check if a class is concrete.
|
204
232
|
|
205
233
|
Parameters
|
@@ -212,9 +240,9 @@ def is_concrete_class(cls: Type) -> bool:
|
|
212
240
|
bool
|
213
241
|
True if the class is concrete, False otherwise
|
214
242
|
"""
|
215
|
-
return isinstance(cls, type) and not
|
243
|
+
return isinstance(cls, type) and not _is_abstract_class(cls)
|
216
244
|
|
217
|
-
def
|
245
|
+
def _ensure_concrete_class(cls: Type) -> None:
|
218
246
|
"""Ensure a class is concrete.
|
219
247
|
|
220
248
|
Parameters
|
@@ -231,5 +259,5 @@ def ensure_concrete_class(cls: Type) -> None:
|
|
231
259
|
"""
|
232
260
|
if not isinstance(cls, type):
|
233
261
|
raise TypeError(f"Invalid class: {cls!r}")
|
234
|
-
if not
|
262
|
+
if not _is_concrete_class(cls):
|
235
263
|
raise ValueError(f"Class '{cls.__name__}' is not concrete.")
|
@@ -0,0 +1,221 @@
|
|
1
|
+
import abc
|
2
|
+
from typing import Any, Type, TypeVar
|
3
|
+
from orionis.luminate.support.inspection.functions import (
|
4
|
+
_ensure_abstract_class,
|
5
|
+
_ensure_instantiable_class,
|
6
|
+
_ensure_user_defined_class_instance,
|
7
|
+
_ensure_valid_class_name,
|
8
|
+
_ensure_valid_module,
|
9
|
+
)
|
10
|
+
from orionis.luminate.support.inspection.reflexion_abstract import ReflexionAbstract
|
11
|
+
from orionis.luminate.support.inspection.reflexion_concrete import ReflexionConcrete
|
12
|
+
from orionis.luminate.support.inspection.reflexion_concrete_with_abstract import ReflexionConcreteWithAbstract
|
13
|
+
from orionis.luminate.support.inspection.reflexion_instance import ReflexionInstance
|
14
|
+
from orionis.luminate.support.inspection.reflexion_instance_with_abstract import ReflexionInstanceWithAbstract
|
15
|
+
from orionis.luminate.support.inspection.reflexion_module import ReflexionModule
|
16
|
+
from orionis.luminate.support.inspection.reflexion_module_with_classname import ReflexionModuleWithClassName
|
17
|
+
|
18
|
+
T = TypeVar('T')
|
19
|
+
ABC = TypeVar('ABC', bound=abc.ABC)
|
20
|
+
|
21
|
+
class Reflection:
|
22
|
+
"""A static class providing factory methods for creating reflection objects.
|
23
|
+
|
24
|
+
This class provides methods to create various types of reflection objects
|
25
|
+
that encapsulate different aspects of Python's reflection capabilities.
|
26
|
+
Each method validates its inputs before creating the appropriate reflection object.
|
27
|
+
|
28
|
+
Methods
|
29
|
+
-------
|
30
|
+
instance(instance: Any) -> ReflexionInstance
|
31
|
+
Creates a reflection object for a class instance
|
32
|
+
instanceWithAbstract(instance: Any, abstract: Type[ABC]) -> ReflexionInstanceWithAbstract
|
33
|
+
Creates a reflection object for a class instance with its abstract parent
|
34
|
+
abstract(abstract: Type[ABC]) -> ReflexionAbstract
|
35
|
+
Creates a reflection object for an abstract class
|
36
|
+
concrete(concrete: Type[T]) -> ReflexionConcrete
|
37
|
+
Creates a reflection object for a concrete class
|
38
|
+
concreteWithAbstract(concrete: Type[T], abstract: Type[ABC]) -> ReflexionConcreteWithAbstract
|
39
|
+
Creates a reflection object for a concrete class with its abstract parent
|
40
|
+
module(module: str) -> ReflexionModule
|
41
|
+
Creates a reflection object for a module
|
42
|
+
moduleWithClassName(module: str, class_name: str) -> ReflexionModuleWithClassName
|
43
|
+
Creates a reflection object for a module with a specific class name
|
44
|
+
"""
|
45
|
+
|
46
|
+
@staticmethod
|
47
|
+
def instance(instance: Any) -> 'ReflexionInstance':
|
48
|
+
"""Create a reflection object for a class instance.
|
49
|
+
|
50
|
+
Parameters
|
51
|
+
----------
|
52
|
+
instance : Any
|
53
|
+
The instance to reflect upon
|
54
|
+
|
55
|
+
Returns
|
56
|
+
-------
|
57
|
+
ReflexionInstance
|
58
|
+
A reflection object encapsulating the instance
|
59
|
+
|
60
|
+
Raises
|
61
|
+
------
|
62
|
+
TypeError
|
63
|
+
If the input is not an object instance
|
64
|
+
ValueError
|
65
|
+
If the instance is from builtins, abc, or __main__
|
66
|
+
"""
|
67
|
+
_ensure_user_defined_class_instance(instance)
|
68
|
+
return ReflexionInstance(instance)
|
69
|
+
|
70
|
+
@staticmethod
|
71
|
+
def instanceWithAbstract(instance: Any, abstract: Type[ABC]) -> 'ReflexionInstanceWithAbstract':
|
72
|
+
"""Create a reflection object for a class instance with its abstract parent.
|
73
|
+
|
74
|
+
Parameters
|
75
|
+
----------
|
76
|
+
instance : Any
|
77
|
+
The instance to reflect upon
|
78
|
+
abstract : Type[ABC]
|
79
|
+
The abstract parent class
|
80
|
+
|
81
|
+
Returns
|
82
|
+
-------
|
83
|
+
ReflexionInstanceWithAbstract
|
84
|
+
A reflection object encapsulating the instance and its abstract parent
|
85
|
+
|
86
|
+
Raises
|
87
|
+
------
|
88
|
+
TypeError
|
89
|
+
If the instance is not an object or abstract is not a class
|
90
|
+
ValueError
|
91
|
+
If the instance is invalid or abstract is not actually abstract
|
92
|
+
"""
|
93
|
+
_ensure_user_defined_class_instance(instance)
|
94
|
+
_ensure_abstract_class(abstract)
|
95
|
+
return ReflexionInstanceWithAbstract(instance, abstract)
|
96
|
+
|
97
|
+
@staticmethod
|
98
|
+
def abstract(abstract: Type[ABC]) -> 'ReflexionAbstract':
|
99
|
+
"""Create a reflection object for an abstract class.
|
100
|
+
|
101
|
+
Parameters
|
102
|
+
----------
|
103
|
+
abstract : Type[ABC]
|
104
|
+
The abstract class to reflect upon
|
105
|
+
|
106
|
+
Returns
|
107
|
+
-------
|
108
|
+
ReflexionAbstract
|
109
|
+
A reflection object encapsulating the abstract class
|
110
|
+
|
111
|
+
Raises
|
112
|
+
------
|
113
|
+
TypeError
|
114
|
+
If the input is not a class
|
115
|
+
ValueError
|
116
|
+
If the class is not abstract
|
117
|
+
"""
|
118
|
+
_ensure_abstract_class(abstract)
|
119
|
+
return ReflexionAbstract(abstract)
|
120
|
+
|
121
|
+
@staticmethod
|
122
|
+
def concrete(concrete: Type[T]) -> 'ReflexionConcrete':
|
123
|
+
"""Create a reflection object for a concrete class.
|
124
|
+
|
125
|
+
Parameters
|
126
|
+
----------
|
127
|
+
concrete : Type[T]
|
128
|
+
The concrete class to reflect upon
|
129
|
+
|
130
|
+
Returns
|
131
|
+
-------
|
132
|
+
ReflexionConcrete
|
133
|
+
A reflection object encapsulating the concrete class
|
134
|
+
|
135
|
+
Raises
|
136
|
+
------
|
137
|
+
TypeError
|
138
|
+
If the input is not a class
|
139
|
+
ValueError
|
140
|
+
If the class is abstract or cannot be instantiated
|
141
|
+
"""
|
142
|
+
_ensure_instantiable_class(concrete)
|
143
|
+
return ReflexionConcrete(concrete)
|
144
|
+
|
145
|
+
@staticmethod
|
146
|
+
def concreteWithAbstract(concrete: Type[T], abstract: Type[ABC]) -> 'ReflexionConcreteWithAbstract':
|
147
|
+
"""Create a reflection object for a concrete class with its abstract parent.
|
148
|
+
|
149
|
+
Parameters
|
150
|
+
----------
|
151
|
+
concrete : Type[T]
|
152
|
+
The concrete class to reflect upon
|
153
|
+
abstract : Type[ABC]
|
154
|
+
The abstract parent class
|
155
|
+
|
156
|
+
Returns
|
157
|
+
-------
|
158
|
+
ReflexionConcreteWithAbstract
|
159
|
+
A reflection object encapsulating the concrete class and its abstract parent
|
160
|
+
|
161
|
+
Raises
|
162
|
+
------
|
163
|
+
TypeError
|
164
|
+
If either input is not a class
|
165
|
+
ValueError
|
166
|
+
If concrete is not instantiable or abstract is not actually abstract
|
167
|
+
"""
|
168
|
+
_ensure_instantiable_class(concrete)
|
169
|
+
_ensure_abstract_class(abstract)
|
170
|
+
return ReflexionConcreteWithAbstract(concrete, abstract)
|
171
|
+
|
172
|
+
@staticmethod
|
173
|
+
def module(module: str) -> 'ReflexionModule':
|
174
|
+
"""Create a reflection object for a module.
|
175
|
+
|
176
|
+
Parameters
|
177
|
+
----------
|
178
|
+
module : str
|
179
|
+
The module name to reflect upon
|
180
|
+
|
181
|
+
Returns
|
182
|
+
-------
|
183
|
+
ReflexionModule
|
184
|
+
A reflection object encapsulating the module
|
185
|
+
|
186
|
+
Raises
|
187
|
+
------
|
188
|
+
TypeError
|
189
|
+
If the input is not a string
|
190
|
+
ValueError
|
191
|
+
If the module cannot be imported
|
192
|
+
"""
|
193
|
+
_ensure_valid_module(module)
|
194
|
+
return ReflexionModule(module)
|
195
|
+
|
196
|
+
@staticmethod
|
197
|
+
def moduleWithClassName(module: str, class_name: str) -> 'ReflexionModuleWithClassName':
|
198
|
+
"""Create a reflection object for a module with a specific class name.
|
199
|
+
|
200
|
+
Parameters
|
201
|
+
----------
|
202
|
+
module : str
|
203
|
+
The module name to reflect upon
|
204
|
+
class_name : str
|
205
|
+
The class name to look for in the module
|
206
|
+
|
207
|
+
Returns
|
208
|
+
-------
|
209
|
+
ReflexionModuleWithClassName
|
210
|
+
A reflection object encapsulating the module and class name
|
211
|
+
|
212
|
+
Raises
|
213
|
+
------
|
214
|
+
TypeError
|
215
|
+
If either input is not a string
|
216
|
+
ValueError
|
217
|
+
If the module cannot be imported or the class doesn't exist in it
|
218
|
+
"""
|
219
|
+
_ensure_valid_module(module)
|
220
|
+
_ensure_valid_class_name(module, class_name)
|
221
|
+
return ReflexionModuleWithClassName(module, class_name)
|
@@ -0,0 +1,276 @@
|
|
1
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, TypeVar
|
2
|
+
import inspect
|
3
|
+
|
4
|
+
T = TypeVar('T')
|
5
|
+
|
6
|
+
class ReflexionConcrete:
|
7
|
+
"""A reflection object encapsulating a concrete class.
|
8
|
+
|
9
|
+
Parameters
|
10
|
+
----------
|
11
|
+
concrete : Type[T]
|
12
|
+
The concrete class being reflected upon
|
13
|
+
|
14
|
+
Attributes
|
15
|
+
----------
|
16
|
+
_concrete : Type[T]
|
17
|
+
The encapsulated concrete class
|
18
|
+
"""
|
19
|
+
|
20
|
+
def __init__(self, concrete: Type[T]) -> None:
|
21
|
+
"""Initialize with the concrete class."""
|
22
|
+
self._concrete = concrete
|
23
|
+
|
24
|
+
def getClassName(self) -> str:
|
25
|
+
"""Get the name of the concrete class.
|
26
|
+
|
27
|
+
Returns
|
28
|
+
-------
|
29
|
+
str
|
30
|
+
The name of the class
|
31
|
+
"""
|
32
|
+
return self._concrete.__name__
|
33
|
+
|
34
|
+
def getClass(self) -> Type:
|
35
|
+
"""Get the class of the instance.
|
36
|
+
|
37
|
+
Returns
|
38
|
+
-------
|
39
|
+
Type
|
40
|
+
The class object of the instance
|
41
|
+
|
42
|
+
Examples
|
43
|
+
--------
|
44
|
+
>>> reflex.getClass() is SomeClass
|
45
|
+
True
|
46
|
+
"""
|
47
|
+
return self._concrete
|
48
|
+
|
49
|
+
def getModuleName(self) -> str:
|
50
|
+
"""Get the name of the module where the class is defined.
|
51
|
+
|
52
|
+
Returns
|
53
|
+
-------
|
54
|
+
str
|
55
|
+
The module name
|
56
|
+
"""
|
57
|
+
return self._concrete.__module__
|
58
|
+
|
59
|
+
def getAttributes(self) -> Dict[str, Any]:
|
60
|
+
"""Get all class-level attributes.
|
61
|
+
|
62
|
+
Returns
|
63
|
+
-------
|
64
|
+
Dict[str, Any]
|
65
|
+
Dictionary of attribute names and their values
|
66
|
+
"""
|
67
|
+
return {
|
68
|
+
k: v for k, v in vars(self._concrete).items()
|
69
|
+
if not callable(v) and not isinstance(v, staticmethod) and not isinstance(v, classmethod) and not k.startswith('_') and not isinstance(v, property)
|
70
|
+
}
|
71
|
+
|
72
|
+
def getMethods(self) -> List[str]:
|
73
|
+
"""Get all method names of the class.
|
74
|
+
|
75
|
+
Returns
|
76
|
+
-------
|
77
|
+
List[str]
|
78
|
+
List of method names
|
79
|
+
"""
|
80
|
+
return [
|
81
|
+
name for name, member in inspect.getmembers(self._concrete, predicate=inspect.isfunction)
|
82
|
+
if not name.startswith('_')
|
83
|
+
]
|
84
|
+
|
85
|
+
def getStaticMethods(self) -> List[str]:
|
86
|
+
"""Get all static method names of the class.
|
87
|
+
|
88
|
+
Returns
|
89
|
+
-------
|
90
|
+
List[str]
|
91
|
+
List of static method names, excluding private methods
|
92
|
+
"""
|
93
|
+
return [
|
94
|
+
name for name in dir(self._concrete)
|
95
|
+
if not name.startswith('_') and isinstance(inspect.getattr_static(self._concrete, name), staticmethod)
|
96
|
+
]
|
97
|
+
|
98
|
+
def getPropertyNames(self) -> List[str]:
|
99
|
+
"""Get all property names of the class.
|
100
|
+
|
101
|
+
Returns
|
102
|
+
-------
|
103
|
+
List[str]
|
104
|
+
List of property names
|
105
|
+
"""
|
106
|
+
return [
|
107
|
+
name for name, val in vars(self._concrete).items()
|
108
|
+
if isinstance(val, property)
|
109
|
+
]
|
110
|
+
|
111
|
+
def getMethodSignature(self, methodName: str) -> inspect.Signature:
|
112
|
+
"""Get the signature of a class method.
|
113
|
+
|
114
|
+
Parameters
|
115
|
+
----------
|
116
|
+
methodName : str
|
117
|
+
Name of the method
|
118
|
+
|
119
|
+
Returns
|
120
|
+
-------
|
121
|
+
inspect.Signature
|
122
|
+
The method signature
|
123
|
+
|
124
|
+
Raises
|
125
|
+
------
|
126
|
+
AttributeError
|
127
|
+
If the method doesn't exist
|
128
|
+
"""
|
129
|
+
method = getattr(self._concrete, methodName)
|
130
|
+
if callable(method):
|
131
|
+
return inspect.signature(method)
|
132
|
+
raise AttributeError(f"{methodName} is not a valid method.")
|
133
|
+
|
134
|
+
def getPropertySignature(self, propertyName: str) -> inspect.Signature:
|
135
|
+
"""Get the signature of a property getter.
|
136
|
+
|
137
|
+
Parameters
|
138
|
+
----------
|
139
|
+
propertyName : str
|
140
|
+
Name of the property
|
141
|
+
|
142
|
+
Returns
|
143
|
+
-------
|
144
|
+
inspect.Signature
|
145
|
+
The property's getter method signature
|
146
|
+
|
147
|
+
Raises
|
148
|
+
------
|
149
|
+
AttributeError
|
150
|
+
If the property doesn't exist or is not a property
|
151
|
+
"""
|
152
|
+
attr = getattr(self._concrete, propertyName, None)
|
153
|
+
if isinstance(attr, property) and attr.fget is not None:
|
154
|
+
return inspect.signature(attr.fget)
|
155
|
+
raise AttributeError(f"{propertyName} is not a property or doesn't have a getter.")
|
156
|
+
|
157
|
+
def getDocstring(self) -> Optional[str]:
|
158
|
+
"""Get the docstring of the class.
|
159
|
+
|
160
|
+
Returns
|
161
|
+
-------
|
162
|
+
Optional[str]
|
163
|
+
The class docstring, or None if not available
|
164
|
+
"""
|
165
|
+
return self._concrete.__doc__
|
166
|
+
|
167
|
+
def getBaseClasses(self) -> Tuple[Type, ...]:
|
168
|
+
"""Get the base classes of the class.
|
169
|
+
|
170
|
+
Returns
|
171
|
+
-------
|
172
|
+
Tuple[Type, ...]
|
173
|
+
Tuple of base classes
|
174
|
+
"""
|
175
|
+
return self._concrete.__bases__
|
176
|
+
|
177
|
+
def isSubclassOf(self, cls: Type) -> bool:
|
178
|
+
"""Check if the concrete class is a subclass of another.
|
179
|
+
|
180
|
+
Parameters
|
181
|
+
----------
|
182
|
+
cls : Type
|
183
|
+
The parent class to check against
|
184
|
+
|
185
|
+
Returns
|
186
|
+
-------
|
187
|
+
bool
|
188
|
+
True if the concrete class is a subclass of the given class
|
189
|
+
"""
|
190
|
+
return issubclass(self._concrete, cls)
|
191
|
+
|
192
|
+
def getSourceCode(self) -> Optional[str]:
|
193
|
+
"""Get the source code of the class.
|
194
|
+
|
195
|
+
Returns
|
196
|
+
-------
|
197
|
+
Optional[str]
|
198
|
+
The source code if available, None otherwise
|
199
|
+
"""
|
200
|
+
try:
|
201
|
+
return inspect.getsource(self._concrete)
|
202
|
+
except (TypeError, OSError):
|
203
|
+
return None
|
204
|
+
|
205
|
+
def getFileLocation(self) -> Optional[str]:
|
206
|
+
"""Get the file location where the class is defined.
|
207
|
+
|
208
|
+
Returns
|
209
|
+
-------
|
210
|
+
Optional[str]
|
211
|
+
The file path if available, None otherwise
|
212
|
+
"""
|
213
|
+
try:
|
214
|
+
return inspect.getfile(self._concrete)
|
215
|
+
except (TypeError, OSError):
|
216
|
+
return None
|
217
|
+
|
218
|
+
def getAnnotations(self) -> Dict[str, Any]:
|
219
|
+
"""Get type annotations of the class.
|
220
|
+
|
221
|
+
Returns
|
222
|
+
-------
|
223
|
+
Dict[str, Any]
|
224
|
+
Dictionary of attribute names and their type annotations
|
225
|
+
"""
|
226
|
+
return getattr(self._concrete, '__annotations__', {})
|
227
|
+
|
228
|
+
def hasAttribute(self, name: str) -> bool:
|
229
|
+
"""Check if the class has a specific attribute.
|
230
|
+
|
231
|
+
Parameters
|
232
|
+
----------
|
233
|
+
name : str
|
234
|
+
The attribute name to check
|
235
|
+
|
236
|
+
Returns
|
237
|
+
-------
|
238
|
+
bool
|
239
|
+
True if the attribute exists
|
240
|
+
"""
|
241
|
+
return hasattr(self._concrete, name)
|
242
|
+
|
243
|
+
def getAttribute(self, name: str) -> Any:
|
244
|
+
"""Get a class attribute by name.
|
245
|
+
|
246
|
+
Parameters
|
247
|
+
----------
|
248
|
+
name : str
|
249
|
+
The attribute name
|
250
|
+
|
251
|
+
Returns
|
252
|
+
-------
|
253
|
+
Any
|
254
|
+
The attribute value
|
255
|
+
|
256
|
+
Raises
|
257
|
+
------
|
258
|
+
AttributeError
|
259
|
+
If the attribute doesn't exist
|
260
|
+
"""
|
261
|
+
return getattr(self._concrete, name)
|
262
|
+
|
263
|
+
def getCallableMembers(self) -> Dict[str, Callable]:
|
264
|
+
"""Get all callable members (functions/methods) of the class.
|
265
|
+
|
266
|
+
Returns
|
267
|
+
-------
|
268
|
+
Dict[str, Callable]
|
269
|
+
Dictionary of method names and their callable objects
|
270
|
+
"""
|
271
|
+
return {
|
272
|
+
name: member for name, member in inspect.getmembers(
|
273
|
+
self._concrete,
|
274
|
+
callable
|
275
|
+
) if not name.startswith('__')
|
276
|
+
}
|