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
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
#################################################
|
|
2
|
+
# HolAdo (Holistic Automation do)
|
|
3
|
+
#
|
|
4
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
5
|
+
#
|
|
6
|
+
# 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:
|
|
7
|
+
#
|
|
8
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
9
|
+
#
|
|
10
|
+
# 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.
|
|
11
|
+
#################################################
|
|
12
|
+
|
|
13
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
14
|
+
from holado_core.common.inspectors.tools.inspect_context import InspectContext
|
|
15
|
+
from holado_core.common.inspectors.tools.inspect_parameters import InspectParameters
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class InspectBuilder(object):
|
|
19
|
+
""" Inspect builder, used to create new InspectContext and InspectParameters.
|
|
20
|
+
|
|
21
|
+
It is used to store available modules and finder types with Inspector.default_inspect_builder,
|
|
22
|
+
and activated modules and finder types with Inspector.inspect_builder (or for GUI, GUIWindow.inspect_builder).
|
|
23
|
+
By default all available modules are activated it can be modified by overriding inspect_builder property in a new sub-class.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self):
|
|
27
|
+
self.__inspector = None
|
|
28
|
+
|
|
29
|
+
self.__module_names = []
|
|
30
|
+
self.__inspect_builder_by_module_name = {}
|
|
31
|
+
|
|
32
|
+
self.__default_context = None
|
|
33
|
+
self.__default_parameters = None
|
|
34
|
+
|
|
35
|
+
def initialize(self, inspector):
|
|
36
|
+
"""
|
|
37
|
+
@param inspector Inspector
|
|
38
|
+
"""
|
|
39
|
+
self.__inspector = inspector
|
|
40
|
+
|
|
41
|
+
@property
|
|
42
|
+
def inspector(self):
|
|
43
|
+
return self.__inspector
|
|
44
|
+
|
|
45
|
+
@property
|
|
46
|
+
def module_names(self):
|
|
47
|
+
"""
|
|
48
|
+
@return Module names in order of priority
|
|
49
|
+
"""
|
|
50
|
+
return self.__module_names
|
|
51
|
+
|
|
52
|
+
def add_module(self, module_name, module_inspect_builder = None):
|
|
53
|
+
"""
|
|
54
|
+
Add given module in list of managed modules, with given inspect builder
|
|
55
|
+
@param module_name Module name
|
|
56
|
+
@param module_inspect_builder Inspect builder to use with given module
|
|
57
|
+
"""
|
|
58
|
+
if module_name in self.__module_names:
|
|
59
|
+
raise TechnicalException(f"Module '{module_name}' already exists")
|
|
60
|
+
|
|
61
|
+
if module_inspect_builder is None:
|
|
62
|
+
module_inspector = self.__inspector.get_inspector_for_module(module_name)
|
|
63
|
+
module_inspect_builder = module_inspector.default_inspect_builder
|
|
64
|
+
|
|
65
|
+
self.__module_names.append(module_name)
|
|
66
|
+
self.__inspect_builder_by_module_name[module_name] = module_inspect_builder
|
|
67
|
+
|
|
68
|
+
def remove_module(self, module_name):
|
|
69
|
+
"""
|
|
70
|
+
Remove given module from managed modules
|
|
71
|
+
@param module_name Module name
|
|
72
|
+
"""
|
|
73
|
+
if module_name not in self.__module_names:
|
|
74
|
+
raise TechnicalException(f"Module '{module_name}' doesn't exist")
|
|
75
|
+
self.__module_names.remove(module_name)
|
|
76
|
+
self.__inspect_builder_by_module_name.remove(module_name)
|
|
77
|
+
|
|
78
|
+
def remove_all_modules(self):
|
|
79
|
+
"""
|
|
80
|
+
Remove all modules from managed modules
|
|
81
|
+
"""
|
|
82
|
+
self.__module_names.clear()
|
|
83
|
+
self.__inspect_builder_by_module_name.clear()
|
|
84
|
+
|
|
85
|
+
def get_inspect_builder_for_module(self, module_name):
|
|
86
|
+
"""
|
|
87
|
+
@param module_name Module name
|
|
88
|
+
@return Inspect builder for given module name
|
|
89
|
+
"""
|
|
90
|
+
if module_name not in self.__inspect_builder_by_module_name:
|
|
91
|
+
raise TechnicalException(f"Module '{module_name}' doesn't exist")
|
|
92
|
+
return self.__inspect_builder_by_module_name[module_name]
|
|
93
|
+
|
|
94
|
+
def get_parameters_for_module(self, module_name, inspect_parameters):
|
|
95
|
+
"""
|
|
96
|
+
@param module_name Module name
|
|
97
|
+
@param inspect_parameters Current inspect parameters
|
|
98
|
+
@return Module inspect parameters updated with current inspect parameter
|
|
99
|
+
"""
|
|
100
|
+
return self.get_inspect_builder_for_module(module_name).parameters().get_module_parameters(inspect_parameters)
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def default_context(self):
|
|
104
|
+
"""
|
|
105
|
+
Get or create default context.
|
|
106
|
+
This method is usually used to build the default context.
|
|
107
|
+
@return Default inspect context
|
|
108
|
+
"""
|
|
109
|
+
if self.__default_context is None:
|
|
110
|
+
self.__default_context = self._initialize_default_context()
|
|
111
|
+
return self.__default_context
|
|
112
|
+
|
|
113
|
+
def _initialize_default_context(self):
|
|
114
|
+
return InspectContext.default()
|
|
115
|
+
|
|
116
|
+
def context(self, inspect_context=None):
|
|
117
|
+
"""
|
|
118
|
+
@param inspect_context Inspect context to update
|
|
119
|
+
@return Updated inspect context
|
|
120
|
+
"""
|
|
121
|
+
res = inspect_context
|
|
122
|
+
if res is None:
|
|
123
|
+
res = self.default_context
|
|
124
|
+
return res
|
|
125
|
+
|
|
126
|
+
@property
|
|
127
|
+
def default_parameters(self):
|
|
128
|
+
"""
|
|
129
|
+
Get or create default parameters.
|
|
130
|
+
This method is usually used to build the default parameters.
|
|
131
|
+
@return Default inspect parameters
|
|
132
|
+
"""
|
|
133
|
+
if self.__default_parameters is None:
|
|
134
|
+
self.__default_parameters = self.initialize_default_parameters()
|
|
135
|
+
return self.__default_parameters
|
|
136
|
+
|
|
137
|
+
def initialize_default_parameters(self):
|
|
138
|
+
return InspectParameters.default_with_raise()
|
|
139
|
+
|
|
140
|
+
def parameters(self, inspect_parameters=None, raise_exception=None):
|
|
141
|
+
"""
|
|
142
|
+
@param inspect_parameters Inspect parameters to update
|
|
143
|
+
@param raise_exception Whether raise exceptions or not
|
|
144
|
+
@return Find parameters
|
|
145
|
+
"""
|
|
146
|
+
res = inspect_parameters
|
|
147
|
+
if res is None:
|
|
148
|
+
res = self.default_parameters
|
|
149
|
+
|
|
150
|
+
if raise_exception is not None:
|
|
151
|
+
res = res.with_raise(raise_exception)
|
|
152
|
+
|
|
153
|
+
return res
|
|
154
|
+
|
|
155
|
+
def parameters_with_raise(self):
|
|
156
|
+
"""
|
|
157
|
+
@return Default inspect parameters with raises
|
|
158
|
+
"""
|
|
159
|
+
return self.parameters(True)
|
|
160
|
+
|
|
161
|
+
def parameters_without_raise(self):
|
|
162
|
+
"""
|
|
163
|
+
@return Default inspect parameters without any raise
|
|
164
|
+
"""
|
|
165
|
+
return self.parameters(False)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#################################################
|
|
2
|
+
# HolAdo (Holistic Automation do)
|
|
3
|
+
#
|
|
4
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
5
|
+
#
|
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of self 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:
|
|
7
|
+
#
|
|
8
|
+
# The above copyright notice and self permission notice shall be included in all copies or substantial portions of the Software.
|
|
9
|
+
#
|
|
10
|
+
# 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.
|
|
11
|
+
#################################################
|
|
12
|
+
|
|
13
|
+
import copy
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class InspectContext(object):
|
|
17
|
+
""" Base inspect context
|
|
18
|
+
In usual use cases, the appropriate sub-class should be instantiated.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
__instance_default = None
|
|
22
|
+
|
|
23
|
+
def __init__(self, find_type=None, inspect_context=None):
|
|
24
|
+
if find_type is not None:
|
|
25
|
+
self.__find_type = find_type
|
|
26
|
+
elif inspect_context is not None:
|
|
27
|
+
self.__find_type = inspect_context.find_type
|
|
28
|
+
else:
|
|
29
|
+
self.__find_type = None
|
|
30
|
+
|
|
31
|
+
@property
|
|
32
|
+
def find_type(self):
|
|
33
|
+
"""
|
|
34
|
+
@return Find type
|
|
35
|
+
"""
|
|
36
|
+
return self.__find_type
|
|
37
|
+
|
|
38
|
+
def with_find_type(self, find_type):
|
|
39
|
+
"""
|
|
40
|
+
Note: if wanted find type is the same, self instance is returned, else a new one is returned
|
|
41
|
+
@param find_type Find type
|
|
42
|
+
@return Same context but with given find type
|
|
43
|
+
"""
|
|
44
|
+
if find_type == self.find_type:
|
|
45
|
+
return self
|
|
46
|
+
else:
|
|
47
|
+
res = copy.deepcopy(self)
|
|
48
|
+
res.find_type = find_type
|
|
49
|
+
return res
|
|
50
|
+
|
|
51
|
+
@staticmethod
|
|
52
|
+
def default(find_type=None):
|
|
53
|
+
"""
|
|
54
|
+
@return Default inspect context
|
|
55
|
+
"""
|
|
56
|
+
if InspectContext.__instance_default is None:
|
|
57
|
+
InspectContext.__instance_default = InspectContext()
|
|
58
|
+
res = InspectContext.__instance_default
|
|
59
|
+
|
|
60
|
+
if find_type is not None:
|
|
61
|
+
res = res.with_find_type(find_type)
|
|
62
|
+
|
|
63
|
+
return res
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
#################################################
|
|
2
|
+
# HolAdo (Holistic Automation do)
|
|
3
|
+
#
|
|
4
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
5
|
+
#
|
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of self 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:
|
|
7
|
+
#
|
|
8
|
+
# The above copyright notice and self permission notice shall be included in all copies or substantial portions of the Software.
|
|
9
|
+
#
|
|
10
|
+
# 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.
|
|
11
|
+
#################################################
|
|
12
|
+
|
|
13
|
+
import copy
|
|
14
|
+
from holado_core.common.finders.else_finder import ElseFinder
|
|
15
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class InspectParameters(object):
|
|
19
|
+
""" Inspect parameters
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
__instance_default = None
|
|
23
|
+
__instance_default_without_raise = None
|
|
24
|
+
|
|
25
|
+
def __init__(self, raise_no_such_finder=True, finder_types=None, result_finder_type=None):
|
|
26
|
+
"""
|
|
27
|
+
Constructor
|
|
28
|
+
@param raise_no_such_finder If True, raise NoSuchElementException, else return None, when no element is found.
|
|
29
|
+
@param finder_types Finder types to use
|
|
30
|
+
@param result_finder_type Type of finder result when multiple finders are possible
|
|
31
|
+
"""
|
|
32
|
+
self.raise_no_such_finder = raise_no_such_finder
|
|
33
|
+
self.finder_types = [] if finder_types is None else finder_types
|
|
34
|
+
self.result_finder_type = ElseFinder if result_finder_type is None else result_finder_type
|
|
35
|
+
|
|
36
|
+
def get_module_parameters(self, inspect_parameters):
|
|
37
|
+
"""
|
|
38
|
+
@param inspect_parameters Current inspect parameters
|
|
39
|
+
@return Module inspect parameters updated with current inspect parameter
|
|
40
|
+
"""
|
|
41
|
+
return self.with_result_finder_type(inspect_parameters.result_finder_type) \
|
|
42
|
+
.with_raise(inspect_parameters.raise_no_such_finder)
|
|
43
|
+
|
|
44
|
+
def set_raise(self, raise_exception):
|
|
45
|
+
"""
|
|
46
|
+
@param raise_exception Whether raise exceptions or not
|
|
47
|
+
"""
|
|
48
|
+
self.raise_no_such_finder = raise_exception
|
|
49
|
+
|
|
50
|
+
def with_raise(self, raise_exception=True):
|
|
51
|
+
"""
|
|
52
|
+
Note: if raise booleans are same, self instance is returned, else a new one is returned
|
|
53
|
+
@param raise_exception Whether raise exceptions or not
|
|
54
|
+
@return Same parameters but with raise
|
|
55
|
+
"""
|
|
56
|
+
if self.raise_no_such_finder == raise_exception:
|
|
57
|
+
return self
|
|
58
|
+
else:
|
|
59
|
+
res = copy.deepcopy(self)
|
|
60
|
+
res.raise_no_such_finder = raise_exception
|
|
61
|
+
return res
|
|
62
|
+
|
|
63
|
+
def without_raise(self):
|
|
64
|
+
"""
|
|
65
|
+
Note: if raise booleans are already False, self instance is returned, else a new one is returned
|
|
66
|
+
@return Same parameters but without raise
|
|
67
|
+
"""
|
|
68
|
+
return self.with_raise(False)
|
|
69
|
+
|
|
70
|
+
def add_finder_type(self, finder_type):
|
|
71
|
+
"""
|
|
72
|
+
@param finder_type Finder type to add
|
|
73
|
+
"""
|
|
74
|
+
if finder_type in self.finder_types:
|
|
75
|
+
raise TechnicalException(f"Finder type '{finder_type}' already exists")
|
|
76
|
+
self.finder_types.append(finder_type)
|
|
77
|
+
|
|
78
|
+
def add_finder_types(self, finder_types):
|
|
79
|
+
"""
|
|
80
|
+
@param finder_types Finder types to add
|
|
81
|
+
"""
|
|
82
|
+
for finder_type in finder_types:
|
|
83
|
+
self.add_finder_type(finder_type)
|
|
84
|
+
|
|
85
|
+
def remove_finder_type(self, finder_type):
|
|
86
|
+
"""
|
|
87
|
+
@param finder_type Finder type to remove
|
|
88
|
+
"""
|
|
89
|
+
if finder_type not in self.finder_types:
|
|
90
|
+
raise TechnicalException(f"Finder type '{finder_type}' doesn't exist")
|
|
91
|
+
self.finder_types.remove(finder_type)
|
|
92
|
+
|
|
93
|
+
def remove_finder_types(self, finder_types):
|
|
94
|
+
"""
|
|
95
|
+
@param finder_types Finder types to remove
|
|
96
|
+
"""
|
|
97
|
+
for finder_type in finder_types:
|
|
98
|
+
self.remove_finder_type(finder_type)
|
|
99
|
+
|
|
100
|
+
def remove_all_finder_types(self):
|
|
101
|
+
"""
|
|
102
|
+
Remove all finder types
|
|
103
|
+
"""
|
|
104
|
+
self.finder_types.clear()
|
|
105
|
+
|
|
106
|
+
def with_finder_type(self, finder_type):
|
|
107
|
+
"""
|
|
108
|
+
Note: if wanted finder type is already set, this instance is returned, else a new one is returned
|
|
109
|
+
@param finder_type Finder type
|
|
110
|
+
@return Same parameters but with given finder type
|
|
111
|
+
"""
|
|
112
|
+
if finder_type in self.finder_types:
|
|
113
|
+
return self
|
|
114
|
+
else:
|
|
115
|
+
res = copy.deepcopy(self)
|
|
116
|
+
res.finder_types.append(finder_type)
|
|
117
|
+
return res
|
|
118
|
+
|
|
119
|
+
def with_finder_types(self, finder_types):
|
|
120
|
+
"""
|
|
121
|
+
Note: if wanted finder types are already set, this instance is returned, else a new one is returned
|
|
122
|
+
@param finder_types Finder types
|
|
123
|
+
@return Same parameters but with given finder types
|
|
124
|
+
"""
|
|
125
|
+
res = self
|
|
126
|
+
for finder_type in finder_types:
|
|
127
|
+
res = res.with_find_type(finder_type)
|
|
128
|
+
return res
|
|
129
|
+
|
|
130
|
+
def set_result_finder_type(self, result_finder_type):
|
|
131
|
+
"""
|
|
132
|
+
@param result_finder_type Result finder type
|
|
133
|
+
"""
|
|
134
|
+
self.result_finder_type = result_finder_type
|
|
135
|
+
|
|
136
|
+
def with_result_finder_type(self, result_finder_type):
|
|
137
|
+
"""
|
|
138
|
+
Note: if given result finder class is already set, this instance is returned, else a new one is returned
|
|
139
|
+
@param result_finder_type Result finder class
|
|
140
|
+
@return Same parameters but with given result finder class
|
|
141
|
+
"""
|
|
142
|
+
if self.result_finder_type == result_finder_type:
|
|
143
|
+
return self
|
|
144
|
+
else:
|
|
145
|
+
res = copy.deepcopy(self)
|
|
146
|
+
res.result_finder_type = result_finder_type
|
|
147
|
+
return res
|
|
148
|
+
|
|
149
|
+
@staticmethod
|
|
150
|
+
def default(raise_exception=True):
|
|
151
|
+
"""
|
|
152
|
+
@param raise_exception Whether raise exceptions or not
|
|
153
|
+
@return Default inspect parameters with given raiseability
|
|
154
|
+
"""
|
|
155
|
+
if raise_exception:
|
|
156
|
+
return InspectParameters.default_with_raise()
|
|
157
|
+
else:
|
|
158
|
+
return InspectParameters.default_without_raise()
|
|
159
|
+
|
|
160
|
+
@staticmethod
|
|
161
|
+
def default_with_raise():
|
|
162
|
+
"""
|
|
163
|
+
@return Default find parameters with raises
|
|
164
|
+
"""
|
|
165
|
+
if InspectParameters.__instance_default is None:
|
|
166
|
+
InspectParameters.__instance_default = InspectParameters()
|
|
167
|
+
return InspectParameters.__instance_default
|
|
168
|
+
|
|
169
|
+
@staticmethod
|
|
170
|
+
def default_without_raise():
|
|
171
|
+
"""
|
|
172
|
+
@return Default find parameters without any raise
|
|
173
|
+
"""
|
|
174
|
+
if InspectParameters.__instance_default_without_raise is None:
|
|
175
|
+
InspectParameters.__instance_default_without_raise = InspectParameters(raise_no_such_finder=False)
|
|
176
|
+
return InspectParameters.__instance_default_without_raise
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#################################################
|
|
2
|
+
# HolAdo (Holistic Automation do)
|
|
3
|
+
#
|
|
4
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
5
|
+
#
|
|
6
|
+
# 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:
|
|
7
|
+
#
|
|
8
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
9
|
+
#
|
|
10
|
+
# 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.
|
|
11
|
+
#################################################
|
|
12
|
+
|
|
13
|
+
import logging
|
|
14
|
+
from holado_core.common.finders.then_finder import ThenFinder
|
|
15
|
+
from holado_core.common.inspectors.element_inspector import ElementInspector
|
|
16
|
+
from holado_core.common.finders.after_in_tree_finder import AfterInTreeFinder
|
|
17
|
+
import abc
|
|
18
|
+
from holado_core.common.inspectors.tools.inspect_parameters import InspectParameters
|
|
19
|
+
from holado_core.common.inspectors.tools.inspect_context import InspectContext
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class TreeInspector(ElementInspector):
|
|
26
|
+
""" Base class for inspector on tree elements.
|
|
27
|
+
"""
|
|
28
|
+
__metaclass__ = abc.ABCMeta
|
|
29
|
+
|
|
30
|
+
def __init__(self, module_name):
|
|
31
|
+
super().__init__(module_name)
|
|
32
|
+
|
|
33
|
+
"""
|
|
34
|
+
Find element with given finder, after element in tree found with given finder
|
|
35
|
+
@param finder_first Finder for first element
|
|
36
|
+
@param finder_after_first Finder for element to find after first one
|
|
37
|
+
@param inspect_context Inspect context
|
|
38
|
+
@param inspect_parameters Inspect parameters
|
|
39
|
+
@return Finder
|
|
40
|
+
"""
|
|
41
|
+
def get_finder_element_after(self, finder_first, finder_after_first, inspect_context:InspectContext=None, inspect_parameters:InspectParameters=None):
|
|
42
|
+
description = f"{finder_after_first.element_description} after {finder_first.element_description} in tree"
|
|
43
|
+
res = ThenFinder(description)
|
|
44
|
+
|
|
45
|
+
# Find first element
|
|
46
|
+
res.set_next_finder(finder_first)
|
|
47
|
+
|
|
48
|
+
# Then find in tree
|
|
49
|
+
res.set_next_finder( AfterInTreeFinder(finder_after_first, description) )
|
|
50
|
+
|
|
51
|
+
return self._build_result_finder(res, inspect_context, inspect_parameters)
|
|
52
|
+
|
|
53
|
+
def get_finder_parent(self, inspect_context:InspectContext=None, inspect_parameters:InspectParameters=None):
|
|
54
|
+
"""
|
|
55
|
+
Finder for parent
|
|
56
|
+
@param inspect_context Inspect context
|
|
57
|
+
@param inspect_parameters Inspect parameters
|
|
58
|
+
@return Finder
|
|
59
|
+
"""
|
|
60
|
+
raise NotImplementedError
|
|
61
|
+
|
|
62
|
+
def get_finder_children(self, inspect_context:InspectContext=None, inspect_parameters:InspectParameters=None):
|
|
63
|
+
"""
|
|
64
|
+
Finder for children
|
|
65
|
+
@param inspect_context Inspect context
|
|
66
|
+
@param inspect_parameters Inspect parameters
|
|
67
|
+
@return Finder
|
|
68
|
+
"""
|
|
69
|
+
raise NotImplementedError
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
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_core.common.exceptions.technical_exception import TechnicalException
|
|
16
|
+
from holado_core.common.tools.tools import Tools
|
|
17
|
+
import copy
|
|
18
|
+
from holado.common.handlers.undefined import undefined_argument
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class PersistedDataManager():
|
|
25
|
+
"""
|
|
26
|
+
Manage data persisted in a dedicated table.
|
|
27
|
+
"""
|
|
28
|
+
def __init__(self, data_name, table_name, table_sql_create, db_name="default", do_audit=False):
|
|
29
|
+
self.__data_name = data_name
|
|
30
|
+
self.__table_name = table_name
|
|
31
|
+
self.__table_sql_create = table_sql_create
|
|
32
|
+
self.__db_name = db_name
|
|
33
|
+
self.__do_audit = do_audit
|
|
34
|
+
|
|
35
|
+
self.__resource_manager = None
|
|
36
|
+
|
|
37
|
+
def initialize(self, resource_manager):
|
|
38
|
+
self.__resource_manager = resource_manager
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def table_name(self):
|
|
42
|
+
return self.__table_name
|
|
43
|
+
|
|
44
|
+
def does_persistent_db_exist(self):
|
|
45
|
+
return self.__resource_manager.has_data_table(self.__table_name, db_name=self.__db_name, is_persistent=True) \
|
|
46
|
+
and self.__resource_manager.check_data_table_schema(self.__table_name, self.__table_sql_create, db_name=self.__db_name, is_persistent=True)
|
|
47
|
+
|
|
48
|
+
def ensure_persistent_db_exists(self):
|
|
49
|
+
if self.__resource_manager.has_data_table(self.__table_name, db_name=self.__db_name, is_persistent=True):
|
|
50
|
+
if self.__resource_manager.check_data_table_schema(self.__table_name, self.__table_sql_create, db_name=self.__db_name, is_persistent=True):
|
|
51
|
+
# Table already exists with the right schema
|
|
52
|
+
return
|
|
53
|
+
else:
|
|
54
|
+
# Table already exists but with wrong schema => delete table before creating it again
|
|
55
|
+
self.__resource_manager.delete_data_table(self.__table_name, db_name=self.__db_name, is_persistent=True, raise_if_not_exist=True, do_commit=True)
|
|
56
|
+
|
|
57
|
+
# Create table
|
|
58
|
+
# Note: method create_data_table raise an exception if it doesn't succeed to create the table
|
|
59
|
+
self.__resource_manager.create_data_table(self.__table_name, self.__table_sql_create, db_name=self.__db_name, is_persistent=True, raise_if_exist=True, do_commit=True, do_audit=self.__do_audit)
|
|
60
|
+
|
|
61
|
+
def has_persisted_data(self, filter_data=None, filter_compare_data=None):
|
|
62
|
+
return self.__resource_manager.has_data(self.__table_name, where_data=filter_data, where_compare_data=filter_compare_data, db_name=self.__db_name, is_persistent=True)
|
|
63
|
+
|
|
64
|
+
def get_persisted_datas(self, filter_data=None, filter_compare_data=None, as_generator=False):
|
|
65
|
+
"""
|
|
66
|
+
Note: Whereas 'data' is already a plural, a 's' is added in method name to be coherent with other method names
|
|
67
|
+
"""
|
|
68
|
+
return self.__resource_manager.get_data(self.__table_name, where_data=filter_data, where_compare_data=filter_compare_data, db_name=self.__db_name, is_persistent=True, result_as_dict_list=True, as_generator=as_generator)
|
|
69
|
+
|
|
70
|
+
def get_persisted_data(self, filter_data=None, filter_compare_data=None):
|
|
71
|
+
"""
|
|
72
|
+
Note: Whereas 'datum' should be the right word in method name since method returns only one datum, method is named with 'data' in its usual singular meaning for most people.
|
|
73
|
+
"""
|
|
74
|
+
data = self.get_persisted_datas(filter_data=filter_data, filter_compare_data=filter_compare_data)
|
|
75
|
+
if len(data) > 1:
|
|
76
|
+
raise TechnicalException(f"Too many ({len(data)}) {self.__data_name} found for filter {filter_data}.")
|
|
77
|
+
elif len(data) == 1:
|
|
78
|
+
return data[0]
|
|
79
|
+
else:
|
|
80
|
+
return None
|
|
81
|
+
|
|
82
|
+
def count_persisted_data(self, filter_data=None, filter_compare_data=None):
|
|
83
|
+
return self.__resource_manager.count_data(self.__table_name, where_data=filter_data, where_compare_data=filter_compare_data, db_name=self.__db_name, is_persistent=True)
|
|
84
|
+
|
|
85
|
+
def update_persisted_data(self, data, filter_data=None, filter_compare_data=None):
|
|
86
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
87
|
+
logger.debug(f"Update persisted {self.__data_name} for {filter_data} and {filter_compare_data}: {data}")
|
|
88
|
+
self.__resource_manager.update_data(self.__table_name, data, where_data=filter_data, where_compare_data=filter_compare_data, db_name=self.__db_name, is_persistent=True)
|
|
89
|
+
|
|
90
|
+
def add_persisted_data(self, data, persisted_filter_data=None):
|
|
91
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
92
|
+
logger.debug(f"Add persisted {self.__data_name} for {persisted_filter_data}: {data}")
|
|
93
|
+
data = copy.copy(data)
|
|
94
|
+
if persisted_filter_data:
|
|
95
|
+
data.update(persisted_filter_data)
|
|
96
|
+
self.__resource_manager.add_data(self.__table_name, data, db_name=self.__db_name, is_persistent=True)
|
|
97
|
+
|
|
98
|
+
def update_or_add_persisted_data(self, persisted_filter_data, data, persisted_data=undefined_argument):
|
|
99
|
+
if persisted_data is undefined_argument:
|
|
100
|
+
has_persisted_data = self.has_persisted_data(persisted_filter_data)
|
|
101
|
+
else:
|
|
102
|
+
has_persisted_data = persisted_data is not None
|
|
103
|
+
|
|
104
|
+
if has_persisted_data:
|
|
105
|
+
self.update_persisted_data(data, filter_data=persisted_filter_data)
|
|
106
|
+
else:
|
|
107
|
+
self.add_persisted_data(data, persisted_filter_data)
|
|
108
|
+
|
|
109
|
+
def delete_persisted_data(self, filter_data):
|
|
110
|
+
self.__resource_manager.delete_data(self.__table_name, where_data=filter_data, db_name=self.__db_name, is_persistent=True)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|