holado 0.13.22__py3-none-any.whl
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.
- holado/__init__.py +358 -0
- holado/common/__init__.py +25 -0
- holado/common/context/__init__.py +25 -0
- holado/common/context/context.py +248 -0
- holado/common/context/service_manager.py +262 -0
- holado/common/context/session_context.py +516 -0
- holado/common/handlers/__init__.py +19 -0
- holado/common/handlers/enums.py +41 -0
- holado/common/handlers/object.py +175 -0
- holado/common/handlers/undefined.py +55 -0
- holado/common/tools/__init__.py +19 -0
- holado/common/tools/gc_manager.py +155 -0
- holado/holado_config.py +45 -0
- holado-0.13.22.dist-info/METADATA +194 -0
- holado-0.13.22.dist-info/RECORD +698 -0
- holado-0.13.22.dist-info/WHEEL +4 -0
- holado-0.13.22.dist-info/licenses/LICENSE +21 -0
- holado_ais/__init__.py +33 -0
- holado_ais/ais/MaritimeIdentificationDigits.csv +295 -0
- holado_ais/ais/ais_manager.py +151 -0
- holado_ais/ais/ais_messages.py +356 -0
- holado_ais/ais/ais_payload.py +35 -0
- holado_ais/ais/enums.py +37 -0
- holado_ais/ais/patch_pyais.py +1174 -0
- holado_ais/tests/behave/steps/__init__.py +17 -0
- holado_ais/tests/behave/steps/ais/__init__.py +0 -0
- holado_ais/tests/behave/steps/ais/ais_manager_steps.py +50 -0
- holado_ais/tests/behave/steps/ais/ais_messages_steps.py +237 -0
- holado_binary/__init__.py +17 -0
- holado_binary/ipc/binary.py +125 -0
- holado_binary/ipc/bit_series.py +307 -0
- holado_binary/tests/behave/steps/__init__.py +17 -0
- holado_binary/tests/behave/steps/ipc/binary_steps.py +57 -0
- holado_binary/tests/behave/steps/ipc/bit_series_steps.py +132 -0
- holado_context/__init__.py +16 -0
- holado_context/tests/behave/steps/__init__.py +16 -0
- holado_context/tests/behave/steps/private/__init__.py +16 -0
- holado_context/tests/behave/steps/private/common/context_steps.py +68 -0
- holado_core/__init__.py +32 -0
- holado_core/common/__init__.py +0 -0
- holado_core/common/actors/actions.py +97 -0
- holado_core/common/actors/actor.py +226 -0
- holado_core/common/actors/element_actor.py +32 -0
- holado_core/common/actors/find_actor.py +106 -0
- holado_core/common/actors/tree_actor.py +32 -0
- holado_core/common/actors/verify_actions.py +69 -0
- holado_core/common/block/base.py +122 -0
- holado_core/common/block/block_manager.py +173 -0
- holado_core/common/block/block_method.py +46 -0
- holado_core/common/block/block_steps.py +37 -0
- holado_core/common/block/function.py +42 -0
- holado_core/common/block/scope_function.py +28 -0
- holado_core/common/block/scope_manager.py +238 -0
- holado_core/common/block/scope_steps.py +141 -0
- holado_core/common/criterias/and_criteria.py +61 -0
- holado_core/common/criterias/criteria.py +78 -0
- holado_core/common/criterias/or_criteria.py +64 -0
- holado_core/common/criterias/tools/criteria_context.py +20 -0
- holado_core/common/criterias/tools/criteria_parameters.py +18 -0
- holado_core/common/drivers/driver.py +153 -0
- holado_core/common/drivers/element_driver.py +30 -0
- holado_core/common/drivers/element_internal_api.py +239 -0
- holado_core/common/drivers/internal_api.py +40 -0
- holado_core/common/drivers/tree_driver.py +30 -0
- holado_core/common/drivers/tree_internal_api.py +176 -0
- holado_core/common/exceptions/__init__.py +0 -0
- holado_core/common/exceptions/element_exception.py +28 -0
- holado_core/common/exceptions/exceptions.py +24 -0
- holado_core/common/exceptions/functional_exception.py +21 -0
- holado_core/common/exceptions/holado_exception.py +25 -0
- holado_core/common/exceptions/technical_exception.py +27 -0
- holado_core/common/exceptions/timeout_exception.py +20 -0
- holado_core/common/exceptions/verify_exception.py +20 -0
- holado_core/common/finders/after_in_tree_finder.py +87 -0
- holado_core/common/finders/element_finder.py +60 -0
- holado_core/common/finders/else_finder.py +105 -0
- holado_core/common/finders/finder.py +478 -0
- holado_core/common/finders/or_finder.py +98 -0
- holado_core/common/finders/then_finder.py +157 -0
- holado_core/common/finders/tools/enums.py +30 -0
- holado_core/common/finders/tools/find_builder.py +118 -0
- holado_core/common/finders/tools/find_context.py +405 -0
- holado_core/common/finders/tools/find_info.py +27 -0
- holado_core/common/finders/tools/find_parameters.py +240 -0
- holado_core/common/finders/tools/find_updater.py +95 -0
- holado_core/common/finders/tools/finder_info.py +26 -0
- holado_core/common/finders/tree_finder.py +146 -0
- holado_core/common/handlers/__init__.py +0 -0
- holado_core/common/handlers/abstracts/base_redo.py +702 -0
- holado_core/common/handlers/abstracts/get_or_create.py +120 -0
- holado_core/common/handlers/element_holder.py +122 -0
- holado_core/common/handlers/enums.py +23 -0
- holado_core/common/handlers/exceptions/redo_exceptions.py +28 -0
- holado_core/common/handlers/features/resource_by_name.py +187 -0
- holado_core/common/handlers/features/resource_by_type.py +174 -0
- holado_core/common/handlers/redo.py +119 -0
- holado_core/common/handlers/wait.py +127 -0
- holado_core/common/inspectors/element_inspector.py +57 -0
- holado_core/common/inspectors/inspector.py +221 -0
- holado_core/common/inspectors/tools/inspect_builder.py +169 -0
- holado_core/common/inspectors/tools/inspect_context.py +69 -0
- holado_core/common/inspectors/tools/inspect_parameters.py +181 -0
- holado_core/common/inspectors/tree_inspector.py +73 -0
- holado_core/common/resource/persisted_data_manager.py +113 -0
- holado_core/common/resource/persisted_method_to_call_manager.py +263 -0
- holado_core/common/resource/resource_manager.py +126 -0
- holado_core/common/resource/table_data_manager.py +110 -0
- holado_core/common/tables/__init__.py +1 -0
- holado_core/common/tables/comparators/__init__.py +0 -0
- holado_core/common/tables/comparators/boolean_table_cell_comparator.py +25 -0
- holado_core/common/tables/comparators/bytes_table_cell_comparator.py +25 -0
- holado_core/common/tables/comparators/datetime_table_cell_comparator.py +24 -0
- holado_core/common/tables/comparators/float_table_cell_comparator.py +31 -0
- holado_core/common/tables/comparators/integer_table_cell_comparator.py +25 -0
- holado_core/common/tables/comparators/internal_table_cell_comparator.py +30 -0
- holado_core/common/tables/comparators/string_table_cell_comparator.py +24 -0
- holado_core/common/tables/comparators/string_table_comparator.py +29 -0
- holado_core/common/tables/comparators/string_table_row_comparator.py +29 -0
- holado_core/common/tables/comparators/table_cell_comparator.py +40 -0
- holado_core/common/tables/comparators/table_comparator.py +209 -0
- holado_core/common/tables/comparators/table_comparator_manager.py +60 -0
- holado_core/common/tables/comparators/table_row_comparator.py +116 -0
- holado_core/common/tables/comparators/table_with_header_comparator.py +68 -0
- holado_core/common/tables/converters/__init__.py +0 -0
- holado_core/common/tables/converters/table_converter.py +233 -0
- holado_core/common/tables/enums.py +23 -0
- holado_core/common/tables/table.py +261 -0
- holado_core/common/tables/table_cell.py +126 -0
- holado_core/common/tables/table_manager.py +365 -0
- holado_core/common/tables/table_row.py +169 -0
- holado_core/common/tables/table_with_header.py +242 -0
- holado_core/common/tools/__init__.py +0 -0
- holado_core/common/tools/comparators/comparator.py +151 -0
- holado_core/common/tools/comparators/object_comparator.py +21 -0
- holado_core/common/tools/converters/converter.py +118 -0
- holado_core/common/tools/path_manager.py +238 -0
- holado_core/common/tools/string_tools.py +144 -0
- holado_core/common/tools/tools.py +197 -0
- holado_core/tests/behave/steps/__init__.py +20 -0
- holado_core/tests/behave/steps/common/__init__.py +0 -0
- holado_core/tests/behave/steps/common/common_steps.py +137 -0
- holado_core/tests/behave/steps/common/config_steps.py +42 -0
- holado_core/tests/behave/steps/common/resource_steps.py +62 -0
- holado_core/tests/behave/steps/common/tables_steps.py +560 -0
- holado_core/tools/__init__.py +0 -0
- holado_core/tools/abstracts/__init__.py +0 -0
- holado_core/tools/abstracts/blocking_command_service.py +64 -0
- holado_core/tools/abstracts/service.py +48 -0
- holado_crypto/__init__.py +31 -0
- holado_crypto/crypto/crypto.py +108 -0
- holado_crypto/crypto/key.py +92 -0
- holado_crypto/crypto/tcpbin.py +105 -0
- holado_crypto/crypto/transport/__init__.py +0 -0
- holado_crypto/crypto/transport/crc.py +40 -0
- holado_crypto/tests/behave/steps/__init__.py +18 -0
- holado_crypto/tests/behave/steps/crypto_steps.py +112 -0
- holado_crypto/tests/behave/steps/key_steps.py +82 -0
- holado_crypto/tests/behave/steps/tcpbin_steps.py +79 -0
- holado_data/__init__.py +31 -0
- holado_data/data/generator/base.py +93 -0
- holado_data/data/generator/generator_manager.py +27 -0
- holado_data/data/generator/python_generator.py +30 -0
- holado_data/tests/behave/steps/__init__.py +17 -0
- holado_data/tests/behave/steps/data/generator_steps.py +91 -0
- holado_data/tests/behave/steps/tools/utils_steps.py +59 -0
- holado_db/__init__.py +32 -0
- holado_db/tests/behave/steps/__init__.py +18 -0
- holado_db/tests/behave/steps/tools/db/db_client_steps.py +134 -0
- holado_db/tests/behave/steps/tools/db/postgresql_client_steps.py +59 -0
- holado_db/tests/behave/steps/tools/db/sqlite_client_steps.py +57 -0
- holado_db/tools/db/clients/base/db_audit.py +94 -0
- holado_db/tools/db/clients/base/db_client.py +344 -0
- holado_db/tools/db/clients/postgresql/postgresql_audit.py +75 -0
- holado_db/tools/db/clients/postgresql/postgresql_client.py +84 -0
- holado_db/tools/db/clients/sqlite/sqlite_audit.py +70 -0
- holado_db/tools/db/clients/sqlite/sqlite_client.py +60 -0
- holado_db/tools/db/db_manager.py +109 -0
- holado_db/tools/db/query/base/query_builder.py +138 -0
- holado_db/tools/db/query/pypika/pypika_query_builder.py +244 -0
- holado_db/tools/db/query/query_manager.py +77 -0
- holado_django/__init__.py +31 -0
- holado_django/server/HOWTO.txt +27 -0
- holado_django/server/django_projects/rest_api/db.sqlite3 +0 -0
- holado_django/server/django_projects/rest_api/manage.py +22 -0
- holado_django/server/django_projects/rest_api/rest_api/__init__.py +0 -0
- holado_django/server/django_projects/rest_api/rest_api/application/__init__.py +0 -0
- holado_django/server/django_projects/rest_api/rest_api/application/admin.py +3 -0
- holado_django/server/django_projects/rest_api/rest_api/application/apps.py +9 -0
- holado_django/server/django_projects/rest_api/rest_api/application/migrations/__init__.py +0 -0
- holado_django/server/django_projects/rest_api/rest_api/application/models.py +3 -0
- holado_django/server/django_projects/rest_api/rest_api/application/tests.py +3 -0
- holado_django/server/django_projects/rest_api/rest_api/application/views.py +6 -0
- holado_django/server/django_projects/rest_api/rest_api/asgi.py +16 -0
- holado_django/server/django_projects/rest_api/rest_api/settings.py +130 -0
- holado_django/server/django_projects/rest_api/rest_api/urls.py +35 -0
- holado_django/server/django_projects/rest_api/rest_api/wsgi.py +16 -0
- holado_django/server/django_server.py +110 -0
- holado_django/server/grpc_django_server.py +57 -0
- holado_django/server/patch_djangogrpcframework.py +46 -0
- holado_django/tests/behave/steps/__init__.py +16 -0
- holado_django/tests/behave/steps/django_server_steps.py +83 -0
- holado_docker/__init__.py +25 -0
- holado_docker/sdk/docker/container_logs.py +447 -0
- holado_docker/sdk/docker/docker_client.py +537 -0
- holado_docker/sdk/docker/docker_service.py +71 -0
- holado_docker/tests/behave/steps/__init__.py +16 -0
- holado_docker/tests/behave/steps/sdk/docker/container_logs_steps.py +47 -0
- holado_examples/projects/server_rest/server_rest_example/initialize_holado.py +72 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/db.sqlite3 +0 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/manage.py +22 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/__init__.py +0 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/__init__.py +0 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/admin.py +3 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/apps.py +7 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/migrations/__init__.py +0 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/models.py +3 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/serializers.py +15 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/tests.py +3 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/views.py +24 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/asgi.py +16 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/settings.py +130 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/urls.py +31 -0
- holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/wsgi.py +16 -0
- holado_examples/projects/server_rest/server_rest_example/rest_server.py +37 -0
- holado_examples/scripts/script_custom_initialization.py +16 -0
- holado_examples/scripts/script_minimal_initialization.py +23 -0
- holado_examples/tests/behave/testing_solution/__main__.py +13 -0
- holado_examples/tests/behave/testing_solution/behave_environment.py +35 -0
- holado_examples/tests/behave/testing_solution/environment.py +36 -0
- holado_examples/tests/behave/testing_solution/features/Configuration/Actions/configure_system.feature +10 -0
- holado_examples/tests/behave/testing_solution/features/NonReg/example.feature +26 -0
- holado_examples/tests/behave/testing_solution/initialize_holado.py +62 -0
- holado_examples/tests/behave/testing_solution/logging.conf +102 -0
- holado_examples/tests/behave/testing_solution/requirements.txt +5 -0
- holado_examples/tests/behave/testing_solution/run_test.sh +7 -0
- holado_examples/tests/behave/testing_solution/run_test_nonreg.sh +6 -0
- holado_examples/tests/behave/testing_solution/src/common/tools/path_manager.py +40 -0
- holado_examples/tests/behave/testing_solution/src/config/config_manager.py +30 -0
- holado_examples/tests/behave/testing_solution/src/context/session_context.py +45 -0
- holado_examples/tests/behave/testing_solution/steps/config_steps.py +21 -0
- holado_examples/tests/behave/testing_solution/steps/public_steps.py +10 -0
- holado_grpc/TODO +8 -0
- holado_grpc/__init__.py +40 -0
- holado_grpc/api/rpc/TODO.txt +4 -0
- holado_grpc/api/rpc/grpc_client.py +210 -0
- holado_grpc/api/rpc/grpc_manager.py +81 -0
- holado_grpc/ipc/rpc/__init__.py +0 -0
- holado_grpc/ipc/rpc/grpc_compiler.py +45 -0
- holado_grpc/ipc/rpc/grpc_services.py +165 -0
- holado_grpc/tests/behave/steps/__init__.py +16 -0
- holado_grpc/tests/behave/steps/api/grpc_client_steps.py +173 -0
- holado_grpc/tests/behave/steps/private/__init__.py +16 -0
- holado_grpc/tests/behave/steps/private/api/grpc_steps.py +77 -0
- holado_helper/__init__.py +35 -0
- holado_helper/debug/README.txt +32 -0
- holado_helper/debug/memory/memory_profiler.py +106 -0
- holado_helper/docker/init_user.sh +24 -0
- holado_helper/docker/logging.conf +44 -0
- holado_helper/docker/run_holado_test_nonreg_in_docker.sh +120 -0
- holado_helper/docker/run_terminal_in_docker.sh +101 -0
- holado_helper/holado_module_template/__init__.py +38 -0
- holado_helper/holado_module_template/tests/behave/steps/__init__.py +16 -0
- holado_helper/holado_module_template/tests/behave/steps/private/__init__.py +16 -0
- holado_helper/initialize_holado.py +72 -0
- holado_helper/script/action.py +130 -0
- holado_helper/script/action_script.py +477 -0
- holado_helper/script/any_action_script.py +126 -0
- holado_helper/script/behave_action_script.py +99 -0
- holado_helper/script/csv_action_script.py +142 -0
- holado_helper/script/initialize_script.py +95 -0
- holado_helper/script/input_output_script.py +136 -0
- holado_helper/script/job.py +75 -0
- holado_helper/script/json_action_script.py +104 -0
- holado_helper/script/script.py +110 -0
- holado_json/__init__.py +16 -0
- holado_json/filesystem/json_file.py +94 -0
- holado_json/filesystem/stream_json_file.py +117 -0
- holado_json/ipc/json.py +146 -0
- holado_json/ipc/json_converter.py +69 -0
- holado_json/ipc/json_types.py +183 -0
- holado_json/tests/behave/steps/__init__.py +16 -0
- holado_json/tests/behave/steps/ipc/__init__.py +0 -0
- holado_json/tests/behave/steps/ipc/json_steps.py +131 -0
- holado_keycloak/__init__.py +16 -0
- holado_keycloak/tests/behave/steps/__init__.py +16 -0
- holado_keycloak/tests/behave/steps/tools/keycloak_client_steps.py +73 -0
- holado_keycloak/tools/keycloak/__init__.py +0 -0
- holado_keycloak/tools/keycloak/keycloak_client.py +90 -0
- holado_logging/__init__.py +38 -0
- holado_logging/common/logging/holado_logger.py +71 -0
- holado_logging/common/logging/log_config.py +163 -0
- holado_logging/common/logging/log_manager.py +335 -0
- holado_multitask/__init__.py +33 -0
- holado_multitask/multiprocessing/context/process_context.py +35 -0
- holado_multitask/multiprocessing/function_process.py +102 -0
- holado_multitask/multiprocessing/periodic_function_process.py +137 -0
- holado_multitask/multiprocessing/process.py +213 -0
- holado_multitask/multiprocessing/processesmanager.py +137 -0
- holado_multitask/multitasking/multitask_manager.py +464 -0
- holado_multitask/multithreading/__init__.py +0 -0
- holado_multitask/multithreading/context/thread_context.py +86 -0
- holado_multitask/multithreading/functionthreaded.py +129 -0
- holado_multitask/multithreading/loopfunctionthreaded.py +45 -0
- holado_multitask/multithreading/loopthread.py +110 -0
- holado_multitask/multithreading/periodicfunctionthreaded.py +135 -0
- holado_multitask/multithreading/reflection/inspect.py +47 -0
- holado_multitask/multithreading/reflection/sys.py +29 -0
- holado_multitask/multithreading/reflection/traceback.py +35 -0
- holado_multitask/multithreading/thread.py +203 -0
- holado_multitask/multithreading/threadsmanager.py +167 -0
- holado_multitask/multithreading/timer.py +51 -0
- holado_multitask/tests/behave/steps/__init__.py +17 -0
- holado_multitask/tests/behave/steps/multiprocessing_steps.py +138 -0
- holado_multitask/tests/behave/steps/multithreading_steps.py +129 -0
- holado_protobuf/__init__.py +61 -0
- holado_protobuf/ipc/protobuf/__init__.py +0 -0
- holado_protobuf/ipc/protobuf/abstracts/type.py +45 -0
- holado_protobuf/ipc/protobuf/protobuf_compiler.py +118 -0
- holado_protobuf/ipc/protobuf/protobuf_converter.py +153 -0
- holado_protobuf/ipc/protobuf/protobuf_messages.py +968 -0
- holado_protobuf/ipc/protobuf/protobuf_modifier.py +65 -0
- holado_protobuf/ipc/protobuf/types/__init__.py +0 -0
- holado_protobuf/ipc/protobuf/types/google/__init__.py +0 -0
- holado_protobuf/ipc/protobuf/types/google/protobuf.py +124 -0
- holado_protobuf/tests/behave/steps/__init__.py +16 -0
- holado_protobuf/tests/behave/steps/ipc/protobuf_steps.py +297 -0
- holado_python/__init__.py +36 -0
- holado_python/common/enums.py +34 -0
- holado_python/common/iterables.py +38 -0
- holado_python/common/tools/comparators/boolean_comparator.py +37 -0
- holado_python/common/tools/comparators/bytes_comparator.py +48 -0
- holado_python/common/tools/comparators/datetime_comparator.py +74 -0
- holado_python/common/tools/comparators/float_comparator.py +97 -0
- holado_python/common/tools/comparators/integer_comparator.py +37 -0
- holado_python/common/tools/comparators/string_comparator.py +99 -0
- holado_python/common/tools/comparators/type_comparator.py +31 -0
- holado_python/common/tools/datetime.py +341 -0
- holado_python/standard_library/csv.py +207 -0
- holado_python/standard_library/hashlib.py +110 -0
- holado_python/standard_library/multiprocessing.py +62 -0
- holado_python/standard_library/queue.py +79 -0
- holado_python/standard_library/socket/blocking_socket.py +219 -0
- holado_python/standard_library/socket/echo_server.py +29 -0
- holado_python/standard_library/socket/message_socket.py +152 -0
- holado_python/standard_library/socket/non_blocking_socket.py +172 -0
- holado_python/standard_library/socket/socket.py +411 -0
- holado_python/standard_library/ssl/resources/certificates/NOTES.txt +5 -0
- holado_python/standard_library/ssl/resources/certificates/localhost.crt +19 -0
- holado_python/standard_library/ssl/resources/certificates/localhost.key +28 -0
- holado_python/standard_library/ssl/ssl.py +131 -0
- holado_python/standard_library/typing.py +192 -0
- holado_python/tests/behave/steps/__init__.py +27 -0
- holado_python/tests/behave/steps/builtins/str_steps.py +45 -0
- holado_python/tests/behave/steps/convert_steps.py +59 -0
- holado_python/tests/behave/steps/iterable_steps.py +87 -0
- holado_python/tests/behave/steps/standard_library/csv_steps.py +134 -0
- holado_python/tests/behave/steps/standard_library/datetime_steps.py +163 -0
- holado_python/tests/behave/steps/standard_library/hashlib_steps.py +57 -0
- holado_python/tests/behave/steps/standard_library/multiprocessing_steps.py +56 -0
- holado_python/tests/behave/steps/standard_library/queue_steps.py +358 -0
- holado_python/tests/behave/steps/standard_library/socket_steps.py +384 -0
- holado_python/tests/behave/steps/standard_library/ssl_steps.py +71 -0
- holado_rabbitmq/__init__.py +28 -0
- holado_rabbitmq/tests/behave/steps/__init__.py +17 -0
- holado_rabbitmq/tests/behave/steps/tools/rabbitmq_client_steps.py +565 -0
- holado_rabbitmq/tests/behave/steps/tools/rabbitmq_server_steps.py +64 -0
- holado_rabbitmq/tools/rabbitmq/rabbitmq_blocking_client.py +333 -0
- holado_rabbitmq/tools/rabbitmq/rabbitmq_client.py +678 -0
- holado_rabbitmq/tools/rabbitmq/rabbitmq_manager.py +146 -0
- holado_rabbitmq/tools/rabbitmq/rabbitmq_select_client.py +428 -0
- holado_rabbitmq/tools/rabbitmq/rabbitmq_server.py +24 -0
- holado_redis/__init__.py +17 -0
- holado_redis/tests/behave/steps/__init__.py +16 -0
- holado_redis/tests/behave/steps/tools/redis_client_steps.py +101 -0
- holado_redis/tools/redis/TODO.txt +7 -0
- holado_redis/tools/redis/redis_client.py +190 -0
- holado_redis/tools/redis/redis_manager.py +38 -0
- holado_report/__init__.py +36 -0
- holado_report/campaign/campaign_manager.py +348 -0
- holado_report/report/analyze/execution_historic_manager.py +96 -0
- holado_report/report/analyze/scenario_duration_manager.py +245 -0
- holado_report/report/builders/detailed_scenario_report_builder.py +172 -0
- holado_report/report/builders/execution_historic_report_builder.py +132 -0
- holado_report/report/builders/failure_report_builder.py +150 -0
- holado_report/report/builders/report_builder.py +64 -0
- holado_report/report/builders/short_scenario_report_builder.py +94 -0
- holado_report/report/builders/summary_by_category_report_builder.py +103 -0
- holado_report/report/builders/summary_report_builder.py +110 -0
- holado_report/report/builders/summary_scenario_by_category_report_builder.py +109 -0
- holado_report/report/builders/summary_scenario_report_builder.py +81 -0
- holado_report/report/execution_historic.py +144 -0
- holado_report/report/report_manager.py +424 -0
- holado_report/report/reports/base_report.py +163 -0
- holado_report/report/reports/feature_report.py +106 -0
- holado_report/report/reports/scenario_report.py +64 -0
- holado_rest/__init__.py +32 -0
- holado_rest/api/rest/TODO.txt +2 -0
- holado_rest/api/rest/rest_client.py +200 -0
- holado_rest/api/rest/rest_manager.py +72 -0
- holado_rest/tests/behave/steps/__init__.py +16 -0
- holado_rest/tests/behave/steps/api/__init__.py +0 -0
- holado_rest/tests/behave/steps/api/rest_client_steps.py +181 -0
- holado_rest/tests/behave/steps/private/__init__.py +16 -0
- holado_rest/tests/behave/steps/private/api/__init__.py +0 -0
- holado_rest/tests/behave/steps/private/api/rest_steps.py +75 -0
- holado_s3/__init__.py +17 -0
- holado_s3/tests/behave/steps/__init__.py +17 -0
- holado_s3/tests/behave/steps/private/__init__.py +16 -0
- holado_s3/tests/behave/steps/private/tools/s3_steps.py +89 -0
- holado_s3/tests/behave/steps/tools/s3_client_steps.py +403 -0
- holado_s3/tests/behave/steps/tools/s3_server_steps.py +57 -0
- holado_s3/tools/s3/__init__.py +0 -0
- holado_s3/tools/s3/boto3_s3_client.py +59 -0
- holado_s3/tools/s3/minio_client.py +75 -0
- holado_s3/tools/s3/moto_server.py +52 -0
- holado_scripting/__init__.py +54 -0
- holado_scripting/common/tools/dynamic_text_manager.py +73 -0
- holado_scripting/common/tools/evaluate_parameters.py +228 -0
- holado_scripting/common/tools/expression_evaluator.py +389 -0
- holado_scripting/common/tools/variable_manager.py +354 -0
- holado_scripting/tests/behave/steps/__init__.py +22 -0
- holado_scripting/tests/behave/steps/common/tools/variable_convert_steps.py +159 -0
- holado_scripting/tests/behave/steps/common/tools/variable_new_steps.py +130 -0
- holado_scripting/tests/behave/steps/common/tools/variable_steps.py +108 -0
- holado_scripting/tests/behave/steps/common/tools/variable_verify_steps.py +160 -0
- holado_scripting/tests/behave/steps/scenario/function_steps.py +77 -0
- holado_scripting/tests/behave/steps/scenario/if_steps.py +87 -0
- holado_scripting/tests/behave/steps/scenario/loop_steps.py +119 -0
- holado_scripting/text/base/base_function.py +25 -0
- holado_scripting/text/base/base_verify_function.py +25 -0
- holado_scripting/text/base/text_inspecter.py +204 -0
- holado_scripting/text/interpreter/exceptions/interpreter_exception.py +25 -0
- holado_scripting/text/interpreter/functions/function_apply_function.py +60 -0
- holado_scripting/text/interpreter/functions/function_cast.py +60 -0
- holado_scripting/text/interpreter/functions/function_convert.py +57 -0
- holado_scripting/text/interpreter/functions/function_dynamic_value.py +40 -0
- holado_scripting/text/interpreter/functions/function_escape_all_bytes.py +35 -0
- holado_scripting/text/interpreter/functions/function_exists_variable.py +39 -0
- holado_scripting/text/interpreter/functions/function_hex_to_bytes.py +49 -0
- holado_scripting/text/interpreter/functions/function_hex_to_int.py +53 -0
- holado_scripting/text/interpreter/functions/function_to_base_64.py +41 -0
- holado_scripting/text/interpreter/functions/function_to_bytes.py +50 -0
- holado_scripting/text/interpreter/functions/function_to_hex.py +42 -0
- holado_scripting/text/interpreter/functions/function_to_string.py +50 -0
- holado_scripting/text/interpreter/text_interpreter.py +219 -0
- holado_scripting/text/verifier/exceptions/verifier_exception.py +21 -0
- holado_scripting/text/verifier/functions/verify_function_extract_in.py +35 -0
- holado_scripting/text/verifier/functions/verify_function_match_pattern.py +63 -0
- holado_scripting/text/verifier/text_verifier.py +103 -0
- holado_sftp/__init__.py +16 -0
- holado_sftp/tests/behave/steps/__init__.py +17 -0
- holado_sftp/tests/behave/steps/private/__init__.py +16 -0
- holado_sftp/tests/behave/steps/private/tools/sftp_steps.py +78 -0
- holado_sftp/tests/behave/steps/tools/sftp_client_steps.py +94 -0
- holado_sftp/tests/behave/steps/tools/sftp_server_steps.py +82 -0
- holado_sftp/tools/sftp/__init__.py +0 -0
- holado_sftp/tools/sftp/sftp_client.py +103 -0
- holado_sftp/tools/sftp/sftp_server.py +39 -0
- holado_swagger/__init__.py +31 -0
- holado_swagger/swagger_hub/mockserver/mockserver_client.py +82 -0
- holado_swagger/swagger_hub/mockserver/mockserver_manager.py +33 -0
- holado_swagger/tests/behave/steps/__init__.py +16 -0
- holado_swagger/tests/behave/steps/swagger_hub/mockserver_steps.py +74 -0
- holado_system/system/command/command.py +247 -0
- holado_system/system/command/command_result.py +128 -0
- holado_system/system/command/curl_command.py +101 -0
- holado_system/system/command/exceptions.py +59 -0
- holado_system/system/filesystem/file.py +150 -0
- holado_system/system/global_system.py +187 -0
- holado_system/tests/behave/steps/__init__.py +18 -0
- holado_system/tests/behave/steps/system/commands_steps.py +92 -0
- holado_system/tests/behave/steps/system/file_steps.py +231 -0
- holado_system/tests/behave/steps/system/system_steps.py +84 -0
- holado_test/__init__.py +30 -0
- holado_test/behave/__init__.py +0 -0
- holado_test/behave/behave.py +400 -0
- holado_test/behave/behave_environment.py +169 -0
- holado_test/behave/behave_function.py +33 -0
- holado_test/behave/behave_manager.py +558 -0
- holado_test/behave/independant_runner.py +66 -0
- holado_test/behave/scenario/__init__.py +0 -0
- holado_test/behave/scenario/behave_step_tools.py +157 -0
- holado_test/common/context/feature_context.py +81 -0
- holado_test/common/context/scenario_context.py +169 -0
- holado_test/common/context/step_context.py +66 -0
- holado_test/common/exceptions/undefined_step_exception.py +21 -0
- holado_test/scenario/step_tools.py +547 -0
- holado_test/scenario/tester_tools.py +57 -0
- holado_test/test_config.py +26 -0
- holado_test/tests/behave/steps/__init__.py +18 -0
- holado_test/tests/behave/steps/scenario/exception_steps.py +87 -0
- holado_test/tests/behave/steps/scenario/scenario_steps.py +100 -0
- holado_test/tests/behave/steps/scenario/tester_steps.py +65 -0
- holado_test/tools/test_server/client/rest/test_server_client.py +150 -0
- holado_test/tools/test_server/server/Dockerfile +60 -0
- holado_test/tools/test_server/server/core/server_context.py +42 -0
- holado_test/tools/test_server/server/core/server_manager.py +41 -0
- holado_test/tools/test_server/server/requirements.txt +2 -0
- holado_test/tools/test_server/server/rest/README +2 -0
- holado_test/tools/test_server/server/rest/api/__init__.py +24 -0
- holado_test/tools/test_server/server/rest/api/campaign/__init__.py +32 -0
- holado_test/tools/test_server/server/rest/api/campaign/scenario.py +40 -0
- holado_test/tools/test_server/server/rest/initialize_holado.py +72 -0
- holado_test/tools/test_server/server/rest/logging.conf +51 -0
- holado_test/tools/test_server/server/rest/openapi.yaml +57 -0
- holado_test/tools/test_server/server/rest/run.py +41 -0
- holado_test/tools/test_server/server/run.sh +6 -0
- holado_test/tools/test_server/server/run_test_server_in_docker.sh +104 -0
- holado_tools/__init__.py +38 -0
- holado_tools/scripts/execute_persisted_post_processes/execute_persisted_post_processes.py +36 -0
- holado_tools/scripts/execute_persisted_post_processes/execute_persisted_post_processes.sh +6 -0
- holado_tools/scripts/execute_persisted_post_processes/initialize_holado.py +62 -0
- holado_tools/tests/behave/steps/__init__.py +16 -0
- holado_tools/tests/behave/steps/tools/host_controller/client_steps.py +97 -0
- holado_tools/tools/host_controller/client/rest/host_controller_client.py +275 -0
- holado_tools/tools/host_controller/server/Dockerfile +60 -0
- holado_tools/tools/host_controller/server/requirements.txt +2 -0
- holado_tools/tools/host_controller/server/rest/README +2 -0
- holado_tools/tools/host_controller/server/rest/api/__init__.py +24 -0
- holado_tools/tools/host_controller/server/rest/api/config.py +88 -0
- holado_tools/tools/host_controller/server/rest/api/docker/__init__.py +66 -0
- holado_tools/tools/host_controller/server/rest/api/docker/container.py +144 -0
- holado_tools/tools/host_controller/server/rest/api/docker/logs.py +66 -0
- holado_tools/tools/host_controller/server/rest/api/os.py +58 -0
- holado_tools/tools/host_controller/server/rest/initialize_holado.py +72 -0
- holado_tools/tools/host_controller/server/rest/openapi.yaml +561 -0
- holado_tools/tools/host_controller/server/rest/run.py +31 -0
- holado_tools/tools/host_controller/server/run_host_controller_in_docker.sh +107 -0
- holado_tools/tools/host_viewer/client/rest/host_viewer_client.py +190 -0
- holado_tools/tools/host_viewer/server/Dockerfile +60 -0
- holado_tools/tools/host_viewer/server/requirements.txt +2 -0
- holado_tools/tools/host_viewer/server/rest/README +2 -0
- holado_tools/tools/host_viewer/server/rest/api/__init__.py +24 -0
- holado_tools/tools/host_viewer/server/rest/api/docker/__init__.py +65 -0
- holado_tools/tools/host_viewer/server/rest/api/docker/container.py +87 -0
- holado_tools/tools/host_viewer/server/rest/api/os.py +58 -0
- holado_tools/tools/host_viewer/server/rest/initialize_holado.py +72 -0
- holado_tools/tools/host_viewer/server/rest/openapi.yaml +301 -0
- holado_tools/tools/host_viewer/server/rest/run.py +31 -0
- holado_tools/tools/host_viewer/server/run_host_viewer_in_docker.sh +107 -0
- holado_value/__init__.py +24 -0
- holado_value/common/tables/comparators/table_2_value_table_cell_comparator.py +196 -0
- holado_value/common/tables/comparators/table_2_value_table_comparator.py +27 -0
- holado_value/common/tables/comparators/table_2_value_table_row_comparator.py +27 -0
- holado_value/common/tables/comparators/table_2_value_table_with_header_comparator.py +27 -0
- holado_value/common/tables/converters/value_table_converter.py +267 -0
- holado_value/common/tables/value_table.py +29 -0
- holado_value/common/tables/value_table_cell.py +76 -0
- holado_value/common/tables/value_table_manager.py +48 -0
- holado_value/common/tables/value_table_row.py +43 -0
- holado_value/common/tables/value_table_with_header.py +28 -0
- holado_value/common/tools/unique_value_manager.py +109 -0
- holado_value/common/tools/value.py +191 -0
- holado_value/common/tools/value_types.py +41 -0
- holado_value/tests/behave/steps/__init__.py +16 -0
- holado_value/tests/behave/steps/private/__init__.py +16 -0
- holado_ws/__init__.py +16 -0
- holado_ws/api/ws/TODO.txt +2 -0
- holado_ws/tests/behave/steps/__init__.py +16 -0
- holado_ws/tests/behave/steps/api/web_service_steps.py +189 -0
- holado_xml/__init__.py +38 -0
- holado_xml/tests/behave/steps/__init__.py +16 -0
- holado_xml/tests/behave/steps/private/__init__.py +16 -0
- holado_xml/xml/stream_xml_file.py +181 -0
- holado_xml/xml/xml_file.py +97 -0
- holado_xml/xml/xml_manager.py +35 -0
- holado_yaml/__init__.py +31 -0
- holado_yaml/tests/behave/steps/__init__.py +16 -0
- holado_yaml/tests/behave/steps/yaml_steps.py +161 -0
- holado_yaml/yaml/enums.py +28 -0
- holado_yaml/yaml/pyyaml/pyyaml_client.py +72 -0
- holado_yaml/yaml/ruamel/ruamel_yaml_client.py +80 -0
- holado_yaml/yaml/yaml_client.py +203 -0
- holado_yaml/yaml/yaml_manager.py +94 -0
- test_holado/Dockerfile_test_holado +82 -0
- test_holado/__init__.py +4 -0
- test_holado/__main__.py +25 -0
- test_holado/build_docker_image_to_test_holado_in_docker.sh +7 -0
- test_holado/environment.py +60 -0
- test_holado/features/Configuration/Actions/execute_persisted_post_processes.feature +13 -0
- test_holado/features/NonReg/api/REST.feature +26 -0
- test_holado/features/NonReg/api/gRPC.feature +116 -0
- test_holado/features/NonReg/common/multiprocessing/simple.feature +60 -0
- test_holado/features/NonReg/common/system/commands.feature +43 -0
- test_holado/features/NonReg/common/system/system.feature +20 -0
- test_holado/features/NonReg/common/tables/table.feature +245 -0
- test_holado/features/NonReg/common/tables/value_table_conversion.feature +29 -0
- test_holado/features/NonReg/common/tools/DateTime.feature +88 -0
- test_holado/features/NonReg/common/tools/UniqueValueManager.feature +43 -0
- test_holado/features/NonReg/holado_ais/ais_message-bitarray_to_nmea.feature +135 -0
- test_holado/features/NonReg/holado_ais/ais_message-nmea_raw_to_dict.feature +93 -0
- test_holado/features/NonReg/holado_ais/message_types/type-10.feature +38 -0
- test_holado/features/NonReg/holado_ais/message_types/type-12.feature +37 -0
- test_holado/features/NonReg/holado_ais/message_types/type-14.feature +36 -0
- test_holado/features/NonReg/holado_ais/message_types/type-15.feature +36 -0
- test_holado/features/NonReg/holado_ais/message_types/type-16.feature +38 -0
- test_holado/features/NonReg/holado_ais/message_types/type-17.feature +46 -0
- test_holado/features/NonReg/holado_ais/message_types/type-18.feature +37 -0
- test_holado/features/NonReg/holado_ais/message_types/type-19.feature +38 -0
- test_holado/features/NonReg/holado_ais/message_types/type-1_2_3.feature +42 -0
- test_holado/features/NonReg/holado_ais/message_types/type-20.feature +38 -0
- test_holado/features/NonReg/holado_ais/message_types/type-21.feature +37 -0
- test_holado/features/NonReg/holado_ais/message_types/type-22.feature +84 -0
- test_holado/features/NonReg/holado_ais/message_types/type-23.feature +49 -0
- test_holado/features/NonReg/holado_ais/message_types/type-24.feature +72 -0
- test_holado/features/NonReg/holado_ais/message_types/type-25.feature +143 -0
- test_holado/features/NonReg/holado_ais/message_types/type-26.feature +144 -0
- test_holado/features/NonReg/holado_ais/message_types/type-27.feature +36 -0
- test_holado/features/NonReg/holado_ais/message_types/type-4_11.feature +39 -0
- test_holado/features/NonReg/holado_ais/message_types/type-5.feature +33 -0
- test_holado/features/NonReg/holado_ais/message_types/type-6.feature +37 -0
- test_holado/features/NonReg/holado_ais/message_types/type-7_13.feature +43 -0
- test_holado/features/NonReg/holado_ais/message_types/type-8.feature +37 -0
- test_holado/features/NonReg/holado_ais/message_types/type-9.feature +37 -0
- test_holado/features/NonReg/holado_binary/bit_series.error.feature +33 -0
- test_holado/features/NonReg/holado_binary/bit_series.feature +144 -0
- test_holado/features/NonReg/holado_protobuf/protobuf.feature +291 -0
- test_holado/features/NonReg/holado_python/convert.feature +20 -0
- test_holado/features/NonReg/holado_python/iterable.feature +61 -0
- test_holado/features/NonReg/holado_python/standard_library/socket/local_echo_server/socket_reset.feature +191 -0
- test_holado/features/NonReg/holado_python/standard_library/socket/local_echo_server/socket_with_tls_and_verify.feature +279 -0
- test_holado/features/NonReg/holado_python/standard_library/socket/local_echo_server/socket_with_tls_without_verify.feature +299 -0
- test_holado/features/NonReg/holado_python/standard_library/socket/local_echo_server/socket_without_tls.feature +163 -0
- test_holado/features/NonReg/holado_python/standard_library/socket/tcpbin.com/socket_with_mtls.feature +214 -0
- test_holado/features/NonReg/holado_python/standard_library/socket/tcpbin.com/socket_with_tls.feature +184 -0
- test_holado/features/NonReg/holado_python/standard_library/socket/tcpbin.com/socket_without_tls.feature +169 -0
- test_holado/features/NonReg/holado_scripting/common/tools/dynamic_text_manager.feature +18 -0
- test_holado/features/NonReg/holado_scripting/common/tools/expression_evaluator.feature +185 -0
- test_holado/features/NonReg/holado_scripting/common/tools/variable_manager.feature +71 -0
- test_holado/features/NonReg/holado_scripting/text/interpreter/interpreter.error.feature +21 -0
- test_holado/features/NonReg/holado_scripting/text/interpreter/interpreter.feature +120 -0
- test_holado/features/NonReg/holado_yaml/yaml.feature +514 -0
- test_holado/features/NonReg/ipc/json.feature +20 -0
- test_holado/features/NonReg/scenario/scenario.feature +183 -0
- test_holado/features/NonReg/test_steps/behave.feature +275 -0
- test_holado/features/NonReg/test_steps/common.feature +100 -0
- test_holado/features/NonReg/tools/RabbitMQ.feature +445 -0
- test_holado/features/NonReg/tools/RabbitMQ_steps.feature +276 -0
- test_holado/features/NonReg/tools/S3/boto3_client.feature +73 -0
- test_holado/features/NonReg/tools/S3/minio_client.feature +75 -0
- test_holado/features/NonReg/tools/db_sqlite3.feature +41 -0
- test_holado/features/NonReg/tools/sFTP.feature +25 -0
- test_holado/features/Test/logger.feature +28 -0
- test_holado/features/Test/test_host_controller.feature +13 -0
- test_holado/features/Test/test_parameter.feature +15 -0
- test_holado/features/__init__.py +0 -0
- test_holado/initialize_holado.py +62 -0
- test_holado/logging.conf +53 -0
- test_holado/resources/proto/definitions/protobuf/custom_types/field_types.proto +24 -0
- test_holado/resources/proto/definitions/protobuf/protobuf.dev/tutorial/addressbook.proto +56 -0
- test_holado/resources/proto/generated/protobuf/custom_types/field_types_pb2.py +34 -0
- test_holado/resources/proto/generated/protobuf/protobuf/dev/tutorial/addressbook_pb2.py +34 -0
- test_holado/resources/scripts/list_tags.sh +2 -0
- test_holado/resources/scripts/update_resources_proto_generated.py +70 -0
- test_holado/steps/__init__.py +0 -0
- test_holado/steps/private_steps.py +20 -0
- test_holado/steps/public_steps.py +23 -0
- test_holado/test_holado_session_context.py +43 -0
- test_holado/tools/connexion/api_rest/openapi.yaml +16 -0
- test_holado/tools/connexion/api_rest/run.py +19 -0
- test_holado/tools/django/README.txt +3 -0
- test_holado/tools/django/api_grpc/api_grpc/__init__.py +0 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/__init__.py +0 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/admin.py +3 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/apps.py +6 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/migrations/__init__.py +0 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/models.py +3 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/proto/__init__.py +0 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/proto/account.proto +27 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/proto/account_pb2.py +33 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/proto/account_pb2_grpc.py +199 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/serializers.py +12 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/services.py +11 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/tests.py +3 -0
- test_holado/tools/django/api_grpc/api_grpc/api1/views.py +3 -0
- test_holado/tools/django/api_grpc/api_grpc/asgi.py +16 -0
- test_holado/tools/django/api_grpc/api_grpc/settings.py +126 -0
- test_holado/tools/django/api_grpc/api_grpc/urls.py +27 -0
- test_holado/tools/django/api_grpc/api_grpc/wsgi.py +16 -0
- test_holado/tools/django/api_grpc/db.sqlite3 +0 -0
- test_holado/tools/django/api_grpc/manage.py +29 -0
- test_holado/tools/django/api_grpc/manual_test_commands.txt +25 -0
- test_holado/tools/django/api_grpc/patch_djangogrpcframework.py +42 -0
- test_holado/tools/django/api_rest/api_rest/__init__.py +0 -0
- test_holado/tools/django/api_rest/api_rest/api1/__init__.py +0 -0
- test_holado/tools/django/api_rest/api_rest/api1/admin.py +3 -0
- test_holado/tools/django/api_rest/api_rest/api1/apps.py +6 -0
- test_holado/tools/django/api_rest/api_rest/api1/migrations/__init__.py +0 -0
- test_holado/tools/django/api_rest/api_rest/api1/models.py +3 -0
- test_holado/tools/django/api_rest/api_rest/api1/serializers.py +15 -0
- test_holado/tools/django/api_rest/api_rest/api1/tests.py +3 -0
- test_holado/tools/django/api_rest/api_rest/api1/views.py +24 -0
- test_holado/tools/django/api_rest/api_rest/asgi.py +16 -0
- test_holado/tools/django/api_rest/api_rest/settings.py +133 -0
- test_holado/tools/django/api_rest/api_rest/urls.py +32 -0
- test_holado/tools/django/api_rest/api_rest/wsgi.py +16 -0
- test_holado/tools/django/api_rest/db.sqlite3 +0 -0
- test_holado/tools/django/api_rest/manage.py +22 -0
holado/__init__.py
ADDED
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import os
|
|
17
|
+
import importlib
|
|
18
|
+
import logging
|
|
19
|
+
import copy
|
|
20
|
+
from holado.common.handlers.undefined import default_value
|
|
21
|
+
from holado.common.tools.gc_manager import GcManager
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
import behave
|
|
25
|
+
with_behave = True
|
|
26
|
+
except:
|
|
27
|
+
with_behave = False
|
|
28
|
+
|
|
29
|
+
logger = None
|
|
30
|
+
__initialized = False
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def is_in_steps_catalog():
|
|
34
|
+
from holado_core.common.tools.converters.converter import Converter
|
|
35
|
+
return Converter.to_boolean(os.getenv("HOLADO_STEPS_CATALOG", False))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def __initialize_holado_loggers():
|
|
39
|
+
global logger
|
|
40
|
+
logger = logging.getLogger(__name__)
|
|
41
|
+
|
|
42
|
+
import holado.common
|
|
43
|
+
holado.common.initialize_loggers()
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _initialize_logging(use_holado_logger=True, logging_config_file_path=None, log_level=None, log_time_in_utc=None, log_on_console=False, log_in_file=True):
|
|
48
|
+
# print_imported_modules("[initialize]")
|
|
49
|
+
import holado_logging
|
|
50
|
+
# print_imported_modules("[after import holado_logging]")
|
|
51
|
+
|
|
52
|
+
# Configure logging module
|
|
53
|
+
holado_logging.configure(use_holado_logger=use_holado_logger, logging_config_file_path=logging_config_file_path,
|
|
54
|
+
log_level=log_level, log_time_in_utc=log_time_in_utc, log_on_console=log_on_console, log_in_file=log_in_file)
|
|
55
|
+
# print_imported_modules("[after import holado_logging]")
|
|
56
|
+
|
|
57
|
+
# Initialize holado loggers
|
|
58
|
+
__initialize_holado_loggers()
|
|
59
|
+
|
|
60
|
+
# Create session context
|
|
61
|
+
from holado.common.context.session_context import SessionContext
|
|
62
|
+
if SessionContext.has_instance():
|
|
63
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
64
|
+
raise TechnicalException(f"Session context was initialized to early (before logging configuration)")
|
|
65
|
+
SessionContext.instance()
|
|
66
|
+
|
|
67
|
+
# Initialize log manager and register it in session context
|
|
68
|
+
holado_logging.initialize_and_register()
|
|
69
|
+
|
|
70
|
+
# Set whole logging configuration
|
|
71
|
+
SessionContext.instance().log_manager.set_config()
|
|
72
|
+
|
|
73
|
+
def change_logging_config(log_level=None, log_on_console=False, log_in_file=True):
|
|
74
|
+
from holado.common.context.session_context import SessionContext
|
|
75
|
+
SessionContext.instance().log_manager.set_level(log_level, do_set_config=False)
|
|
76
|
+
SessionContext.instance().log_manager.on_console = log_on_console
|
|
77
|
+
SessionContext.instance().log_manager.in_file = log_in_file
|
|
78
|
+
SessionContext.instance().log_manager.set_config()
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def initialize_minimal():
|
|
82
|
+
# initialize(TSessionContext=None, use_holado_logger=False, logging_config_file_path=None,
|
|
83
|
+
# log_level=None, log_on_console=True, log_in_file=False,
|
|
84
|
+
# session_kwargs={'with_session_path':False},
|
|
85
|
+
# garbage_collector_periodicity=None)
|
|
86
|
+
initialize(TSessionContext=None, use_holado_logger=True, logging_config_file_path=None,
|
|
87
|
+
log_level=None, log_time_in_utc=None, log_on_console=True, log_in_file=False,
|
|
88
|
+
garbage_collector_periodicity=None)
|
|
89
|
+
|
|
90
|
+
def initialize(TSessionContext=None, use_holado_logger=True, logging_config_file_path=None,
|
|
91
|
+
log_level=None, log_time_in_utc=None, log_on_console=False, log_in_file=True,
|
|
92
|
+
config_kwargs=None, session_kwargs=None, garbage_collector_periodicity=default_value):
|
|
93
|
+
global __initialized
|
|
94
|
+
if __initialized:
|
|
95
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
96
|
+
raise TechnicalException(f"HolAdo was already initialized")
|
|
97
|
+
|
|
98
|
+
from holado_core.common.tools.tools import Tools
|
|
99
|
+
|
|
100
|
+
if session_kwargs is None:
|
|
101
|
+
session_kwargs = {}
|
|
102
|
+
with_session_path = session_kwargs.get("with_session_path", True)
|
|
103
|
+
|
|
104
|
+
# Reset session context before initializing logging
|
|
105
|
+
# Note: Session context must not be created before logging initialization
|
|
106
|
+
from holado.common.context.session_context import SessionContext
|
|
107
|
+
SessionContext._reset_instance()
|
|
108
|
+
if TSessionContext is not None:
|
|
109
|
+
if isinstance(TSessionContext, str):
|
|
110
|
+
module_name, class_type = TSessionContext.rsplit('.', maxsplit=1)
|
|
111
|
+
module = importlib.import_module(module_name)
|
|
112
|
+
TSessionContext = getattr(module, class_type)
|
|
113
|
+
|
|
114
|
+
SessionContext.TSessionContext = TSessionContext
|
|
115
|
+
|
|
116
|
+
# Initialize logging
|
|
117
|
+
_initialize_logging(use_holado_logger=use_holado_logger, logging_config_file_path=logging_config_file_path,
|
|
118
|
+
log_level=log_level, log_time_in_utc=log_time_in_utc, log_on_console=log_on_console, log_in_file=log_in_file and with_session_path)
|
|
119
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
120
|
+
logger.debug("Configured logging")
|
|
121
|
+
|
|
122
|
+
# Import modules
|
|
123
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
124
|
+
logger.debug("Importing HolAdo modules")
|
|
125
|
+
_import_modules(get_holado_module_names())
|
|
126
|
+
|
|
127
|
+
# Update config with given kwargs
|
|
128
|
+
# Note: it is made after modules import to enable override modules specific config parameters
|
|
129
|
+
_update_config(config_kwargs)
|
|
130
|
+
|
|
131
|
+
# Initialize session context
|
|
132
|
+
_initialize_session_context(session_kwargs)
|
|
133
|
+
|
|
134
|
+
# Initialize garbage collector
|
|
135
|
+
if garbage_collector_periodicity is not None:
|
|
136
|
+
GcManager.collect_periodically(garbage_collector_periodicity)
|
|
137
|
+
logger.debug(f"Garbage collector is disabled, and collects are automatically done in a dedicated thread (periodicity: {GcManager.get_collect_periodicity()} s)")
|
|
138
|
+
|
|
139
|
+
if with_behave:
|
|
140
|
+
# Register default behave parameter types
|
|
141
|
+
#TODO: make step tools a service
|
|
142
|
+
from holado_test.behave.scenario.behave_step_tools import BehaveStepTools
|
|
143
|
+
BehaveStepTools.register_default_types()
|
|
144
|
+
|
|
145
|
+
__initialized = True
|
|
146
|
+
|
|
147
|
+
def initialize_for_script(TSessionContext=None, use_holado_logger=True, logging_config_file_path=None,
|
|
148
|
+
log_level=logging.WARNING, log_time_in_utc=None, log_on_console=True, log_in_file=False,
|
|
149
|
+
config_kwargs=None, session_kwargs=None, garbage_collector_periodicity=None):
|
|
150
|
+
if session_kwargs is None:
|
|
151
|
+
session_kwargs={'with_session_path':log_in_file, 'raise_if_not_exist':False}
|
|
152
|
+
|
|
153
|
+
initialize(TSessionContext=TSessionContext, use_holado_logger=use_holado_logger, logging_config_file_path=logging_config_file_path,
|
|
154
|
+
log_level=log_level, log_time_in_utc=log_time_in_utc, log_on_console=log_on_console, log_in_file=log_in_file,
|
|
155
|
+
config_kwargs=config_kwargs, session_kwargs=session_kwargs,
|
|
156
|
+
garbage_collector_periodicity=garbage_collector_periodicity )
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def _update_config(config_kwargs):
|
|
160
|
+
from holado.holado_config import Config
|
|
161
|
+
|
|
162
|
+
if config_kwargs is not None:
|
|
163
|
+
for name, value in config_kwargs.items():
|
|
164
|
+
if hasattr(Config, name):
|
|
165
|
+
setattr(Config, name, value)
|
|
166
|
+
else:
|
|
167
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
168
|
+
from holado_python.standard_library.typing import Typing
|
|
169
|
+
raise TechnicalException(f"Parameter '{name}' is not configurable, it doesn't exist. Available configurable parameters: {Typing.get_object_attributes(Config)}")
|
|
170
|
+
|
|
171
|
+
def _initialize_session_context(session_kwargs=None):
|
|
172
|
+
from holado_core.common.tools.tools import Tools
|
|
173
|
+
|
|
174
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
175
|
+
logger.debug("Initializing SessionContext")
|
|
176
|
+
from holado.common.context.session_context import SessionContext
|
|
177
|
+
|
|
178
|
+
SessionContext.instance().configure(session_kwargs)
|
|
179
|
+
SessionContext.instance().new_session(session_kwargs)
|
|
180
|
+
SessionContext.instance().initialize(session_kwargs)
|
|
181
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
182
|
+
logger.debug("Initialized SessionContext")
|
|
183
|
+
|
|
184
|
+
def _is_in_holado_package(here=None):
|
|
185
|
+
if here is None:
|
|
186
|
+
here = os.path.abspath(os.path.dirname(__file__))
|
|
187
|
+
return 'site-packages' in here
|
|
188
|
+
|
|
189
|
+
def get_holado_path():
|
|
190
|
+
here = os.path.abspath(os.path.dirname(__file__))
|
|
191
|
+
if _is_in_holado_package(here):
|
|
192
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
193
|
+
raise TechnicalException(f"When using installed 'holado' package, the project HolAdo is not available")
|
|
194
|
+
else:
|
|
195
|
+
return os.path.normpath(os.path.join(here, "..", ".."))
|
|
196
|
+
|
|
197
|
+
def get_holado_src_path():
|
|
198
|
+
here = os.path.abspath(os.path.dirname(__file__))
|
|
199
|
+
return os.path.normpath(os.path.join(here, ".."))
|
|
200
|
+
|
|
201
|
+
def get_holado_module_names():
|
|
202
|
+
lp = sorted(os.listdir(get_holado_src_path()))
|
|
203
|
+
return [name for name in lp if name.startswith("holado_") and name not in ['holado_logging']]
|
|
204
|
+
|
|
205
|
+
def _import_modules(module_names):
|
|
206
|
+
from holado_core.common.tools.tools import Tools
|
|
207
|
+
|
|
208
|
+
imported_modules = __import_modules(module_names)
|
|
209
|
+
__configure_modules(imported_modules)
|
|
210
|
+
remaining_imported_modules = __register_modules_with_dependencies(imported_modules)
|
|
211
|
+
|
|
212
|
+
# Register modules with cross dependencies
|
|
213
|
+
if remaining_imported_modules:
|
|
214
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
215
|
+
logger.debug(f"Registering modules with cross dependencies: {list(remaining_imported_modules.keys())}...")
|
|
216
|
+
for module_name in remaining_imported_modules:
|
|
217
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
218
|
+
logger.trace(f"Registering HolAdo module '{module_name}'...")
|
|
219
|
+
remaining_imported_modules[module_name].register()
|
|
220
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
221
|
+
logger.debug(f"Registered HolAdo module '{module_name}'")
|
|
222
|
+
|
|
223
|
+
def __import_modules(module_names):
|
|
224
|
+
from holado_core.common.tools.tools import Tools
|
|
225
|
+
|
|
226
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
227
|
+
logger.debug(f"Importing HolAdo modules: {module_names}")
|
|
228
|
+
|
|
229
|
+
res = {}
|
|
230
|
+
for module_name in module_names:
|
|
231
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
232
|
+
logger.trace(f"Importing HolAdo module '{module_name}'...")
|
|
233
|
+
try:
|
|
234
|
+
module = importlib.import_module(module_name)
|
|
235
|
+
except Exception as exc:
|
|
236
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
237
|
+
logger.debug(f"Failed to import HolAdo module '{module_name}':\n{Tools.represent_exception(exc)}")
|
|
238
|
+
if "No module named" not in str(exc):
|
|
239
|
+
logger.warning(f"Failed to import HolAdo module '{module_name}': {str(exc)} (see debug logs for more details)")
|
|
240
|
+
else:
|
|
241
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
242
|
+
logger.debug(f"Imported HolAdo module '{module_name}'")
|
|
243
|
+
res[module_name] = module
|
|
244
|
+
return res
|
|
245
|
+
|
|
246
|
+
def __configure_modules(imported_modules):
|
|
247
|
+
from holado_core.common.tools.tools import Tools
|
|
248
|
+
|
|
249
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
250
|
+
logger.debug(f"Configuring imported HolAdo modules: {sorted(imported_modules.keys())}")
|
|
251
|
+
|
|
252
|
+
imported_module_names = list(imported_modules.keys())
|
|
253
|
+
for module_name in imported_module_names:
|
|
254
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
255
|
+
logger.trace(f"Configuring HolAdo module '{module_name}'...")
|
|
256
|
+
module = imported_modules[module_name]
|
|
257
|
+
if hasattr(module, 'configure_module'):
|
|
258
|
+
module.configure_module()
|
|
259
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
260
|
+
logger.debug(f"Configured HolAdo module '{module_name}'")
|
|
261
|
+
else:
|
|
262
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
263
|
+
logger.debug(f"Nothing to configure for HolAdo module '{module_name}'")
|
|
264
|
+
|
|
265
|
+
def __register_modules_with_dependencies(imported_modules):
|
|
266
|
+
from holado_core.common.tools.tools import Tools
|
|
267
|
+
|
|
268
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
269
|
+
logger.debug(f"Registering imported HolAdo modules: {sorted(imported_modules.keys())}")
|
|
270
|
+
|
|
271
|
+
registered_modules = set()
|
|
272
|
+
remaining_imported_modules = copy.copy(imported_modules)
|
|
273
|
+
has_new_registered = True
|
|
274
|
+
while has_new_registered:
|
|
275
|
+
has_new_registered = False
|
|
276
|
+
imported_module_names = list(remaining_imported_modules.keys())
|
|
277
|
+
for module_name in imported_module_names:
|
|
278
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
279
|
+
logger.trace(f"Registering HolAdo module '{module_name}'...")
|
|
280
|
+
module = remaining_imported_modules[module_name]
|
|
281
|
+
module_dependencies = set(module.dependencies()) if hasattr(module, 'dependencies') and module.dependencies() is not None else None
|
|
282
|
+
if module_dependencies is None or registered_modules.issuperset(module_dependencies):
|
|
283
|
+
if hasattr(module, 'register'):
|
|
284
|
+
module.register()
|
|
285
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
286
|
+
logger.debug(f"Registered HolAdo module '{module_name}'")
|
|
287
|
+
else:
|
|
288
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
289
|
+
logger.debug(f"Nothing to register for HolAdo module '{module_name}'")
|
|
290
|
+
del remaining_imported_modules[module_name]
|
|
291
|
+
registered_modules.add(module_name)
|
|
292
|
+
has_new_registered = True
|
|
293
|
+
else:
|
|
294
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
295
|
+
logger.trace(f"Pending registration of HolAdo module '{module_name}' due to dependencies: {module_dependencies.difference(registered_modules)}")
|
|
296
|
+
return remaining_imported_modules
|
|
297
|
+
|
|
298
|
+
def import_steps():
|
|
299
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
300
|
+
from holado_core.common.tools.tools import Tools
|
|
301
|
+
|
|
302
|
+
lp = sorted(os.listdir(get_holado_src_path()))
|
|
303
|
+
for module_name in lp:
|
|
304
|
+
if module_name.startswith("holado_"):
|
|
305
|
+
if with_behave:
|
|
306
|
+
module_steps_package = f"{module_name}.tests.behave.steps"
|
|
307
|
+
else:
|
|
308
|
+
raise TechnicalException(f"'behave' is needed for steps")
|
|
309
|
+
try:
|
|
310
|
+
importlib.import_module(module_steps_package)
|
|
311
|
+
except Exception as exc:
|
|
312
|
+
if "No module named" in str(exc):
|
|
313
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
314
|
+
logger.debug(f"No steps in HolAdo module '{module_name}'")
|
|
315
|
+
# logger.warning(f"No steps in HolAdo module '{module_name}'")
|
|
316
|
+
else:
|
|
317
|
+
raise TechnicalException(f"Failed to import steps of HolAdo module '{module_name}'") from exc
|
|
318
|
+
else:
|
|
319
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
320
|
+
logger.debug(f"Imported steps of HolAdo module '{module_name}'")
|
|
321
|
+
|
|
322
|
+
def import_private_steps():
|
|
323
|
+
from holado_core.common.tools.tools import Tools
|
|
324
|
+
|
|
325
|
+
lp = sorted(os.listdir(get_holado_src_path()))
|
|
326
|
+
for module_name in lp:
|
|
327
|
+
if module_name.startswith("holado_"):
|
|
328
|
+
if with_behave:
|
|
329
|
+
module_steps_package = f"{module_name}.tests.behave.steps.private"
|
|
330
|
+
else:
|
|
331
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
332
|
+
raise TechnicalException(f"'behave' is needed for steps")
|
|
333
|
+
try:
|
|
334
|
+
importlib.import_module(module_steps_package)
|
|
335
|
+
except:
|
|
336
|
+
pass
|
|
337
|
+
else:
|
|
338
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
339
|
+
logger.debug(f"Imported private steps of HolAdo module '{module_name}'")
|
|
340
|
+
|
|
341
|
+
def print_imported_modules(prefix):
|
|
342
|
+
import sys
|
|
343
|
+
import types
|
|
344
|
+
|
|
345
|
+
sys_modules = [v.__name__ for _,v in sys.modules.items() if isinstance(v, types.ModuleType)]
|
|
346
|
+
print(f"{prefix} sys modules: {sys_modules}")
|
|
347
|
+
|
|
348
|
+
# globals_modules = [v.__name__ for _,v in globals().items() if isinstance(v, types.ModuleType)]
|
|
349
|
+
# print(f"{prefix} globals modules: {globals_modules}")
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
# Process minimal initialization of HolAdo
|
|
354
|
+
# Note: Currently, initialization can be done only once, thus minimal initialization is commented.
|
|
355
|
+
# As a consequence, the call of an initialize method is mandatory
|
|
356
|
+
# initialize_minimal()
|
|
357
|
+
|
|
358
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def initialize_loggers():
|
|
17
|
+
import holado.common.context
|
|
18
|
+
holado.common.context.initialize_loggers()
|
|
19
|
+
|
|
20
|
+
import holado.common.handlers
|
|
21
|
+
holado.common.handlers.initialize_loggers()
|
|
22
|
+
|
|
23
|
+
import holado.common.tools
|
|
24
|
+
holado.common.tools.initialize_loggers()
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def initialize_loggers():
|
|
17
|
+
import holado.common.context.context
|
|
18
|
+
holado.common.context.context.initialize_logger()
|
|
19
|
+
|
|
20
|
+
import holado.common.context.service_manager
|
|
21
|
+
holado.common.context.service_manager.initialize_logger()
|
|
22
|
+
|
|
23
|
+
import holado.common.context.session_context
|
|
24
|
+
holado.common.context.session_context.initialize_logger()
|
|
25
|
+
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
|
|
2
|
+
#################################################
|
|
3
|
+
# HolAdo (Holistic Automation do)
|
|
4
|
+
#
|
|
5
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
8
|
+
#
|
|
9
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
|
+
|
|
11
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
12
|
+
#################################################
|
|
13
|
+
|
|
14
|
+
import logging
|
|
15
|
+
from holado.common.handlers.object import DeleteableObject, Object
|
|
16
|
+
|
|
17
|
+
logger = None
|
|
18
|
+
|
|
19
|
+
def initialize_logger():
|
|
20
|
+
global logger
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Context(DeleteableObject):
|
|
25
|
+
"""
|
|
26
|
+
@summary: Mother class for any context class
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def __init__(self, name, with_post_process=False, persisted_kwargs=None):
|
|
30
|
+
super().__init__(name)
|
|
31
|
+
self.on_delete_call_gc_collect = True
|
|
32
|
+
|
|
33
|
+
self.__objects = {}
|
|
34
|
+
self.__on_delete_objects = []
|
|
35
|
+
|
|
36
|
+
# Post process management
|
|
37
|
+
if with_post_process:
|
|
38
|
+
self.__persisted_kwargs = persisted_kwargs if persisted_kwargs is not None else {}
|
|
39
|
+
self.__persisted_method_to_call_manager_inst = None
|
|
40
|
+
self.__post_process_funcs = []
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def __with_post_process(self):
|
|
44
|
+
return hasattr(self, '_Context__persisted_method_to_call_manager_inst')
|
|
45
|
+
|
|
46
|
+
def __verify_is_with_post_process(self):
|
|
47
|
+
if not self.__with_post_process:
|
|
48
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
49
|
+
raise TechnicalException(f"[{self.name}] This context doesn't manage post process")
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def __persisted_method_to_call_manager(self):
|
|
53
|
+
self.__verify_is_with_post_process()
|
|
54
|
+
|
|
55
|
+
if self.__persisted_method_to_call_manager_inst is None:
|
|
56
|
+
from holado.common.context.session_context import SessionContext
|
|
57
|
+
from holado_core.common.resource.persisted_method_to_call_manager import PersistedMethodToCallManager
|
|
58
|
+
self.__persisted_method_to_call_manager_inst = PersistedMethodToCallManager(scope_name=self.name, **self.__persisted_kwargs)
|
|
59
|
+
self.__persisted_method_to_call_manager_inst.initialize(SessionContext.instance().resource_manager, SessionContext.instance().expression_evaluator)
|
|
60
|
+
self.__persisted_method_to_call_manager_inst.ensure_persistent_db_exists()
|
|
61
|
+
return self.__persisted_method_to_call_manager_inst
|
|
62
|
+
|
|
63
|
+
def get_context_name(self):
|
|
64
|
+
return Object.name(self)
|
|
65
|
+
|
|
66
|
+
def _delete_object(self):
|
|
67
|
+
# Remove all objects
|
|
68
|
+
self.remove_all_objects()
|
|
69
|
+
|
|
70
|
+
def remove_all_objects(self):
|
|
71
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
72
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
73
|
+
from holado_core.common.tools.tools import Tools
|
|
74
|
+
from holado_python.standard_library.typing import Typing
|
|
75
|
+
|
|
76
|
+
keys = set(self.__objects.keys())
|
|
77
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
78
|
+
logger.debug(f"[{self.name}] Removing {len(keys)} objects: {keys}")
|
|
79
|
+
for index, key in enumerate(keys):
|
|
80
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
81
|
+
logger.debug(f"[{self.name}] Removing object {index+1}/{len(keys)}: '{key}' (type: {Typing.get_object_class_fullname(self.get_object(key))})")
|
|
82
|
+
try:
|
|
83
|
+
self.remove_object(key)
|
|
84
|
+
except FunctionalException as exc:
|
|
85
|
+
raise TechnicalException() from exc
|
|
86
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
87
|
+
logger.debug(f"[{self.name}] Finished to remove {len(keys)} objects: {keys}")
|
|
88
|
+
|
|
89
|
+
def remove_object(self, name):
|
|
90
|
+
if not self.has_object(name):
|
|
91
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
92
|
+
raise TechnicalException("Context doesn't contain object '{}'".format(name))
|
|
93
|
+
self._remove(name, True)
|
|
94
|
+
|
|
95
|
+
def _remove(self, name, remove_from_lifetime_manager):
|
|
96
|
+
from holado_core.common.tools.tools import Tools
|
|
97
|
+
from holado_python.standard_library.typing import Typing
|
|
98
|
+
|
|
99
|
+
obj = self.get_object(name)
|
|
100
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
101
|
+
logger.debug(f"[{self.name}] Removing object '{name}' (type: {Typing.get_object_class_fullname(obj)})")
|
|
102
|
+
if name in self.__on_delete_objects:
|
|
103
|
+
if isinstance(obj, DeleteableObject):
|
|
104
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
105
|
+
logger.trace(f"[{self.name}] Deleting object '{name}'")
|
|
106
|
+
try:
|
|
107
|
+
obj.delete_object()
|
|
108
|
+
except Exception:
|
|
109
|
+
logger.exception(f"[{self.name}] Catched exception while deleting object '{name}'")
|
|
110
|
+
else:
|
|
111
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
112
|
+
logger.debug(f"[{self.name}] Deleted object '{name}'")
|
|
113
|
+
self.__on_delete_objects.remove(name)
|
|
114
|
+
|
|
115
|
+
if self.has_object(name):
|
|
116
|
+
del self.__objects[name]
|
|
117
|
+
# if remove_from_lifetime_manager:
|
|
118
|
+
# from holado.common.context.session_context import SessionContext
|
|
119
|
+
# SessionContext.instance().get_object_lifetime_manager().remove_object_lifetime(name, self)
|
|
120
|
+
|
|
121
|
+
def set_object(self, name, obj, raise_if_already_set = True):
|
|
122
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
123
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
124
|
+
|
|
125
|
+
if obj is None:
|
|
126
|
+
if self.has_object(name):
|
|
127
|
+
try:
|
|
128
|
+
self.remove_object(name)
|
|
129
|
+
except FunctionalException as e:
|
|
130
|
+
raise TechnicalException() from e
|
|
131
|
+
else:
|
|
132
|
+
if raise_if_already_set and self.has_object(name):
|
|
133
|
+
raise TechnicalException(f"[{self.name}] Context already contains object '{name}'")
|
|
134
|
+
self._put(name, obj)
|
|
135
|
+
|
|
136
|
+
def _put(self, name, obj):
|
|
137
|
+
self.__objects[name] = obj
|
|
138
|
+
self.__on_delete_objects.append(name)
|
|
139
|
+
|
|
140
|
+
def get_object(self, name):
|
|
141
|
+
if not self.has_object(name):
|
|
142
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
143
|
+
raise TechnicalException(f"[{self.name}] Context doesn't contain object '{name}'")
|
|
144
|
+
return self.__objects[name]
|
|
145
|
+
|
|
146
|
+
def has_object(self, name):
|
|
147
|
+
return name in self.__objects
|
|
148
|
+
|
|
149
|
+
def get_object_name(self, obj):
|
|
150
|
+
for name, value in self.__objects.items():
|
|
151
|
+
if value is obj:
|
|
152
|
+
return name
|
|
153
|
+
return None
|
|
154
|
+
|
|
155
|
+
def remove_lifetimed_object(self, object_id):
|
|
156
|
+
self._remove(object_id, False)
|
|
157
|
+
|
|
158
|
+
def get_or_create_initilizable_object_by_class(self, object_class):
|
|
159
|
+
raise NotImplementedError()
|
|
160
|
+
|
|
161
|
+
def get_or_create_object_by_class(self, object_class):
|
|
162
|
+
raise NotImplementedError()
|
|
163
|
+
|
|
164
|
+
def get_object_getter_eval_string(self, obj, raise_not_found=True):
|
|
165
|
+
from holado_python.standard_library.typing import Typing
|
|
166
|
+
|
|
167
|
+
name = self.get_object_name(obj)
|
|
168
|
+
if name is not None:
|
|
169
|
+
return f"{Typing.get_object_class_fullname(self)}.instance().get_object('{name}')"
|
|
170
|
+
|
|
171
|
+
if raise_not_found:
|
|
172
|
+
from holado_core.common.exceptions.element_exception import ElementNotFoundException
|
|
173
|
+
raise ElementNotFoundException(f"[{self.name}] Failed to find object of id {id(obj)}")
|
|
174
|
+
else:
|
|
175
|
+
return None
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
### Post process management
|
|
180
|
+
|
|
181
|
+
def add_post_process(self, func):
|
|
182
|
+
self.__verify_is_with_post_process()
|
|
183
|
+
|
|
184
|
+
success = self.__persist_function(func)
|
|
185
|
+
if not success:
|
|
186
|
+
logger.debug(f"[{self.name}] Add post process in memory, persistence in DB has failed (post process function: {func})")
|
|
187
|
+
self.__post_process_funcs.append(func)
|
|
188
|
+
|
|
189
|
+
def __persist_function(self, func):
|
|
190
|
+
from holado.common.context.session_context import SessionContext
|
|
191
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
192
|
+
from holado_core.common.tools.tools import Tools
|
|
193
|
+
from holado_python.standard_library.typing import Typing
|
|
194
|
+
|
|
195
|
+
try:
|
|
196
|
+
if Typing.is_function(func._target):
|
|
197
|
+
func_qualname = Typing.get_function_fullname(func._target)
|
|
198
|
+
self.__persisted_method_to_call_manager.add_function_to_call(
|
|
199
|
+
func_qualname, args_list=func._args, kwargs_dict=func._kwargs,
|
|
200
|
+
use="post_process", use_index=None)
|
|
201
|
+
return True
|
|
202
|
+
elif Typing.is_method(func._target):
|
|
203
|
+
meth_func = Typing.get_method_function(func._target)
|
|
204
|
+
func_qualname = Typing.get_function_fullname(meth_func)
|
|
205
|
+
meth_obj = Typing.get_method_object_instance(func._target)
|
|
206
|
+
self_getter_eval_str = SessionContext.instance().get_object_getter_eval_string(meth_obj, raise_not_found=False)
|
|
207
|
+
if self_getter_eval_str is not None:
|
|
208
|
+
self.__persisted_method_to_call_manager.add_method_to_call(
|
|
209
|
+
func_qualname, self_getter_eval_str, args_list=func._args, kwargs_dict=func._kwargs,
|
|
210
|
+
use="post_process", use_index=None)
|
|
211
|
+
return True
|
|
212
|
+
else:
|
|
213
|
+
raise TechnicalException(f"[{self.name}] Unmanaged target type '{Typing.get_object_class_fullname(func._target)}'")
|
|
214
|
+
except TechnicalException as exc:
|
|
215
|
+
raise exc
|
|
216
|
+
except Exception as exc:
|
|
217
|
+
logger.warning(f"[{self.name}] Failed to persist function {func}: {Tools.represent_exception(exc)}")
|
|
218
|
+
return False
|
|
219
|
+
|
|
220
|
+
def do_post_processes(self):
|
|
221
|
+
self.__verify_is_with_post_process()
|
|
222
|
+
|
|
223
|
+
# First call functions that were not persisted
|
|
224
|
+
for func in self.__post_process_funcs:
|
|
225
|
+
try:
|
|
226
|
+
func.run()
|
|
227
|
+
except Exception as exc:
|
|
228
|
+
# logger.error(f"Error while post processing [{func}]: {exc}")
|
|
229
|
+
logger.exception(f"[{self.name}] Error while post processing [{func}]: {exc}")
|
|
230
|
+
|
|
231
|
+
# Call persisted functions and methods
|
|
232
|
+
try:
|
|
233
|
+
self.do_persisted_post_processes()
|
|
234
|
+
except Exception as exc:
|
|
235
|
+
logger.exception(f"[{self.name}] Error while scenario post processing persisted methods: {exc}")
|
|
236
|
+
|
|
237
|
+
def do_persisted_post_processes(self):
|
|
238
|
+
"""Call functions and methods persisted by a previous context instance
|
|
239
|
+
Note: This is useful especially when a context was deleted (like on process kill) before post processes could be performed
|
|
240
|
+
"""
|
|
241
|
+
self.__verify_is_with_post_process()
|
|
242
|
+
|
|
243
|
+
self.__persisted_method_to_call_manager.call_functions_and_methods(use="post_process")
|
|
244
|
+
|
|
245
|
+
def get_number_of_persisted_post_processes_to_perform(self):
|
|
246
|
+
return self.__persisted_method_to_call_manager.get_number_of_functions_and_method_to_call()
|
|
247
|
+
|
|
248
|
+
|