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,405 @@
|
|
|
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.tools.find_updater import FindUpdater
|
|
15
|
+
from holado_core.common.finders.tools.enums import FindType
|
|
16
|
+
from holado_core.common.handlers.element_holder import ElementHolder
|
|
17
|
+
from holado_core.common.finders.tools.find_builder import FindBuilder
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class FindContext(object):
|
|
21
|
+
"""Base find context
|
|
22
|
+
In usual use cases, the appropriate sub-class should be instantiated.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
__instance_default = None
|
|
26
|
+
|
|
27
|
+
def __init__(self, find_type=None, find_context=None):
|
|
28
|
+
if find_type is not None:
|
|
29
|
+
self.__find_type = find_type
|
|
30
|
+
elif find_context is not None:
|
|
31
|
+
self.__find_type = find_context.find_type
|
|
32
|
+
else:
|
|
33
|
+
self.__find_type = None
|
|
34
|
+
|
|
35
|
+
@property
|
|
36
|
+
def find_type(self):
|
|
37
|
+
"""
|
|
38
|
+
@return Find type
|
|
39
|
+
"""
|
|
40
|
+
return self.__find_type
|
|
41
|
+
|
|
42
|
+
def update(self, updater: FindUpdater):
|
|
43
|
+
"""
|
|
44
|
+
@param updater Find updater
|
|
45
|
+
@return Updated context
|
|
46
|
+
"""
|
|
47
|
+
res = copy.deepcopy(self)
|
|
48
|
+
if updater.has_context_value("find_type"):
|
|
49
|
+
res = res.with_find_type(updater.get_context_value("find_type"))
|
|
50
|
+
if updater.has_context_value("update_root_container"):
|
|
51
|
+
res = res.update_root_container(updater.get_context_value("update_root_container"))
|
|
52
|
+
return res
|
|
53
|
+
|
|
54
|
+
def update_root_container(self, do_update):
|
|
55
|
+
"""
|
|
56
|
+
If needed, update the root container with container
|
|
57
|
+
@param do_update If root has to be updated
|
|
58
|
+
@return Same context but with given root
|
|
59
|
+
"""
|
|
60
|
+
raise NotImplementedError("When using update_root_container method, the instantiated sub-class of FindContext must override it")
|
|
61
|
+
|
|
62
|
+
def with_find_type(self, find_type):
|
|
63
|
+
"""
|
|
64
|
+
Note: if wanted find type is the same, self instance is returned, else a new one is returned
|
|
65
|
+
@param find_type Find type
|
|
66
|
+
@return Same context but with given find type
|
|
67
|
+
"""
|
|
68
|
+
if find_type == self.find_type:
|
|
69
|
+
return self
|
|
70
|
+
else:
|
|
71
|
+
res = copy.deepcopy(self)
|
|
72
|
+
res.find_type = find_type
|
|
73
|
+
return res
|
|
74
|
+
|
|
75
|
+
def get_find_type_container_description_prefix(self):
|
|
76
|
+
"""
|
|
77
|
+
@return Prefix to container description associated to find type
|
|
78
|
+
"""
|
|
79
|
+
if self.find_type == FindType.InParents:
|
|
80
|
+
return "parents of "
|
|
81
|
+
elif self.find_type == FindType.InChildren:
|
|
82
|
+
return "children of "
|
|
83
|
+
else:
|
|
84
|
+
return ""
|
|
85
|
+
|
|
86
|
+
def get_input_description(self, element=None):
|
|
87
|
+
"""
|
|
88
|
+
@return Input description
|
|
89
|
+
"""
|
|
90
|
+
if element is None:
|
|
91
|
+
return "{NONE}"
|
|
92
|
+
elif isinstance(element, ElementHolder):
|
|
93
|
+
return f"[{element.description}]"
|
|
94
|
+
else:
|
|
95
|
+
return str(element)
|
|
96
|
+
|
|
97
|
+
def get_input_complete_description(self, element=None):
|
|
98
|
+
"""
|
|
99
|
+
@return Input complete description
|
|
100
|
+
"""
|
|
101
|
+
if element is None:
|
|
102
|
+
return "{NONE}"
|
|
103
|
+
elif isinstance(element, ElementHolder):
|
|
104
|
+
return f"[{element.complete_description}]"
|
|
105
|
+
else:
|
|
106
|
+
return str(element)
|
|
107
|
+
|
|
108
|
+
def get_input_complete_description_and_details(self, element=None):
|
|
109
|
+
"""
|
|
110
|
+
@return Input complete description and details
|
|
111
|
+
"""
|
|
112
|
+
if element is None:
|
|
113
|
+
return "{NONE}"
|
|
114
|
+
elif isinstance(element, ElementHolder):
|
|
115
|
+
return f"[{element.complete_description_and_details}]"
|
|
116
|
+
else:
|
|
117
|
+
return str(element)
|
|
118
|
+
|
|
119
|
+
@staticmethod
|
|
120
|
+
def default(find_type=None):
|
|
121
|
+
"""
|
|
122
|
+
@return Default find context
|
|
123
|
+
"""
|
|
124
|
+
if FindContext.__instance_default is None:
|
|
125
|
+
FindContext.__instance_default = FindContext()
|
|
126
|
+
res = FindContext.__instance_default
|
|
127
|
+
|
|
128
|
+
if find_type is not None:
|
|
129
|
+
res = res.with_find_type(find_type)
|
|
130
|
+
|
|
131
|
+
return res
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class WithRootContainerFindContext(FindContext):
|
|
136
|
+
"""
|
|
137
|
+
Find context using containers.
|
|
138
|
+
"""
|
|
139
|
+
|
|
140
|
+
def __init__(self, find_type=None, find_context=None):
|
|
141
|
+
super().__init__(find_type, find_context)
|
|
142
|
+
self.__root_container = None
|
|
143
|
+
|
|
144
|
+
if isinstance(find_context, WithRootContainerFindContext):
|
|
145
|
+
self.__root_container = find_context.root_container
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
def root_container(self):
|
|
149
|
+
"""
|
|
150
|
+
@return Root container
|
|
151
|
+
"""
|
|
152
|
+
return self.__root_container
|
|
153
|
+
|
|
154
|
+
def update(self, updater):
|
|
155
|
+
res = super().update(updater)
|
|
156
|
+
if updater.has_context_value("root_container"):
|
|
157
|
+
res = res.with_root_container(updater.get_context_value("root_container"))
|
|
158
|
+
return res
|
|
159
|
+
|
|
160
|
+
def get_criteria_context(self):
|
|
161
|
+
"""
|
|
162
|
+
@return Associated criteria context
|
|
163
|
+
"""
|
|
164
|
+
return copy.deepcopy(self)
|
|
165
|
+
|
|
166
|
+
def with_root_container(self, root_container):
|
|
167
|
+
"""
|
|
168
|
+
Note: if wanted root is the same, self instance is returned, else a new one is returned
|
|
169
|
+
@param __root_container Wanted root
|
|
170
|
+
@return Same context but with given root
|
|
171
|
+
"""
|
|
172
|
+
if root_container == self.__root_container:
|
|
173
|
+
return self
|
|
174
|
+
else:
|
|
175
|
+
res = copy.deepcopy(self)
|
|
176
|
+
res.__root_container = root_container
|
|
177
|
+
return res
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
class ContainerFindContext(WithRootContainerFindContext):
|
|
183
|
+
"""
|
|
184
|
+
Find context in a single container.
|
|
185
|
+
"""
|
|
186
|
+
|
|
187
|
+
__instance_default = None
|
|
188
|
+
|
|
189
|
+
def __init__(self, find_type=None, find_context=None):
|
|
190
|
+
super().__init__(find_type, find_context)
|
|
191
|
+
self.__container = None
|
|
192
|
+
|
|
193
|
+
if isinstance(find_context, ContainerFindContext):
|
|
194
|
+
self.__container = find_context.container
|
|
195
|
+
|
|
196
|
+
@property
|
|
197
|
+
def container(self):
|
|
198
|
+
"""
|
|
199
|
+
@return Container
|
|
200
|
+
"""
|
|
201
|
+
return self.__container
|
|
202
|
+
|
|
203
|
+
def update(self, updater):
|
|
204
|
+
res = super().update(updater)
|
|
205
|
+
if updater.has_context_value("container"):
|
|
206
|
+
res = res.with_container(updater.get_context_value("container"))
|
|
207
|
+
return res
|
|
208
|
+
|
|
209
|
+
def update_root_container(self, do_update):
|
|
210
|
+
"""
|
|
211
|
+
If needed, update the root container with container
|
|
212
|
+
@param do_update If root has to be updated
|
|
213
|
+
@return Same context but with given root
|
|
214
|
+
"""
|
|
215
|
+
if do_update and self.find_type != FindType.InParents:
|
|
216
|
+
return self.with_root_container(self.container)
|
|
217
|
+
else:
|
|
218
|
+
return self
|
|
219
|
+
|
|
220
|
+
def with_container(self, container, do_update=None):
|
|
221
|
+
"""
|
|
222
|
+
Note 1: if wanted container is the same, self instance is returned, else a new one is returned
|
|
223
|
+
Note 2: if root container is not already set, also set container as root
|
|
224
|
+
@param container Wanted container
|
|
225
|
+
@param do_update If root has to be updated
|
|
226
|
+
@return Same context but with given container
|
|
227
|
+
"""
|
|
228
|
+
if do_update is None and self.root_container is None:
|
|
229
|
+
do_update = True
|
|
230
|
+
|
|
231
|
+
if (container == self.container
|
|
232
|
+
and (not (do_update and self.find_type != FindType.InParents) or container == self.root_container) ):
|
|
233
|
+
return self
|
|
234
|
+
else:
|
|
235
|
+
res = copy.deepcopy(self)
|
|
236
|
+
res.__container = container
|
|
237
|
+
return res.update_root_container(do_update)
|
|
238
|
+
|
|
239
|
+
def get_input_description(self):
|
|
240
|
+
return super().get_input_description(self.container)
|
|
241
|
+
|
|
242
|
+
def get_input_complete_description(self):
|
|
243
|
+
return super().get_input_complete_description(self.container)
|
|
244
|
+
|
|
245
|
+
def get_input_complete_description_and_details(self):
|
|
246
|
+
return super().get_input_complete_description_and_details(self.container)
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
@staticmethod
|
|
250
|
+
def default(find_type=None, container=None):
|
|
251
|
+
"""
|
|
252
|
+
@return Default find context
|
|
253
|
+
"""
|
|
254
|
+
if ContainerFindContext.__instance_default is None:
|
|
255
|
+
ContainerFindContext.__instance_default = ContainerFindContext()
|
|
256
|
+
res = ContainerFindContext.__instance_default
|
|
257
|
+
|
|
258
|
+
if find_type is not None:
|
|
259
|
+
res = res.with_find_type(find_type)
|
|
260
|
+
if container is not None:
|
|
261
|
+
res = res.with_container(container)
|
|
262
|
+
|
|
263
|
+
return res
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
class ListContainersFindContext(WithRootContainerFindContext):
|
|
267
|
+
"""
|
|
268
|
+
Find context in list of containers.
|
|
269
|
+
"""
|
|
270
|
+
|
|
271
|
+
__instance_default = None
|
|
272
|
+
|
|
273
|
+
def __init__(self, find_type=None, find_context=None):
|
|
274
|
+
super().__init__(find_type, find_context)
|
|
275
|
+
self.__containers = None
|
|
276
|
+
self.__update_root_container_on_iteration = False
|
|
277
|
+
|
|
278
|
+
if isinstance(find_context, ListContainersFindContext):
|
|
279
|
+
self.__containers = find_context.containers
|
|
280
|
+
self.__update_root_container_on_iteration = find_context.update_root_container_on_iteration
|
|
281
|
+
|
|
282
|
+
def __iter__(self):
|
|
283
|
+
self.__n = 0
|
|
284
|
+
self.__find_builder = FindBuilder()
|
|
285
|
+
return self
|
|
286
|
+
|
|
287
|
+
def __next__(self):
|
|
288
|
+
if self.__n < len(self.containers):
|
|
289
|
+
res = self.__find_builder.context(find_context=self, container=self.containers[self.__n])
|
|
290
|
+
self.__n += 1
|
|
291
|
+
return res
|
|
292
|
+
else:
|
|
293
|
+
raise StopIteration
|
|
294
|
+
|
|
295
|
+
@property
|
|
296
|
+
def nb_containers(self):
|
|
297
|
+
"""
|
|
298
|
+
@return Number of containers
|
|
299
|
+
"""
|
|
300
|
+
if self.__containers is None:
|
|
301
|
+
return 0
|
|
302
|
+
else:
|
|
303
|
+
return len(self.__containers)
|
|
304
|
+
|
|
305
|
+
@property
|
|
306
|
+
def containers(self):
|
|
307
|
+
"""
|
|
308
|
+
@return Containers in which find element
|
|
309
|
+
"""
|
|
310
|
+
return self.__containers
|
|
311
|
+
|
|
312
|
+
@property
|
|
313
|
+
def update_root_container_on_iteration(self):
|
|
314
|
+
"""
|
|
315
|
+
@return If root container must be updated on iteration on containers
|
|
316
|
+
"""
|
|
317
|
+
return self.__update_root_container_on_iteration
|
|
318
|
+
|
|
319
|
+
def update(self, updater):
|
|
320
|
+
res = super().update(updater)
|
|
321
|
+
if updater.has_context_value("containers"):
|
|
322
|
+
res = res.with_containers(updater.get_context_value("containers"))
|
|
323
|
+
return res
|
|
324
|
+
|
|
325
|
+
def update_root_container(self, do_update):
|
|
326
|
+
"""
|
|
327
|
+
If needed, update the root container with container
|
|
328
|
+
@param do_update If root has to be updated
|
|
329
|
+
@return Same context but with given root
|
|
330
|
+
"""
|
|
331
|
+
if do_update and self.find_type != FindType.InParents:
|
|
332
|
+
return self.with_root_container(self.container)
|
|
333
|
+
else:
|
|
334
|
+
return self
|
|
335
|
+
|
|
336
|
+
def with_containers(self, containers, do_update=None):
|
|
337
|
+
"""
|
|
338
|
+
Note: if containers is not empty, returns a new context
|
|
339
|
+
@param containers Wanted containers
|
|
340
|
+
@param do_update If root has to be updated
|
|
341
|
+
@return Same context but with given container
|
|
342
|
+
"""
|
|
343
|
+
if do_update is None and self.root_container is None:
|
|
344
|
+
do_update = True
|
|
345
|
+
|
|
346
|
+
if containers == self.containers and do_update == self.update_root_container_on_iteration:
|
|
347
|
+
return self
|
|
348
|
+
else:
|
|
349
|
+
res = copy.deepcopy(self)
|
|
350
|
+
res.__containers = containers
|
|
351
|
+
return res.with_update_root_container_on_iteration(do_update)
|
|
352
|
+
|
|
353
|
+
def with_update_root_container_on_iteration(self, do_update=None):
|
|
354
|
+
"""
|
|
355
|
+
If needed, update the root container on iteration
|
|
356
|
+
@param do_update If root has to be updated
|
|
357
|
+
@return Same context but with given container
|
|
358
|
+
"""
|
|
359
|
+
if do_update == self.update_root_container_on_iteration:
|
|
360
|
+
return self
|
|
361
|
+
else:
|
|
362
|
+
res = copy.deepcopy(self)
|
|
363
|
+
res.__update_root_container_on_iteration = do_update
|
|
364
|
+
return res
|
|
365
|
+
|
|
366
|
+
def get_input_description(self):
|
|
367
|
+
if self.containers is None or len(self.containers) == 0:
|
|
368
|
+
return super().get_input_description(None)
|
|
369
|
+
else:
|
|
370
|
+
containers_descriptions = [super().get_input_description(c) for c in self.containers]
|
|
371
|
+
return f"[{', '.join(containers_descriptions)}]"
|
|
372
|
+
|
|
373
|
+
def get_input_complete_description(self):
|
|
374
|
+
if self.containers is None or len(self.containers) == 0:
|
|
375
|
+
return super().get_input_complete_description(None)
|
|
376
|
+
else:
|
|
377
|
+
containers_descriptions = [super().get_input_complete_description(c) for c in self.containers]
|
|
378
|
+
return f"[{', '.join(containers_descriptions)}]"
|
|
379
|
+
|
|
380
|
+
def get_input_complete_description_and_details(self):
|
|
381
|
+
if self.containers is None or len(self.containers) == 0:
|
|
382
|
+
return super().get_input_complete_description_and_details(None)
|
|
383
|
+
else:
|
|
384
|
+
containers_descriptions = [super().get_input_complete_description_and_details(c) for c in self.containers]
|
|
385
|
+
return f"[{', '.join(containers_descriptions)}]"
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
@staticmethod
|
|
389
|
+
def default(find_type=None, containers=None):
|
|
390
|
+
"""
|
|
391
|
+
@return Default find context
|
|
392
|
+
"""
|
|
393
|
+
if ListContainersFindContext.__instance_default is None:
|
|
394
|
+
ListContainersFindContext.__instance_default = ListContainersFindContext()
|
|
395
|
+
res = ListContainersFindContext.__instance_default
|
|
396
|
+
|
|
397
|
+
if find_type is not None:
|
|
398
|
+
res = res.with_find_type(find_type)
|
|
399
|
+
if containers is not None:
|
|
400
|
+
res = res.with_containers(containers)
|
|
401
|
+
|
|
402
|
+
return res
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
|
|
14
|
+
class FindInfo(object):
|
|
15
|
+
"""Find information.
|
|
16
|
+
Contains information on conditions in which an element was found.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
def __init__(self):
|
|
20
|
+
self.finder = None
|
|
21
|
+
self.find_context = None
|
|
22
|
+
self.find_parameters = None
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
@@ -0,0 +1,240 @@
|
|
|
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.tools.find_updater import FindUpdater
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class FindParameters(object):
|
|
18
|
+
""" Find parameters
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
_do_analyze_time_finder = True
|
|
22
|
+
_do_analyze_time_criteria = True
|
|
23
|
+
|
|
24
|
+
__instance_default = None
|
|
25
|
+
__instance_default_without_raise = None
|
|
26
|
+
|
|
27
|
+
def __init__(self, raise_no_such_element=True, raise_intermediate_no_such_element=True, find_level=0, visibility=True, analyze_time_spent=True,
|
|
28
|
+
redo=False, redo_ignored_exceptions=None, nb_max_elements=None, nth_element=None, add_valid_container=False):
|
|
29
|
+
"""
|
|
30
|
+
Constructor
|
|
31
|
+
@param raise_no_such_element If True, raise NoSuchElementException, else return None, when no element is found.
|
|
32
|
+
@param raise_intermediate_no_such_element If True, raise NoSuchElementException, else return None, when no element is found in intermediate searches.
|
|
33
|
+
@param find_level Find level, beginning at 0 and increasing at each sub-find.
|
|
34
|
+
@param visibility Visibility of elements to find (None means any visibility).
|
|
35
|
+
@param analyze_time_spent If True, analyze time spent in find.
|
|
36
|
+
@param redo If redo
|
|
37
|
+
@param redo_ignored_exceptions Ignorded exception in redo
|
|
38
|
+
@param nb_max_elements Number max of elements to find
|
|
39
|
+
@param nth_element N'th element to find
|
|
40
|
+
@param add_valid_container If True, add container to find result if it validates criteria
|
|
41
|
+
"""
|
|
42
|
+
self.raise_no_such_element = raise_no_such_element
|
|
43
|
+
self.raise_intermediate_no_such_element = raise_intermediate_no_such_element
|
|
44
|
+
self.find_level = find_level
|
|
45
|
+
self.visibility = visibility
|
|
46
|
+
self.analyze_time_spent = analyze_time_spent
|
|
47
|
+
self.redo = redo
|
|
48
|
+
self.redo_ignored_exceptions = []
|
|
49
|
+
if redo_ignored_exceptions is not None:
|
|
50
|
+
self.redo_ignored_exceptions.extend(redo_ignored_exceptions)
|
|
51
|
+
self.nb_max_elements = nb_max_elements
|
|
52
|
+
self.nth_element = nth_element
|
|
53
|
+
self.add_valid_container = add_valid_container
|
|
54
|
+
|
|
55
|
+
def update(self, updater:FindUpdater):
|
|
56
|
+
"""
|
|
57
|
+
@param updater Find updater
|
|
58
|
+
@return Updated parameters
|
|
59
|
+
"""
|
|
60
|
+
res = self
|
|
61
|
+
if updater.has_context_value("analyze_time_spent"):
|
|
62
|
+
res = res.with_analyze_time_spent(updater.get_context_value("analyze_time_spent"))
|
|
63
|
+
if updater.has_context_value("nb_max_elements"):
|
|
64
|
+
res = res.with_nb_max_elements(updater.get_context_value("nb_max_elements"))
|
|
65
|
+
if updater.has_context_value("nth_element"):
|
|
66
|
+
res = res.with_nth_element(updater.get_context_value("nth_element"))
|
|
67
|
+
if updater.has_context_value("redo"):
|
|
68
|
+
res = res.with_redo(updater.get_context_value("redo"))
|
|
69
|
+
if updater.has_context_value("ignoring"):
|
|
70
|
+
res = res.ignoring(updater.get_context_value("ignoring"))
|
|
71
|
+
if updater.has_context_value("raise"):
|
|
72
|
+
res = res.with_raise(updater.get_context_value("raise"))
|
|
73
|
+
if updater.has_context_value("visibility"):
|
|
74
|
+
res = res.with_visibility(updater.get_context_value("visibility"))
|
|
75
|
+
return res
|
|
76
|
+
|
|
77
|
+
def get_next_level(self, raise_exception=None):
|
|
78
|
+
"""
|
|
79
|
+
@param raise_exception Whether raise exceptions or not
|
|
80
|
+
@return Find parameter for next find level
|
|
81
|
+
"""
|
|
82
|
+
res = copy.deepcopy(self)
|
|
83
|
+
res.find_level += 1
|
|
84
|
+
res.analyze_time_spent = False
|
|
85
|
+
if raise_exception is not None:
|
|
86
|
+
res.raise_no_such_element = raise_exception
|
|
87
|
+
res.raise_intermediate_no_such_element = raise_exception
|
|
88
|
+
return res
|
|
89
|
+
|
|
90
|
+
def get_criteria_parameters(self):
|
|
91
|
+
"""
|
|
92
|
+
@return Associated criteria parameters
|
|
93
|
+
"""
|
|
94
|
+
res = copy.deepcopy(self)
|
|
95
|
+
res.find_level += 1
|
|
96
|
+
return res
|
|
97
|
+
|
|
98
|
+
def with_visibility(self, visibility):
|
|
99
|
+
"""
|
|
100
|
+
Note: if wanted visibility is the same, self instance is returned, else a new one is returned
|
|
101
|
+
@param visibility Wanted visibility
|
|
102
|
+
@return Same parameters but with given visibility
|
|
103
|
+
"""
|
|
104
|
+
if visibility == self.visibility:
|
|
105
|
+
return self
|
|
106
|
+
else:
|
|
107
|
+
res = copy.deepcopy(self)
|
|
108
|
+
res.visibility = visibility
|
|
109
|
+
return res
|
|
110
|
+
|
|
111
|
+
def with_analyze_time_spent(self, analyze_time_spent):
|
|
112
|
+
"""
|
|
113
|
+
Note: if wanted analyze_time_spent is the same, self instance is returned, else a new one is returned
|
|
114
|
+
@param analyze_time_spent If analyze time spent
|
|
115
|
+
@return Same parameters but with given analyze_time_spent
|
|
116
|
+
"""
|
|
117
|
+
if analyze_time_spent == self.analyze_time_spent:
|
|
118
|
+
return self
|
|
119
|
+
else:
|
|
120
|
+
res = copy.deepcopy(self)
|
|
121
|
+
res.analyze_time_spent = analyze_time_spent
|
|
122
|
+
return res
|
|
123
|
+
|
|
124
|
+
def with_raise(self, raise_exception=True):
|
|
125
|
+
"""
|
|
126
|
+
Note: if raise booleans are same, self instance is returned, else a new one is returned
|
|
127
|
+
@param raise_exception Whether raise exceptions or not
|
|
128
|
+
@return Same parameters but with raise
|
|
129
|
+
"""
|
|
130
|
+
if self.raise_no_such_element == raise_exception and self.raise_intermediate_no_such_element == raise_exception:
|
|
131
|
+
return self
|
|
132
|
+
else:
|
|
133
|
+
res = copy.deepcopy(self)
|
|
134
|
+
res.raise_no_such_element = raise_exception
|
|
135
|
+
res.raise_intermediate_no_such_element = raise_exception
|
|
136
|
+
return res
|
|
137
|
+
|
|
138
|
+
def without_raise(self):
|
|
139
|
+
"""
|
|
140
|
+
Note: if raise booleans are already False, self instance is returned, else a new one is returned
|
|
141
|
+
@return Same parameters but without raise
|
|
142
|
+
"""
|
|
143
|
+
return self.with_raise(False)
|
|
144
|
+
|
|
145
|
+
def with_redo(self, redo):
|
|
146
|
+
"""
|
|
147
|
+
Note: if wanted redo is the same, self instance is returned, else a new one is returned
|
|
148
|
+
@param redo If do redo
|
|
149
|
+
@return Same parameters but with given redo
|
|
150
|
+
"""
|
|
151
|
+
if redo == self.redo:
|
|
152
|
+
return self
|
|
153
|
+
else:
|
|
154
|
+
res = copy.deepcopy(self)
|
|
155
|
+
res.redo = redo
|
|
156
|
+
res.redo_ignored_exceptions = self.redo_ignored_exceptions if redo else None
|
|
157
|
+
return res
|
|
158
|
+
|
|
159
|
+
def ignoring(self, exception_class):
|
|
160
|
+
"""
|
|
161
|
+
@param exceptionType Type of exception to ignore.
|
|
162
|
+
@return Same parameters but with given ignoring
|
|
163
|
+
"""
|
|
164
|
+
if exception_class in self.redo_ignored_exceptions:
|
|
165
|
+
return self
|
|
166
|
+
else:
|
|
167
|
+
res = copy.deepcopy(self)
|
|
168
|
+
res.redo_ignored_exceptions.append(exception_class)
|
|
169
|
+
return res
|
|
170
|
+
|
|
171
|
+
def with_nb_max_elements(self, nb_max_elements):
|
|
172
|
+
"""
|
|
173
|
+
Note: if wanted number max of elements is the same, self instance is returned, else a new one is returned
|
|
174
|
+
@param nb_max_elements Number max of elements to find
|
|
175
|
+
@return Same parameters but with given number max of elements
|
|
176
|
+
"""
|
|
177
|
+
if nb_max_elements == self.nb_max_elements:
|
|
178
|
+
return self
|
|
179
|
+
else:
|
|
180
|
+
res = copy.deepcopy(self)
|
|
181
|
+
res.nb_max_elements = nb_max_elements
|
|
182
|
+
return res
|
|
183
|
+
|
|
184
|
+
def with_nth_element(self, nth_element):
|
|
185
|
+
"""
|
|
186
|
+
Note: if wanted n'th element is the same, self instance is returned, else a new one is returned
|
|
187
|
+
@param nth_element N'th element to find
|
|
188
|
+
@return Same parameters but with given number max of elements
|
|
189
|
+
"""
|
|
190
|
+
if nth_element == self.nth_element:
|
|
191
|
+
return self
|
|
192
|
+
else:
|
|
193
|
+
res = copy.deepcopy(self)
|
|
194
|
+
res.nth_element = nth_element
|
|
195
|
+
return res
|
|
196
|
+
|
|
197
|
+
def with_valid_container(self, add_valid_container):
|
|
198
|
+
"""
|
|
199
|
+
@param add_valid_container N'th element to find
|
|
200
|
+
@return Same parameters but with or without container validating criteria
|
|
201
|
+
"""
|
|
202
|
+
if add_valid_container == self.add_valid_container:
|
|
203
|
+
return self
|
|
204
|
+
else:
|
|
205
|
+
res = copy.deepcopy(self)
|
|
206
|
+
res.add_valid_container = add_valid_container
|
|
207
|
+
return res
|
|
208
|
+
|
|
209
|
+
@staticmethod
|
|
210
|
+
def default(raise_exception=True):
|
|
211
|
+
"""
|
|
212
|
+
@param raise_exception Whether raise exceptions or not
|
|
213
|
+
@return Default find parameters with given raiseability
|
|
214
|
+
"""
|
|
215
|
+
if raise_exception:
|
|
216
|
+
return FindParameters.default_with_raise()
|
|
217
|
+
else:
|
|
218
|
+
return FindParameters.default_without_raise()
|
|
219
|
+
|
|
220
|
+
@staticmethod
|
|
221
|
+
def default_with_raise():
|
|
222
|
+
"""
|
|
223
|
+
@return Default find parameters with raises
|
|
224
|
+
"""
|
|
225
|
+
if FindParameters.__instance_default is None:
|
|
226
|
+
FindParameters.__instance_default = FindParameters(True, True, 0, True, FindParameters._do_analyze_time_finder, False, None, None, None, False)
|
|
227
|
+
return FindParameters.__instance_default
|
|
228
|
+
|
|
229
|
+
@staticmethod
|
|
230
|
+
def default_without_raise():
|
|
231
|
+
"""
|
|
232
|
+
@return Default find parameters without any raise
|
|
233
|
+
"""
|
|
234
|
+
if FindParameters.__instance_default_without_raise is None:
|
|
235
|
+
FindParameters.__instance_default_without_raise = FindParameters(False, False, 0, True, FindParameters._do_analyze_time_finder, False, None, None, None, False)
|
|
236
|
+
return FindParameters.__instance_default_without_raise
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|