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,560 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
from holado_test.behave.behave import * # @UnusedWildImport
|
|
17
|
+
from holado_test.behave.behave import render_step_table
|
|
18
|
+
import copy
|
|
19
|
+
from holado_value.common.tools.value_types import ValueTypes
|
|
20
|
+
from holado_core.common.tables.table_manager import TableManager
|
|
21
|
+
from holado_value.common.tables.comparators.table_2_value_table_comparator import Table2ValueTable_Comparator
|
|
22
|
+
from holado_core.common.tools.tools import reversed_enumerate
|
|
23
|
+
from holado_test.scenario.step_tools import StepTools
|
|
24
|
+
from holado_value.common.tables.comparators.table_2_value_table_with_header_comparator import Table2ValueTable_WithHeaderComparator
|
|
25
|
+
from holado_value.common.tables.comparators.table_2_value_table_cell_comparator import Table2ValueTable_CellComparator
|
|
26
|
+
from holado_core.common.tables.table_with_header import TableWithHeader
|
|
27
|
+
from holado_core.common.tables.table import Table
|
|
28
|
+
from holado_core.common.tables.table_row import TableRow
|
|
29
|
+
from holado_core.common.tables.comparators.string_table_row_comparator import StringTableRowComparator
|
|
30
|
+
import logging
|
|
31
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
32
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
33
|
+
from holado.common.context.session_context import SessionContext
|
|
34
|
+
from holado_value.common.tables.value_table import ValueTable
|
|
35
|
+
from holado_value.common.tables.value_table_with_header import ValueTableWithHeader
|
|
36
|
+
from holado_core.common.tools.converters.converter import Converter
|
|
37
|
+
from holado_test.behave.scenario.behave_step_tools import BehaveStepTools
|
|
38
|
+
from holado_value.common.tables.converters.value_table_converter import ValueTableConverter
|
|
39
|
+
from holado_python.standard_library.typing import Typing
|
|
40
|
+
from holado_value.common.tables.value_table_manager import ValueTableManager
|
|
41
|
+
from holado_core.common.tables.converters.table_converter import TableConverter
|
|
42
|
+
|
|
43
|
+
logger = logging.getLogger(__name__)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def __get_scenario_context():
|
|
47
|
+
return SessionContext.instance().get_scenario_context()
|
|
48
|
+
|
|
49
|
+
def __get_text_interpreter():
|
|
50
|
+
return __get_scenario_context().get_text_interpreter()
|
|
51
|
+
|
|
52
|
+
def __get_variable_manager():
|
|
53
|
+
return __get_scenario_context().get_variable_manager()
|
|
54
|
+
|
|
55
|
+
@Given(r"(?P<var_name>{Variable}) = table")
|
|
56
|
+
def step_impl(context, var_name):
|
|
57
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
58
|
+
|
|
59
|
+
table = BehaveStepTools.convert_step_table_2_value_table(context.table)
|
|
60
|
+
|
|
61
|
+
__get_variable_manager().register_variable(var_name, table)
|
|
62
|
+
|
|
63
|
+
@Given(r"(?P<var_name>{Variable}) = table with header")
|
|
64
|
+
def step_impl(context, var_name):
|
|
65
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
66
|
+
|
|
67
|
+
table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
68
|
+
|
|
69
|
+
__get_variable_manager().register_variable(var_name, table)
|
|
70
|
+
|
|
71
|
+
@Given(r"(?P<var_name>{Variable}) = object table")
|
|
72
|
+
def step_impl(context, var_name):
|
|
73
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
74
|
+
table = BehaveStepTools.convert_step_table_2_value_table(context.table)
|
|
75
|
+
|
|
76
|
+
res = ValueTableConverter.convert_value_table_2_table(table)
|
|
77
|
+
|
|
78
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
79
|
+
|
|
80
|
+
@Given(r"(?P<var_name>{Variable}) = object table with header")
|
|
81
|
+
def step_impl(context, var_name):
|
|
82
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
83
|
+
table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
84
|
+
|
|
85
|
+
res = ValueTableConverter.convert_value_table_2_table(table)
|
|
86
|
+
|
|
87
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
88
|
+
|
|
89
|
+
@Step(r"(?P<var_name>{Variable}) = convert dictionary (?P<obj_str>{Str}) to name/value table")
|
|
90
|
+
def step_impl(context, var_name, obj_str):
|
|
91
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
92
|
+
obj = StepTools.evaluate_scenario_parameter(obj_str)
|
|
93
|
+
if isinstance(obj, str):
|
|
94
|
+
obj = eval(obj)
|
|
95
|
+
if not isinstance(obj, dict):
|
|
96
|
+
raise TechnicalException(f"Expecting dict, received {Typing.get_object_class_fullname(obj)}")
|
|
97
|
+
|
|
98
|
+
table = TableManager.convert_dict_2_name_value_table(obj)
|
|
99
|
+
|
|
100
|
+
__get_variable_manager().register_variable(var_name, table)
|
|
101
|
+
|
|
102
|
+
@Step(r"(?P<var_name>{Variable}) = convert dictionary (?P<obj_str>{Str}) to table with keys as columns")
|
|
103
|
+
def step_impl(context, var_name, obj_str):
|
|
104
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
105
|
+
obj = StepTools.evaluate_scenario_parameter(obj_str)
|
|
106
|
+
if isinstance(obj, str):
|
|
107
|
+
obj = eval(obj)
|
|
108
|
+
if not isinstance(obj, dict):
|
|
109
|
+
raise TechnicalException(f"Expecting dict, received {Typing.get_object_class_fullname(obj)}")
|
|
110
|
+
|
|
111
|
+
table = TableManager.convert_dict_2_table_with_keys_as_column(obj)
|
|
112
|
+
|
|
113
|
+
__get_variable_manager().register_variable(var_name, table)
|
|
114
|
+
|
|
115
|
+
@Step(r"(?P<var_name>{Variable}) = convert table with header (?P<table>{Variable}) to list of dictionary(?: \((?P<as_generator_str>as generator)\))?")
|
|
116
|
+
def step_impl(context, var_name, table, as_generator_str):
|
|
117
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
118
|
+
table = StepTools.evaluate_scenario_parameter(table)
|
|
119
|
+
as_generator = as_generator_str is not None
|
|
120
|
+
if not TableManager.is_table_with_header(table):
|
|
121
|
+
raise TechnicalException(f"Table must be a table with header (obtained type: {Typing.get_object_class_fullname(table)})")
|
|
122
|
+
|
|
123
|
+
if ValueTableManager.is_value_table(table):
|
|
124
|
+
res = ValueTableConverter.convert_table_with_header_to_dict_list(table, as_generator=as_generator)
|
|
125
|
+
else:
|
|
126
|
+
res = TableConverter.convert_table_with_header_to_dict_list(table, as_generator=as_generator)
|
|
127
|
+
|
|
128
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
129
|
+
|
|
130
|
+
@Step(r'(?P<var_name>{Variable}) = convert object (?P<obj_str>{Variable}) to name/value table')
|
|
131
|
+
def step_impl(context, var_name, obj_str):
|
|
132
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
133
|
+
obj = StepTools.evaluate_variable_value(obj_str)
|
|
134
|
+
|
|
135
|
+
table = TableManager.convert_object_attributes_2_name_value_table(obj)
|
|
136
|
+
|
|
137
|
+
__get_variable_manager().register_variable(var_name, table)
|
|
138
|
+
|
|
139
|
+
#TODO EKL: move step
|
|
140
|
+
@Step(r"(?P<var_name>{Variable}) = convert string (?P<list_obj_str>{Variable}) to list")
|
|
141
|
+
def step_impl(context, var_name, list_obj_str):
|
|
142
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
143
|
+
list_str = StepTools.evaluate_variable_value(list_obj_str)
|
|
144
|
+
|
|
145
|
+
list_obj = eval(list_str)
|
|
146
|
+
if not isinstance(list_obj, list):
|
|
147
|
+
raise FunctionalException("Given string is not a string representation of a list")
|
|
148
|
+
|
|
149
|
+
__get_variable_manager().register_variable(var_name, list_obj)
|
|
150
|
+
|
|
151
|
+
@Step(r'(?P<var_name>{Variable}) = convert list (?P<list_obj_str>{Variable}) to table with object attributes as columns')
|
|
152
|
+
def step_impl(context, var_name, list_obj_str):
|
|
153
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
154
|
+
list_obj = StepTools.evaluate_variable_value(list_obj_str)
|
|
155
|
+
|
|
156
|
+
table = TableManager.convert_object_list_2_table_with_attributes_as_column(list_obj)
|
|
157
|
+
|
|
158
|
+
__get_variable_manager().register_variable(var_name, table)
|
|
159
|
+
|
|
160
|
+
@Step(r'(?P<var_name>{Variable}) = convert list (?P<list_obj_str>{Variable}) to column table')
|
|
161
|
+
def step_impl(context, var_name, list_obj_str):
|
|
162
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
163
|
+
list_obj = StepTools.evaluate_variable_value(list_obj_str)
|
|
164
|
+
|
|
165
|
+
table = TableManager.convert_object_list_2_column_table(list_obj)
|
|
166
|
+
|
|
167
|
+
__get_variable_manager().register_variable(var_name, table)
|
|
168
|
+
|
|
169
|
+
@Then(r"compare table 1 (?P<table_1_str>{Variable}) to table 2 (?P<table_2_str>{Variable}) with(?: \(reorder columns table 1:(?P<reorder_table_1_str>true|false) ; reorder columns table 2:(?P<reorder_table_2_str>true|false)\))?")
|
|
170
|
+
def step_impl(context, table_1_str, table_2_str, reorder_table_1_str, reorder_table_2_str):
|
|
171
|
+
table_1 = StepTools.evaluate_variable_value(table_1_str)
|
|
172
|
+
table_2 = StepTools.evaluate_variable_value(table_2_str)
|
|
173
|
+
compare_params_table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
174
|
+
reorder_columns_table_1 = Converter.to_boolean(reorder_table_1_str.capitalize()) if reorder_table_1_str is not None else True
|
|
175
|
+
reorder_columns_table_2 = Converter.to_boolean(reorder_table_2_str.capitalize()) if reorder_table_2_str is not None else True
|
|
176
|
+
|
|
177
|
+
TableManager.compare_tables(table_1, table_2, compare_params_table, reorder_columns_table_1, reorder_columns_table_2)
|
|
178
|
+
|
|
179
|
+
@Step(r"table (?P<table_varname>{Variable}) is")
|
|
180
|
+
def step_impl(context, table_varname):
|
|
181
|
+
table_obtained = StepTools.evaluate_variable_value(table_varname)
|
|
182
|
+
BehaveStepTools.then_table_is(table_obtained, context.table)
|
|
183
|
+
|
|
184
|
+
@Step(r"table (?P<table_varname>{Variable}) is empty")
|
|
185
|
+
def step_impl(context, table_varname):
|
|
186
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
187
|
+
|
|
188
|
+
if not table.is_empty:
|
|
189
|
+
raise FunctionalException(f"Table {table_varname} is not empty")
|
|
190
|
+
|
|
191
|
+
@Step(r"table (?P<table_varname>{Variable}) contains")
|
|
192
|
+
def step_impl(context, table_varname):
|
|
193
|
+
table_obtained = StepTools.evaluate_variable_value(table_varname)
|
|
194
|
+
BehaveStepTools.then_table_contains(table_obtained, context.table)
|
|
195
|
+
|
|
196
|
+
@Step(r"table (?P<table_1_varname>{Variable}) contains table (?P<table_2_varname>{Variable})")
|
|
197
|
+
def step_impl(context, table_1_varname, table_2_varname):
|
|
198
|
+
table_1 = StepTools.evaluate_variable_value(table_1_varname)
|
|
199
|
+
table_2 = StepTools.evaluate_variable_value(table_2_varname)
|
|
200
|
+
BehaveStepTools.then_table_contains(table_1, table_2)
|
|
201
|
+
|
|
202
|
+
@Step(r"table (?P<table_varname>{Variable}) doesn't contain")
|
|
203
|
+
def step_impl(context, table_varname):
|
|
204
|
+
table_obtained = StepTools.evaluate_variable_value(table_varname)
|
|
205
|
+
BehaveStepTools.then_table_doesnt_contain(table_obtained, context.table)
|
|
206
|
+
|
|
207
|
+
@Step(r"table (?P<table_1_varname>{Variable}) doesn't contain table (?P<table_2_varname>{Variable})")
|
|
208
|
+
def step_impl(context, table_1_varname, table_2_varname):
|
|
209
|
+
table_1 = StepTools.evaluate_variable_value(table_1_varname)
|
|
210
|
+
table_2 = StepTools.evaluate_variable_value(table_2_varname)
|
|
211
|
+
BehaveStepTools.then_table_doesnt_contain(table_1, table_2)
|
|
212
|
+
|
|
213
|
+
@Given(r'(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with columns ordered')
|
|
214
|
+
def step_impl(context, var_name, table_varname):
|
|
215
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
216
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
217
|
+
table_columns = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
218
|
+
|
|
219
|
+
res_table = copy.copy(table)
|
|
220
|
+
columns_ordered = table_columns.get_column_names()
|
|
221
|
+
res_table.order_columns(names=columns_ordered)
|
|
222
|
+
|
|
223
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
224
|
+
|
|
225
|
+
@Given(r"(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) without columns (?P<col_names>{List})")
|
|
226
|
+
def step_impl(context, var_name, table_varname, col_names):
|
|
227
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
228
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
229
|
+
col_names = StepTools.evaluate_list_scenario_parameter(col_names, "col_names")
|
|
230
|
+
|
|
231
|
+
res_table = copy.copy(table)
|
|
232
|
+
for col_name in col_names:
|
|
233
|
+
if res_table.has_column(col_name, raise_exception=False):
|
|
234
|
+
res_table.remove_column(name=col_name)
|
|
235
|
+
|
|
236
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
237
|
+
|
|
238
|
+
@Given(r'(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with only columns')
|
|
239
|
+
def step_impl(context, var_name, table_varname):
|
|
240
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
241
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
242
|
+
table_columns = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
243
|
+
|
|
244
|
+
res_table = copy.copy(table)
|
|
245
|
+
expected_colnames = table_columns.get_column_names()
|
|
246
|
+
|
|
247
|
+
table_colnames = table.get_column_names()
|
|
248
|
+
for col_index, col_name in reversed_enumerate(table_colnames):
|
|
249
|
+
if col_name not in expected_colnames:
|
|
250
|
+
res_table.remove_column(index=col_index)
|
|
251
|
+
|
|
252
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
253
|
+
|
|
254
|
+
@Given(r'(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with only columns ordered')
|
|
255
|
+
def step_impl(context, var_name, table_varname):
|
|
256
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
257
|
+
rendered_table = render_step_table(context.table, " ")
|
|
258
|
+
|
|
259
|
+
execute_steps(u"""
|
|
260
|
+
Given __TABLE_WITH_ONLY_COLUMNS__@ = table {table_varname} with only columns
|
|
261
|
+
{table}
|
|
262
|
+
""".format(table_varname=table_varname, table=rendered_table))
|
|
263
|
+
|
|
264
|
+
execute_steps(u"""
|
|
265
|
+
Given {var_name} = table __TABLE_WITH_ONLY_COLUMNS__@ with columns ordered
|
|
266
|
+
{table}
|
|
267
|
+
""".format(var_name=var_name, table=rendered_table))
|
|
268
|
+
|
|
269
|
+
@Given(r'(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with new columns')
|
|
270
|
+
def step_impl(context, var_name, table_varname):
|
|
271
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
272
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
273
|
+
table_new_columns = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table, do_eval_once=False)
|
|
274
|
+
|
|
275
|
+
res_table = copy.copy(table)
|
|
276
|
+
is_res_value_table = ValueTableManager.is_value_table(res_table)
|
|
277
|
+
|
|
278
|
+
res_col_indexes = res_table.get_column_indexes_by_string_content()
|
|
279
|
+
|
|
280
|
+
tnc_indexes = table_new_columns.get_column_indexes_by_string_content()
|
|
281
|
+
for row_new_column in table_new_columns.rows:
|
|
282
|
+
new_colname_cell = row_new_column[tnc_indexes["Column Name"]]
|
|
283
|
+
new_value_expr_cell = row_new_column[tnc_indexes["Value Expression"]]
|
|
284
|
+
|
|
285
|
+
# Build new column
|
|
286
|
+
new_col_cells_content = []
|
|
287
|
+
for row in res_table.rows:
|
|
288
|
+
# Add each existing column cells as variable
|
|
289
|
+
for cn in res_col_indexes:
|
|
290
|
+
if is_res_value_table:
|
|
291
|
+
__get_variable_manager().register_variable(f"Column({cn})", row.get_cell(res_col_indexes[cn]).value, accept_expression=False)
|
|
292
|
+
else:
|
|
293
|
+
__get_variable_manager().register_variable(f"Column({cn})", row.get_cell(res_col_indexes[cn]).content, accept_expression=False)
|
|
294
|
+
|
|
295
|
+
# Add new cell
|
|
296
|
+
new_content = new_value_expr_cell.value
|
|
297
|
+
if is_res_value_table and isinstance(new_content, str):
|
|
298
|
+
new_content = f"'{new_content}'"
|
|
299
|
+
new_col_cells_content.append(new_content)
|
|
300
|
+
|
|
301
|
+
res_table.add_column(name=new_colname_cell.value, cells_content=new_col_cells_content)
|
|
302
|
+
|
|
303
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
304
|
+
|
|
305
|
+
@Given(r'(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with new rows')
|
|
306
|
+
def step_impl(context, var_name, table_varname):
|
|
307
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
308
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
309
|
+
table_new_rows = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
310
|
+
|
|
311
|
+
res_table = copy.copy(table)
|
|
312
|
+
is_res_value_table = ValueTableManager.is_value_table(res_table)
|
|
313
|
+
|
|
314
|
+
# Verify tables headers
|
|
315
|
+
header_comp = StringTableRowComparator()
|
|
316
|
+
header_comp.equals(table_new_rows.header, res_table.header)
|
|
317
|
+
|
|
318
|
+
# Add rows
|
|
319
|
+
for new_row in table_new_rows.rows:
|
|
320
|
+
cells_value = new_row.cells_value
|
|
321
|
+
if is_res_value_table:
|
|
322
|
+
#TODO: add a test to verify if with this implementation the cells with variables are reevaluated after each compare
|
|
323
|
+
res_table.add_row(cells_value=cells_value)
|
|
324
|
+
else:
|
|
325
|
+
res_table.add_row(cells_content=cells_value)
|
|
326
|
+
|
|
327
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
328
|
+
|
|
329
|
+
@Given(r"(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with column (?P<col_name>{Str}) content replaced by")
|
|
330
|
+
def step_impl(context, var_name, table_varname, col_name):
|
|
331
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
332
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
333
|
+
table_replace = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table, do_eval_once=False)
|
|
334
|
+
col_name = StepTools.evaluate_scenario_parameter(col_name)
|
|
335
|
+
|
|
336
|
+
res_table = copy.copy(table)
|
|
337
|
+
is_value_table = ValueTableManager.is_value_table(res_table)
|
|
338
|
+
col = res_table.get_column(name=col_name)
|
|
339
|
+
|
|
340
|
+
tr_indexes = table_replace.get_column_indexes_by_string_content()
|
|
341
|
+
tcell_comparator = Table2ValueTable_CellComparator() if "Condition Expression" in tr_indexes else None
|
|
342
|
+
for cell in col:
|
|
343
|
+
for row_replace in table_replace.rows:
|
|
344
|
+
cell_cond_value = row_replace[tr_indexes["Condition Value"]] if "Condition Value" in tr_indexes else None
|
|
345
|
+
cell_cond_expr = row_replace[tr_indexes["Condition Expression"]] if "Condition Expression" in tr_indexes else None
|
|
346
|
+
cell_rep_value = row_replace[tr_indexes["Replace Value"]] if "Replace Value" in tr_indexes else None
|
|
347
|
+
|
|
348
|
+
if cell_cond_value is not None:
|
|
349
|
+
# If condition value is 'DEFAULT' or cell value is equal to condition value
|
|
350
|
+
cond = (cell_cond_value.content_type == ValueTypes.Symbol and cell_cond_value.content == 'DEFAULT'
|
|
351
|
+
or cell_cond_value.value_type != ValueTypes.NotApplicable
|
|
352
|
+
and (is_value_table and cell.value == cell_cond_value.value or not is_value_table and cell.content == cell_cond_value.value) )
|
|
353
|
+
elif cell_cond_expr is not None:
|
|
354
|
+
cond = tcell_comparator.equals(cell, cell_cond_expr, raise_exception = False)
|
|
355
|
+
else:
|
|
356
|
+
continue
|
|
357
|
+
|
|
358
|
+
if cond:
|
|
359
|
+
if cell_rep_value.value_type != ValueTypes.NotApplicable:
|
|
360
|
+
# Note: As 'col' is created with a copy of 'res_table' cells, 'cell' is also a 'res_table' cell.
|
|
361
|
+
# Thus, modifying 'cell' is modifying the cell in 'res_table'
|
|
362
|
+
if is_value_table:
|
|
363
|
+
cell.value = cell_rep_value.value
|
|
364
|
+
else:
|
|
365
|
+
cell.content = cell_rep_value.value
|
|
366
|
+
break
|
|
367
|
+
else:
|
|
368
|
+
continue
|
|
369
|
+
|
|
370
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
371
|
+
|
|
372
|
+
@Given(r"(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with columns (?P<col_names>{List}) content replaced by")
|
|
373
|
+
def step_impl(context, var_name, table_varname, col_names):
|
|
374
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
375
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
376
|
+
col_names = StepTools.evaluate_list_scenario_parameter(col_names, "col_names")
|
|
377
|
+
|
|
378
|
+
rendered_table = render_step_table(context.table, " ")
|
|
379
|
+
|
|
380
|
+
__get_variable_manager().register_variable(var_name, copy.copy(table))
|
|
381
|
+
|
|
382
|
+
for col_name in col_names:
|
|
383
|
+
execute_steps(u"""
|
|
384
|
+
Given {var_name} = table {var_name} with column '{col_name}' content replaced by
|
|
385
|
+
{table}
|
|
386
|
+
""".format(var_name=var_name, col_name=col_name, table=rendered_table))
|
|
387
|
+
|
|
388
|
+
@Given(r"(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with rows ordered by (?P<col_names>{List})")
|
|
389
|
+
def step_impl(context, var_name, table_varname, col_names):
|
|
390
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
391
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
392
|
+
col_names = StepTools.evaluate_list_scenario_parameter(col_names, "col_names")
|
|
393
|
+
|
|
394
|
+
res_table = copy.copy(table)
|
|
395
|
+
res_table.sort(names=col_names)
|
|
396
|
+
|
|
397
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
398
|
+
|
|
399
|
+
@Given(r"(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with rows verifying")
|
|
400
|
+
def step_impl(context, var_name, table_varname):
|
|
401
|
+
"""
|
|
402
|
+
Keep only rows verifying at least one line of step table.
|
|
403
|
+
|
|
404
|
+
If table table_varname is without header, step table can't have a header and must have same column number as 'table_varname'.
|
|
405
|
+
If table table_varname is with header, step table must be a table with header, but it can contain only some columns of 'table_varname'.
|
|
406
|
+
"""
|
|
407
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
408
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
409
|
+
is_with_header = TableManager.is_table_with_header(table)
|
|
410
|
+
if is_with_header:
|
|
411
|
+
table_remove = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
412
|
+
else:
|
|
413
|
+
table_remove = BehaveStepTools.convert_step_table_2_value_table(context.table)
|
|
414
|
+
|
|
415
|
+
if is_with_header:
|
|
416
|
+
comparator = Table2ValueTable_WithHeaderComparator()
|
|
417
|
+
else:
|
|
418
|
+
comparator = Table2ValueTable_Comparator()
|
|
419
|
+
|
|
420
|
+
res_table = copy.copy(table)
|
|
421
|
+
if is_with_header and table_remove.nb_columns != table.nb_columns:
|
|
422
|
+
res_table.remove_rows_only_verifying(table_remove, comparator, keep_rows=True)
|
|
423
|
+
else:
|
|
424
|
+
res_table.remove_rows_verifying(table_remove, comparator, keep_rows=True)
|
|
425
|
+
|
|
426
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
427
|
+
|
|
428
|
+
@Given(r"(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) without rows verifying")
|
|
429
|
+
def step_impl(context, var_name, table_varname):
|
|
430
|
+
"""
|
|
431
|
+
Remove rows verifying at least one line of step table.
|
|
432
|
+
|
|
433
|
+
If table table_varname is without header, step table can't have a header and must have same column number as 'table_varname'.
|
|
434
|
+
If table table_varname is with header, step table must be a table with header, but it can contain only some columns of 'table_varname'.
|
|
435
|
+
"""
|
|
436
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
437
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
438
|
+
is_with_header = TableManager.is_table_with_header(table)
|
|
439
|
+
if is_with_header:
|
|
440
|
+
table_remove = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
441
|
+
else:
|
|
442
|
+
table_remove = BehaveStepTools.convert_step_table_2_value_table(context.table)
|
|
443
|
+
|
|
444
|
+
if is_with_header:
|
|
445
|
+
comparator = Table2ValueTable_WithHeaderComparator()
|
|
446
|
+
else:
|
|
447
|
+
comparator = Table2ValueTable_Comparator()
|
|
448
|
+
|
|
449
|
+
res_table = copy.copy(table)
|
|
450
|
+
if is_with_header and table_remove.nb_columns != table.nb_columns:
|
|
451
|
+
res_table.remove_rows_only_verifying(table_remove, comparator)
|
|
452
|
+
else:
|
|
453
|
+
res_table.remove_rows_verifying(table_remove, comparator)
|
|
454
|
+
|
|
455
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
456
|
+
|
|
457
|
+
@Given(r"(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) without duplicated rows")
|
|
458
|
+
def step_impl(context, var_name, table_varname):
|
|
459
|
+
"""
|
|
460
|
+
Remove duplicated rows considering only column names in step table.
|
|
461
|
+
"""
|
|
462
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
463
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
464
|
+
table_columns = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
465
|
+
|
|
466
|
+
res_table = copy.copy(table)
|
|
467
|
+
res_table.remove_rows_duplicated(column_names=table_columns.get_column_names())
|
|
468
|
+
|
|
469
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
470
|
+
|
|
471
|
+
@Given(r"(?P<var_name>{Variable}) = extract column (?P<col_name>{Str}) from table (?P<table_varname>{Variable})")
|
|
472
|
+
def step_impl(context, var_name, table_varname, col_name):
|
|
473
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
474
|
+
col_name = StepTools.evaluate_scenario_parameter(col_name)
|
|
475
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
476
|
+
|
|
477
|
+
if isinstance(table, TableWithHeader):
|
|
478
|
+
res_table = TableWithHeader()
|
|
479
|
+
res = table.get_column(name=col_name)
|
|
480
|
+
|
|
481
|
+
res_table.header = TableRow(cells_content={col_name})
|
|
482
|
+
for c in res.cells:
|
|
483
|
+
res_table.add_row(cells_content={c.content})
|
|
484
|
+
|
|
485
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
486
|
+
else:
|
|
487
|
+
raise TechnicalException(f"Table {table_varname} as no column {col_name}")
|
|
488
|
+
|
|
489
|
+
#TODO: return a list rather than a table
|
|
490
|
+
@Given(r"(?P<var_name>{Variable}) = extract column (?P<col_name>{Str}) cells from table (?P<table_varname>{Variable})")
|
|
491
|
+
def step_impl(context, var_name, table_varname, col_name):
|
|
492
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
493
|
+
col_name = StepTools.evaluate_scenario_parameter(col_name)
|
|
494
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
495
|
+
|
|
496
|
+
if isinstance(table, TableWithHeader):
|
|
497
|
+
res_table = Table()
|
|
498
|
+
res = table.get_column(name=col_name)
|
|
499
|
+
|
|
500
|
+
for c in res.cells:
|
|
501
|
+
res_table.add_row(cells_content={c.content})
|
|
502
|
+
|
|
503
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
504
|
+
else:
|
|
505
|
+
raise TechnicalException(f"Table {table_varname} as no column {col_name}")
|
|
506
|
+
|
|
507
|
+
#TODO: remove
|
|
508
|
+
@Given(r"(?P<var_name>{Variable}) = extract column (?P<col_name>{Str}) cells from table (?P<table_varname>{Variable}) as row")
|
|
509
|
+
def step_impl(context, var_name, table_varname, col_name):
|
|
510
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
511
|
+
col_name = StepTools.evaluate_scenario_parameter(col_name)
|
|
512
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
513
|
+
|
|
514
|
+
if isinstance(table, TableWithHeader):
|
|
515
|
+
res_table = Table()
|
|
516
|
+
res = table.get_column(name=col_name)
|
|
517
|
+
|
|
518
|
+
res_table.add_row()
|
|
519
|
+
for c in res.cells:
|
|
520
|
+
res_table.add_column(cells_content={c.content})
|
|
521
|
+
|
|
522
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
523
|
+
else:
|
|
524
|
+
raise TechnicalException(f"Table {table_varname} as no column {col_name}")
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
@Given(r"(?P<var_name>{Variable}) = table (?P<table_varname>{Variable}) with columns renamed")
|
|
528
|
+
def step_impl(context, var_name, table_varname):
|
|
529
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
530
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
531
|
+
table_columns = BehaveStepTools.convert_step_table_2_value_table(context.table)
|
|
532
|
+
|
|
533
|
+
col_index = table.get_column_indexes_by_string_content()
|
|
534
|
+
|
|
535
|
+
res_table = copy.copy(table)
|
|
536
|
+
header = res_table.header
|
|
537
|
+
|
|
538
|
+
for row in table_columns.rows:
|
|
539
|
+
old_name = row.get_cell(0).string_content
|
|
540
|
+
new_name = row.get_cell(1).string_content
|
|
541
|
+
|
|
542
|
+
if old_name in col_index:
|
|
543
|
+
header.get_cell(col_index[old_name]).content = new_name
|
|
544
|
+
res_table.header = header
|
|
545
|
+
|
|
546
|
+
__get_variable_manager().register_variable(var_name, res_table)
|
|
547
|
+
|
|
548
|
+
@Given(r"(?P<var_name>{Variable}) = number of rows in table (?P<table_varname>{Variable})")
|
|
549
|
+
def step_impl(context, var_name, table_varname):
|
|
550
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
551
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
552
|
+
|
|
553
|
+
# print(table.represent())
|
|
554
|
+
count_table = table.nb_rows
|
|
555
|
+
|
|
556
|
+
# print(count_table)
|
|
557
|
+
__get_variable_manager().register_variable(var_name, count_table)
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,64 @@
|
|
|
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.tools.abstracts.service import Service
|
|
16
|
+
from holado_system.system.command.command import Command, CommandStates
|
|
17
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
18
|
+
from holado_core.common.tools.tools import Tools
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
class BlockingCommandService(Service):
|
|
23
|
+
"""
|
|
24
|
+
Manage a service launched by a blocking system command.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(self, name, cmd, **kwargs):
|
|
28
|
+
super().__init__(name)
|
|
29
|
+
|
|
30
|
+
self.__cmd_str = cmd
|
|
31
|
+
self.__command = Command(self.__cmd_str, **kwargs)
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def internal_command(self):
|
|
35
|
+
return self.__command
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def status(self):
|
|
39
|
+
if self.__command is not None:
|
|
40
|
+
return self.__command.state
|
|
41
|
+
else:
|
|
42
|
+
return None
|
|
43
|
+
|
|
44
|
+
def start(self):
|
|
45
|
+
"""
|
|
46
|
+
Start the service.
|
|
47
|
+
"""
|
|
48
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
49
|
+
logger.debug(f"Starting service '{self.name}'")
|
|
50
|
+
self.__command.start()
|
|
51
|
+
|
|
52
|
+
def stop(self):
|
|
53
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
54
|
+
logger.debug(f"Stopping service '{self.name}'")
|
|
55
|
+
status = self.__command.state
|
|
56
|
+
if status == CommandStates.Running:
|
|
57
|
+
# self.__command.terminate()
|
|
58
|
+
self.__command.stop()
|
|
59
|
+
self.__command.join()
|
|
60
|
+
else:
|
|
61
|
+
raise FunctionalException(f"Service '{self.name}' is not running (status: {status.name}")
|
|
62
|
+
|
|
63
|
+
def join(self, timeout=None):
|
|
64
|
+
self.__command.join(timeout)
|
|
@@ -0,0 +1,48 @@
|
|
|
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
|
+
import abc
|
|
16
|
+
from holado_system.system.command.command import CommandStates
|
|
17
|
+
from holado.common.handlers.object import DeleteableObject
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
class Service(DeleteableObject):
|
|
22
|
+
__metaclass__ = abc.ABCMeta
|
|
23
|
+
|
|
24
|
+
def __init__(self, name):
|
|
25
|
+
super().__init__(name)
|
|
26
|
+
|
|
27
|
+
self.__auto_stop = False
|
|
28
|
+
|
|
29
|
+
def _delete_object(self):
|
|
30
|
+
if self.auto_stop and self.status == CommandStates.Running:
|
|
31
|
+
self.stop()
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def status(self):
|
|
35
|
+
raise NotImplementedError()
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def auto_stop(self):
|
|
39
|
+
self.__auto_stop
|
|
40
|
+
|
|
41
|
+
@auto_stop.setter
|
|
42
|
+
def auto_stop(self, auto_stop):
|
|
43
|
+
self.__auto_stop = auto_stop
|
|
44
|
+
|
|
45
|
+
@abc.abstractmethod
|
|
46
|
+
def stop(self):
|
|
47
|
+
"""Stop service"""
|
|
48
|
+
raise NotImplementedError()
|