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,238 @@
|
|
|
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.exceptions.functional_exception import FunctionalException
|
|
17
|
+
from holado_core.common.tools.tools import Tools
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ScopeManager(object):
|
|
23
|
+
'''
|
|
24
|
+
Manage scopes.
|
|
25
|
+
'''
|
|
26
|
+
|
|
27
|
+
def __init__(self):
|
|
28
|
+
self.__scope_info_by_thread_and_type = {}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# Manage scope info
|
|
32
|
+
|
|
33
|
+
def scope_info(self, scope_type, thread_id=None):
|
|
34
|
+
if thread_id is None:
|
|
35
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
36
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
37
|
+
self.__ensure_scope_info_exists(scope_type, thread_id)
|
|
38
|
+
return self.__scope_info_by_thread_and_type[thread_id][scope_type]
|
|
39
|
+
|
|
40
|
+
def __check_scope_info_exists(self, scope_type, thread_id, raise_exception=True):
|
|
41
|
+
res = thread_id in self.__scope_info_by_thread_and_type and scope_type in self.__scope_info_by_thread_and_type[thread_id]
|
|
42
|
+
if not res and raise_exception:
|
|
43
|
+
raise FunctionalException(f"Scope info doesn't exist (thread: {thread_id} ; scope type: {scope_type})")
|
|
44
|
+
return res
|
|
45
|
+
|
|
46
|
+
def __ensure_scope_info_exists(self, scope_type, thread_id):
|
|
47
|
+
if thread_id not in self.__scope_info_by_thread_and_type:
|
|
48
|
+
self.__scope_info_by_thread_and_type[thread_id] = {}
|
|
49
|
+
if scope_type not in self.__scope_info_by_thread_and_type[thread_id]:
|
|
50
|
+
self.__scope_info_by_thread_and_type[thread_id][scope_type] = {}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Manage scope levels
|
|
54
|
+
|
|
55
|
+
def has_scope_level(self, scope_type, thread_id=None):
|
|
56
|
+
if thread_id is None:
|
|
57
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
58
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
59
|
+
return self.__check_scope_level_exists(scope_type, thread_id, raise_exception=False)
|
|
60
|
+
|
|
61
|
+
def scope_level(self, scope_type, thread_id=None):
|
|
62
|
+
if thread_id is None:
|
|
63
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
64
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
65
|
+
self.__ensure_scope_level_exists(scope_type, thread_id)
|
|
66
|
+
return self.scope_info(scope_type, thread_id)["level"]
|
|
67
|
+
|
|
68
|
+
def __check_scope_level_exists(self, scope_type, thread_id, raise_exception=True):
|
|
69
|
+
res = self.__check_scope_info_exists(scope_type, thread_id, raise_exception) and "level" in self.scope_info(scope_type, thread_id)
|
|
70
|
+
if not res and raise_exception:
|
|
71
|
+
raise FunctionalException(f"Scope level doesn't exist (thread: {thread_id} ; scope type: {scope_type})")
|
|
72
|
+
return res
|
|
73
|
+
|
|
74
|
+
def __ensure_scope_level_exists(self, scope_type, thread_id):
|
|
75
|
+
self.__ensure_scope_info_exists(scope_type, thread_id)
|
|
76
|
+
if "level" not in self.__scope_info_by_thread_and_type[thread_id][scope_type]:
|
|
77
|
+
self.__scope_info_by_thread_and_type[thread_id][scope_type]["level"] = 0
|
|
78
|
+
|
|
79
|
+
def reset_scope_level(self, scope_type=None, level=0, thread_id=None):
|
|
80
|
+
"""
|
|
81
|
+
Reset a scope level to given level.
|
|
82
|
+
If scope_type is None, all scope types of the thread are reset.
|
|
83
|
+
"""
|
|
84
|
+
if thread_id is None:
|
|
85
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
86
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
87
|
+
|
|
88
|
+
if scope_type is None:
|
|
89
|
+
if thread_id in self.__scope_info_by_thread_and_type:
|
|
90
|
+
for s_type in self.__scope_info_by_thread_and_type[thread_id]:
|
|
91
|
+
self.reset_scope_level(s_type, level, thread_id)
|
|
92
|
+
else:
|
|
93
|
+
if self.scope_level(scope_type, thread_id) != level:
|
|
94
|
+
self.__scope_info_by_thread_and_type[thread_id][scope_type]["level"] = level
|
|
95
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
96
|
+
logger.debug(f"Scope level reset to {level} (thread: {thread_id} ; scope type: {scope_type})")
|
|
97
|
+
|
|
98
|
+
def increase_scope_level(self, scope_type, thread_id=None):
|
|
99
|
+
if thread_id is None:
|
|
100
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
101
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
102
|
+
self.__ensure_scope_level_exists(scope_type, thread_id)
|
|
103
|
+
|
|
104
|
+
self.__scope_info_by_thread_and_type[thread_id][scope_type]["level"] += 1
|
|
105
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
106
|
+
logger.debug(f"Scope level increased to {self.__scope_info_by_thread_and_type[thread_id][scope_type]['level']} (thread {thread_id} ; scope type: {scope_type})")
|
|
107
|
+
|
|
108
|
+
def decrease_scope_level(self, scope_type, thread_id=None):
|
|
109
|
+
if thread_id is None:
|
|
110
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
111
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
112
|
+
self.__ensure_scope_level_exists(scope_type, thread_id)
|
|
113
|
+
|
|
114
|
+
self.__scope_info_by_thread_and_type[thread_id][scope_type]["level"] -= 1
|
|
115
|
+
if self.__scope_info_by_thread_and_type[thread_id][scope_type]["level"] < 0:
|
|
116
|
+
raise TechnicalException(f"Scope level decreased under 0 (thread {thread_id} ; scope type: {scope_type})")
|
|
117
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
118
|
+
logger.debug(f"Scope level decreased to {self.__scope_info_by_thread_and_type[thread_id][scope_type]['level']} (thread {thread_id} ; scope type: {scope_type})")
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
# Manage conditions scopes
|
|
122
|
+
|
|
123
|
+
def log_conditions_info(self, prefix_message, thread_id=None):
|
|
124
|
+
scope_info = self.scope_info("conditions", thread_id)
|
|
125
|
+
if not prefix_message.endswith("."):
|
|
126
|
+
prefix_message += "."
|
|
127
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
128
|
+
logger.debug(f"{prefix_message} Conditions info: {scope_info}")
|
|
129
|
+
|
|
130
|
+
def increase_condition_level(self, thread_id=None):
|
|
131
|
+
self.increase_scope_level("conditions", thread_id)
|
|
132
|
+
|
|
133
|
+
scope_info = self.scope_info("conditions", thread_id)
|
|
134
|
+
if "levels_data" not in scope_info:
|
|
135
|
+
scope_info["levels_data"] = []
|
|
136
|
+
if len(scope_info["levels_data"]) != scope_info["level"] - 1:
|
|
137
|
+
raise TechnicalException(f"levels_data has size {len(scope_info['levels_data'])} whereas level is {scope_info['level']}")
|
|
138
|
+
scope_info["levels_data"].append({"is_valid":False, "had_valid":False})
|
|
139
|
+
|
|
140
|
+
self.log_conditions_info("Increased condition level")
|
|
141
|
+
|
|
142
|
+
def decrease_condition_level(self, thread_id=None):
|
|
143
|
+
self.decrease_scope_level("conditions", thread_id)
|
|
144
|
+
|
|
145
|
+
scope_info = self.scope_info("conditions", thread_id)
|
|
146
|
+
if len(scope_info["levels_data"]) != scope_info["level"] + 1:
|
|
147
|
+
raise TechnicalException(f"levels_data has size {len(scope_info['levels_data'])} whereas level is {scope_info['level']}")
|
|
148
|
+
scope_info["levels_data"].pop()
|
|
149
|
+
|
|
150
|
+
self.log_conditions_info("Decreased condition level")
|
|
151
|
+
|
|
152
|
+
def is_in_condition(self, thread_id=None):
|
|
153
|
+
if thread_id is None:
|
|
154
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
155
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
156
|
+
return self.__check_scope_level_exists("conditions", thread_id, raise_exception=False) \
|
|
157
|
+
and self.scope_level("conditions", thread_id) > 0
|
|
158
|
+
|
|
159
|
+
def is_in_valid_condition(self, thread_id=None):
|
|
160
|
+
if thread_id is None:
|
|
161
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
162
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
163
|
+
res = False
|
|
164
|
+
if self.is_in_condition(thread_id):
|
|
165
|
+
scope_info = self.scope_info("conditions", thread_id)
|
|
166
|
+
res = scope_info["levels_data"][-1]["is_valid"]
|
|
167
|
+
return res
|
|
168
|
+
|
|
169
|
+
def had_valid_condition(self, thread_id=None):
|
|
170
|
+
if thread_id is None:
|
|
171
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
172
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
173
|
+
res = False
|
|
174
|
+
if self.is_in_condition(thread_id):
|
|
175
|
+
scope_info = self.scope_info("conditions", thread_id)
|
|
176
|
+
res = scope_info["levels_data"][-1]["had_valid"]
|
|
177
|
+
return res
|
|
178
|
+
|
|
179
|
+
def enter_in_valid_condition(self, thread_id=None):
|
|
180
|
+
if thread_id is None:
|
|
181
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
182
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
183
|
+
if not self.is_in_condition(thread_id):
|
|
184
|
+
raise TechnicalException(f"Not in a condition (conditions info: {self.scope_info('conditions', thread_id)})")
|
|
185
|
+
|
|
186
|
+
scope_info = self.scope_info("conditions", thread_id)
|
|
187
|
+
scope_info["levels_data"][-1]["is_valid"] = True
|
|
188
|
+
|
|
189
|
+
def leave_condition(self, thread_id=None):
|
|
190
|
+
if thread_id is None:
|
|
191
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
192
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
193
|
+
if not self.is_in_condition(thread_id):
|
|
194
|
+
raise TechnicalException(f"Not in a condition (conditions info: {self.scope_info('conditions', thread_id)})")
|
|
195
|
+
|
|
196
|
+
scope_info = self.scope_info("conditions", thread_id)
|
|
197
|
+
if scope_info["levels_data"][-1]["is_valid"]:
|
|
198
|
+
scope_info["levels_data"][-1]["is_valid"] = False
|
|
199
|
+
scope_info["levels_data"][-1]["had_valid"] = True
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
# Manage steps scope
|
|
203
|
+
|
|
204
|
+
def set_step_context(self, step_context, thread_id=None):
|
|
205
|
+
if thread_id is None:
|
|
206
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
207
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
208
|
+
|
|
209
|
+
scope_info = self.scope_info("steps")
|
|
210
|
+
if "levels_data" not in scope_info:
|
|
211
|
+
scope_info["levels_data"] = []
|
|
212
|
+
|
|
213
|
+
step_level = self.scope_level("steps")
|
|
214
|
+
if step_level + 1 < len(scope_info["levels_data"]):
|
|
215
|
+
scope_info["levels_data"] = scope_info["levels_data"][0:step_level+1]
|
|
216
|
+
for level in range(step_level+1):
|
|
217
|
+
if level + 1 > len(scope_info["levels_data"]):
|
|
218
|
+
scope_info["levels_data"].append({})
|
|
219
|
+
|
|
220
|
+
scope_info["levels_data"][step_level]["step_context"] = step_context
|
|
221
|
+
|
|
222
|
+
def get_step_context(self, thread_id=None):
|
|
223
|
+
if thread_id is None:
|
|
224
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
225
|
+
thread_id = MultitaskManager.get_thread_id()
|
|
226
|
+
|
|
227
|
+
scope_info = self.scope_info("steps")
|
|
228
|
+
if "levels_data" not in scope_info:
|
|
229
|
+
raise TechnicalException(f"No step level is registered")
|
|
230
|
+
|
|
231
|
+
step_level = self.scope_level("steps")
|
|
232
|
+
if step_level >= len(scope_info["levels_data"]):
|
|
233
|
+
raise TechnicalException(f"Step level {step_level} is not registered")
|
|
234
|
+
if "step_context" not in scope_info["levels_data"][step_level]:
|
|
235
|
+
raise TechnicalException(f"No step context is registered for level {step_level}")
|
|
236
|
+
|
|
237
|
+
return scope_info["levels_data"][step_level]["step_context"]
|
|
238
|
+
|
|
@@ -0,0 +1,141 @@
|
|
|
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
|
+
from builtins import super
|
|
15
|
+
import logging
|
|
16
|
+
from holado_core.common.block.base import BaseScope
|
|
17
|
+
from holado_core.common.block.block_steps import BlockSteps
|
|
18
|
+
from holado_test.behave.behave import execute_steps
|
|
19
|
+
from holado_core.common.tools.converters.converter import Converter
|
|
20
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
21
|
+
from holado_core.common.tools.tools import Tools
|
|
22
|
+
from holado_python.standard_library.typing import Typing
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ScopeSteps(BaseScope):
|
|
28
|
+
'''
|
|
29
|
+
Scope block that should only contains steps.
|
|
30
|
+
This scope block is used when a new scope (function, for,...) is defined in a scenario.
|
|
31
|
+
|
|
32
|
+
When processing this scope, a 'context' is supposed to be passed as parameter to 'process' method
|
|
33
|
+
Warning: it remains possible to add any block, not only steps. Be carefull that added blocks are compatible with parameter 'context' passed to 'process' method.
|
|
34
|
+
'''
|
|
35
|
+
|
|
36
|
+
def __init__(self, name, ID=None):
|
|
37
|
+
super().__init__(f"steps scope {name}", ID=ID)
|
|
38
|
+
|
|
39
|
+
def add_steps(self, steps_str):
|
|
40
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
41
|
+
logger.debug(f"In scope '{self.name}', add steps:\n{steps_str}")
|
|
42
|
+
self.add_block( BlockSteps(steps_str) )
|
|
43
|
+
|
|
44
|
+
class ScopeForSteps(ScopeSteps):
|
|
45
|
+
def __init__(self, name, iter_var_name, iterable, ID=None, variable_manager=None, scope_manager=None):
|
|
46
|
+
super().__init__(name, ID=ID)
|
|
47
|
+
|
|
48
|
+
self.__iter_var_name = iter_var_name
|
|
49
|
+
self.__iterable = iterable
|
|
50
|
+
|
|
51
|
+
self.__variable_manager = variable_manager
|
|
52
|
+
self.__scope_manager = scope_manager
|
|
53
|
+
|
|
54
|
+
def process(self, *args, **kwargs):
|
|
55
|
+
"""
|
|
56
|
+
Process the scope.
|
|
57
|
+
Returns last scope step result
|
|
58
|
+
"""
|
|
59
|
+
res = None
|
|
60
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
61
|
+
logger.debug(f"Processing scope [{self.name}]: begin")
|
|
62
|
+
|
|
63
|
+
self._process_start()
|
|
64
|
+
try:
|
|
65
|
+
for index, value in enumerate(self.__iterable):
|
|
66
|
+
execute_steps(u"""
|
|
67
|
+
Given FOR_INDEX_{iter_var_name} = {index}
|
|
68
|
+
""".format(iter_var_name=self.__iter_var_name, index=index))
|
|
69
|
+
self.__variable_manager.register_variable(self.__iter_var_name, value)
|
|
70
|
+
|
|
71
|
+
if self.__scope_manager:
|
|
72
|
+
level_already_exists = self.__scope_manager.has_scope_level("steps")
|
|
73
|
+
origin_level = self.__scope_manager.scope_level("steps")
|
|
74
|
+
if level_already_exists:
|
|
75
|
+
self.__scope_manager.increase_scope_level("steps")
|
|
76
|
+
|
|
77
|
+
try:
|
|
78
|
+
self._process_blocks(*args, **kwargs)
|
|
79
|
+
finally:
|
|
80
|
+
if self.__scope_manager:
|
|
81
|
+
self.__scope_manager.reset_scope_level("steps", origin_level)
|
|
82
|
+
finally:
|
|
83
|
+
self._process_end()
|
|
84
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
85
|
+
logger.debug(f"Processing scope [{self.name}]: end")
|
|
86
|
+
|
|
87
|
+
return res
|
|
88
|
+
|
|
89
|
+
class ScopeWhileSteps(ScopeSteps):
|
|
90
|
+
def __init__(self, name, condition_expression, ID=None, expression_evaluator=None, scope_manager=None):
|
|
91
|
+
super().__init__(name, ID=ID)
|
|
92
|
+
|
|
93
|
+
self.__condition_expression = condition_expression
|
|
94
|
+
|
|
95
|
+
self.__expression_evaluator = expression_evaluator
|
|
96
|
+
self.__scope_manager = scope_manager
|
|
97
|
+
|
|
98
|
+
def process(self, *args, **kwargs):
|
|
99
|
+
"""
|
|
100
|
+
Process the scope.
|
|
101
|
+
Returns last scope step result
|
|
102
|
+
"""
|
|
103
|
+
res = None
|
|
104
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
105
|
+
logger.debug(f"Processing scope [{self.name}]: begin")
|
|
106
|
+
|
|
107
|
+
self._process_start()
|
|
108
|
+
try:
|
|
109
|
+
n = 0
|
|
110
|
+
_, cond = self.__expression_evaluator.evaluate_python_expression(self.__condition_expression)
|
|
111
|
+
if not (isinstance(cond, bool) or Converter.is_boolean(cond)):
|
|
112
|
+
raise FunctionalException(f"Condition expression is not a boolean: [{self.__condition_expression}] => [{cond}] (type: {Typing.get_object_class_fullname(cond)})")
|
|
113
|
+
|
|
114
|
+
while isinstance(cond, bool) and cond or Converter.is_boolean(cond) and Converter.to_boolean(cond):
|
|
115
|
+
n += 1
|
|
116
|
+
execute_steps(u"""
|
|
117
|
+
Given WHILE_ITERATION = {n}
|
|
118
|
+
""".format(n=n))
|
|
119
|
+
|
|
120
|
+
if self.__scope_manager:
|
|
121
|
+
level_already_exists = self.__scope_manager.has_scope_level("steps")
|
|
122
|
+
origin_level = self.__scope_manager.scope_level("steps")
|
|
123
|
+
if level_already_exists:
|
|
124
|
+
self.__scope_manager.increase_scope_level("steps")
|
|
125
|
+
|
|
126
|
+
try:
|
|
127
|
+
self._process_blocks(*args, **kwargs)
|
|
128
|
+
finally:
|
|
129
|
+
if self.__scope_manager:
|
|
130
|
+
self.__scope_manager.reset_scope_level("steps", origin_level)
|
|
131
|
+
|
|
132
|
+
_, cond = self.__expression_evaluator.evaluate_python_expression(self.__condition_expression)
|
|
133
|
+
if not (isinstance(cond, bool) or Converter.is_boolean(cond)):
|
|
134
|
+
raise FunctionalException(f"Condition expression is not a boolean: [{self.__condition_expression}] => [{cond}] (type: {Typing.get_object_class_fullname(cond)})")
|
|
135
|
+
finally:
|
|
136
|
+
self._process_end()
|
|
137
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
138
|
+
logger.debug(f"Processing scope [{self.name}]: end")
|
|
139
|
+
|
|
140
|
+
return res
|
|
141
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
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.criterias.tools.criteria_context import CriteriaContext
|
|
14
|
+
from holado_core.common.criterias.tools.criteria_parameters import CriteriaParameters
|
|
15
|
+
import logging
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class AndCriteria(object):
|
|
22
|
+
""" Criteria that makes a logical or between added criterias.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(self):
|
|
26
|
+
self.__criterias = []
|
|
27
|
+
|
|
28
|
+
@property
|
|
29
|
+
def criterias(self):
|
|
30
|
+
return self.__criterias
|
|
31
|
+
|
|
32
|
+
def add_criteria(self, criteria):
|
|
33
|
+
"""
|
|
34
|
+
Add a criteria in and validation.
|
|
35
|
+
@param criteria Criteria
|
|
36
|
+
"""
|
|
37
|
+
self.__criterias.append(criteria)
|
|
38
|
+
|
|
39
|
+
def validate_element(self, element, criteria_context: CriteriaContext, criteria_parameters: CriteriaParameters):
|
|
40
|
+
return super().validate_element(element, criteria_context, criteria_parameters) \
|
|
41
|
+
and self.__validate_criterias(element, criteria_context, criteria_parameters)
|
|
42
|
+
|
|
43
|
+
def __validate_criterias(self, element, criteria_context, criteria_parameters):
|
|
44
|
+
res = True
|
|
45
|
+
sub_parameters = criteria_parameters.get_next_level()
|
|
46
|
+
|
|
47
|
+
for criteria in self.criterias:
|
|
48
|
+
if not criteria.validate(element, criteria_context, sub_parameters):
|
|
49
|
+
res = False
|
|
50
|
+
break
|
|
51
|
+
|
|
52
|
+
return res
|
|
53
|
+
|
|
54
|
+
def __str__(self):
|
|
55
|
+
res_criterias = []
|
|
56
|
+
for index, criteria in self.criterias:
|
|
57
|
+
res_criterias.append(f"{index}:{{{criteria}}}")
|
|
58
|
+
return super().__str__() + "&{" + "&".join(res_criterias) + "}"
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
@@ -0,0 +1,78 @@
|
|
|
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.tools.tools import Tools
|
|
15
|
+
from holado_core.common.criterias.tools.criteria_context import CriteriaContext,\
|
|
16
|
+
ContainerCriteriaContext
|
|
17
|
+
from holado_core.common.criterias.tools.criteria_parameters import CriteriaParameters
|
|
18
|
+
from holado.holado_config import Config
|
|
19
|
+
import logging
|
|
20
|
+
import abc
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class Criteria(object):
|
|
27
|
+
""" Base class of a family used to validate elements.
|
|
28
|
+
"""
|
|
29
|
+
__metaclass__ = abc.ABCMeta
|
|
30
|
+
|
|
31
|
+
def validate(self, element, criteria_context: CriteriaContext, criteria_parameters: CriteriaParameters):
|
|
32
|
+
""" Verify if element verifies expected criteria.
|
|
33
|
+
If element is None and criteria_context is a ContainerCriteriaContext, criteria_context.container is used as element
|
|
34
|
+
@param element Element to validate
|
|
35
|
+
@param criteria_context Criteria context
|
|
36
|
+
@param criteria_parameters Criteria parameters
|
|
37
|
+
@return True if given element verifies expected criteria
|
|
38
|
+
"""
|
|
39
|
+
if element is None:
|
|
40
|
+
if isinstance(criteria_context, ContainerCriteriaContext) and criteria_context.container is not None:
|
|
41
|
+
return self.validate(criteria_context.container, criteria_context, criteria_parameters)
|
|
42
|
+
else:
|
|
43
|
+
raise TechnicalException("Find context has no container")
|
|
44
|
+
|
|
45
|
+
# Prepare analyze time spent
|
|
46
|
+
if criteria_parameters.analyze_time_spent:
|
|
47
|
+
start = Tools.timer_s()
|
|
48
|
+
|
|
49
|
+
res = self.validate_element(element, criteria_context, criteria_parameters)
|
|
50
|
+
|
|
51
|
+
# Analyze time spent
|
|
52
|
+
if criteria_parameters.analyze_time_spent:
|
|
53
|
+
duration = Tools.timer_s() - start
|
|
54
|
+
if duration > Config.threshold_warn_time_spent_s:
|
|
55
|
+
logger.warning(f"{self._get_indent_string_level(criteria_parameters)}[{self}].validate({element}) -> {res} (took {duration} s)")
|
|
56
|
+
|
|
57
|
+
return res
|
|
58
|
+
|
|
59
|
+
def validate_element(self, element, criteria_context: CriteriaContext, criteria_parameters: CriteriaParameters):
|
|
60
|
+
return True
|
|
61
|
+
|
|
62
|
+
def __str__(self):
|
|
63
|
+
return self.__class__.__name__
|
|
64
|
+
|
|
65
|
+
def reset(self):
|
|
66
|
+
""" Reset the criteria."""
|
|
67
|
+
pass
|
|
68
|
+
|
|
69
|
+
def _get_indent_string_level(self, criteria_parameters: CriteriaParameters=None, level=None):
|
|
70
|
+
if level is not None:
|
|
71
|
+
return Tools.get_indent_string(level * 4)
|
|
72
|
+
elif criteria_parameters is not None:
|
|
73
|
+
return self._get_indent_string_level(level=criteria_parameters.find_level)
|
|
74
|
+
else:
|
|
75
|
+
raise TechnicalException("level or criteria_parameters must be defined")
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
@@ -0,0 +1,64 @@
|
|
|
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.criterias.tools.criteria_context import CriteriaContext
|
|
14
|
+
from holado_core.common.criterias.tools.criteria_parameters import CriteriaParameters
|
|
15
|
+
import logging
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class OrCriteria(object):
|
|
22
|
+
""" Criteria that makes a logical or between added criterias.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(self):
|
|
26
|
+
self.__criterias = []
|
|
27
|
+
|
|
28
|
+
@property
|
|
29
|
+
def criterias(self):
|
|
30
|
+
return self.__criterias
|
|
31
|
+
|
|
32
|
+
def add_criteria(self, criteria):
|
|
33
|
+
"""
|
|
34
|
+
Add a criteria in or validation.
|
|
35
|
+
@param criteria Criteria
|
|
36
|
+
"""
|
|
37
|
+
self.__criterias.append(criteria)
|
|
38
|
+
|
|
39
|
+
def validate_element(self, element, criteria_context: CriteriaContext, criteria_parameters: CriteriaParameters):
|
|
40
|
+
return super().validate_element(element, criteria_context, criteria_parameters) \
|
|
41
|
+
and self.__validate_criterias(element, criteria_context, criteria_parameters)
|
|
42
|
+
|
|
43
|
+
def __validate_criterias(self, element, criteria_context, criteria_parameters):
|
|
44
|
+
if len(self.criterias) == 0:
|
|
45
|
+
return True
|
|
46
|
+
|
|
47
|
+
res = False
|
|
48
|
+
sub_parameters = criteria_parameters.get_next_level()
|
|
49
|
+
|
|
50
|
+
for criteria in self.criterias:
|
|
51
|
+
if criteria.validate(element, criteria_context, sub_parameters):
|
|
52
|
+
res = True
|
|
53
|
+
break
|
|
54
|
+
|
|
55
|
+
return res
|
|
56
|
+
|
|
57
|
+
def __str__(self):
|
|
58
|
+
res_criterias = []
|
|
59
|
+
for index, criteria in self.criterias:
|
|
60
|
+
res_criterias.append(f"{index}:{{{criteria}}}")
|
|
61
|
+
return super().__str__() + "&{" + "|".join(res_criterias) + "}"
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
from holado_core.common.finders.tools.find_context import FindContext,\
|
|
14
|
+
WithRootContainerFindContext, ContainerFindContext
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
CriteriaContext = FindContext
|
|
18
|
+
WithRootContainerCriteriaContext = WithRootContainerFindContext
|
|
19
|
+
ContainerCriteriaContext = ContainerFindContext
|
|
20
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
from holado_core.common.finders.tools.find_parameters import FindParameters
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
CriteriaParameters = FindParameters
|
|
17
|
+
|
|
18
|
+
|