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,65 @@
|
|
|
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 copy
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ProtobufModifier(object):
|
|
21
|
+
"""
|
|
22
|
+
Manage the modification of Protobuf objects with optimized algorithms.
|
|
23
|
+
"""
|
|
24
|
+
def __init__(self):
|
|
25
|
+
self.__protobuf_messages = None
|
|
26
|
+
self.__timestamp_field_names_by_type = {}
|
|
27
|
+
|
|
28
|
+
def initialize(self, protobuf_messages):
|
|
29
|
+
self.__protobuf_messages = protobuf_messages
|
|
30
|
+
|
|
31
|
+
def shift_all_timestamps(self, list_proto_obj, shift_seconds, do_copy=True):
|
|
32
|
+
res = []
|
|
33
|
+
|
|
34
|
+
for obj in list_proto_obj:
|
|
35
|
+
# Define timestamp fields
|
|
36
|
+
obj_type = self.__protobuf_messages.get_object_type_fullname(obj=obj)
|
|
37
|
+
if obj_type in self.__timestamp_field_names_by_type:
|
|
38
|
+
field_names = self.__timestamp_field_names_by_type[obj_type]
|
|
39
|
+
else:
|
|
40
|
+
all_field_names = self.__protobuf_messages.get_object_field_names(obj, recursive=True, uncollapse_repeated=True, add_repeated_index=True, with_unset=False)
|
|
41
|
+
field_names = []
|
|
42
|
+
for fn in all_field_names:
|
|
43
|
+
if fn.endswith('.nanos') and f"{fn[:-6]}.seconds" in all_field_names:
|
|
44
|
+
field_name = fn[:-6]
|
|
45
|
+
value = self.__protobuf_messages.get_object_field_value(obj, field_name)
|
|
46
|
+
value_type = self.__protobuf_messages.get_object_type_fullname(obj=value)
|
|
47
|
+
if value_type == "google.protobuf.Timestamp":
|
|
48
|
+
field_names.append(field_name)
|
|
49
|
+
self.__timestamp_field_names_by_type[obj_type] = field_names
|
|
50
|
+
|
|
51
|
+
# Update object
|
|
52
|
+
if do_copy:
|
|
53
|
+
res_obj = copy.deepcopy(obj)
|
|
54
|
+
else:
|
|
55
|
+
res_obj = obj
|
|
56
|
+
for fn in field_names:
|
|
57
|
+
ts = self.__protobuf_messages.get_object_field_value(res_obj, fn)
|
|
58
|
+
if ts.seconds != 0:
|
|
59
|
+
ts.seconds += shift_seconds
|
|
60
|
+
res.append(res_obj)
|
|
61
|
+
|
|
62
|
+
return res
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
|
|
2
|
+
#################################################
|
|
3
|
+
# HolAdo (Holistic Automation do)
|
|
4
|
+
#
|
|
5
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
8
|
+
#
|
|
9
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
|
+
|
|
11
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
12
|
+
#################################################
|
|
13
|
+
|
|
14
|
+
import logging
|
|
15
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
16
|
+
from holado_python.common.tools.datetime import DateTime
|
|
17
|
+
import re
|
|
18
|
+
from datetime import datetime, timedelta
|
|
19
|
+
from holado_protobuf.ipc.protobuf.abstracts.type import Type
|
|
20
|
+
from holado_python.standard_library.typing import Typing
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
#TODO: add all types of https://googleapis.dev/python/protobuf/latest/google/protobuf.html
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Duration(Type):
|
|
29
|
+
"""
|
|
30
|
+
Manage actions with type google.protobuf.Duration
|
|
31
|
+
"""
|
|
32
|
+
@classmethod
|
|
33
|
+
def protobuf_class(cls):
|
|
34
|
+
from google.protobuf.duration_pb2 import Duration as gp_Duration # @UnresolvedImport
|
|
35
|
+
return gp_Duration
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
def _set_object_value(cls, obj, value, raise_exception=False):
|
|
39
|
+
if isinstance(value, cls.protobuf_class()):
|
|
40
|
+
obj.CopyFrom(value)
|
|
41
|
+
elif isinstance(value, timedelta):
|
|
42
|
+
obj.FromTimedelta(value)
|
|
43
|
+
elif isinstance(value, int) or isinstance(value, float):
|
|
44
|
+
nanos = round(value * 1e9)
|
|
45
|
+
obj.FromNanoseconds(nanos)
|
|
46
|
+
elif isinstance(value, str):
|
|
47
|
+
if re.match(r"-?\d+(?:.\d+)?s", value):
|
|
48
|
+
obj.FromJsonString(value)
|
|
49
|
+
else:
|
|
50
|
+
if raise_exception:
|
|
51
|
+
raise FunctionalException(f"For Duration objects, the value must be in a string format '-?\\d+(?:.\\d+)?s' (ex: '1s', '1.01s', '1.0000001s', '-3.100s'). Got value: [{value}] (type: {Typing.get_object_class_fullname(value)})")
|
|
52
|
+
else:
|
|
53
|
+
return False
|
|
54
|
+
else:
|
|
55
|
+
if raise_exception:
|
|
56
|
+
raise FunctionalException(f"For Duration objects, the value must be a timedelta, an int or a string. Got value: [{value}] (type: {Typing.get_object_class_fullname(value)})")
|
|
57
|
+
else:
|
|
58
|
+
return False
|
|
59
|
+
return True
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class Message(Type):
|
|
63
|
+
"""
|
|
64
|
+
Manage actions with type google.protobuf.Message
|
|
65
|
+
"""
|
|
66
|
+
@classmethod
|
|
67
|
+
def protobuf_class(cls):
|
|
68
|
+
from google.protobuf.message import Message as gp_Message
|
|
69
|
+
return gp_Message
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def _set_object_value(cls, obj, value, raise_exception=False):
|
|
73
|
+
if value is None:
|
|
74
|
+
obj.SetInParent()
|
|
75
|
+
elif isinstance(value, cls.protobuf_class()):
|
|
76
|
+
obj.CopyFrom(value)
|
|
77
|
+
elif isinstance(value, dict):
|
|
78
|
+
from google.protobuf import json_format
|
|
79
|
+
json_format.ParseDict(value, obj)
|
|
80
|
+
else:
|
|
81
|
+
if raise_exception:
|
|
82
|
+
raise FunctionalException(f"For Message objects, the value must be None or a {cls.protobuf_class()}. Got value of type {Typing.get_object_class_fullname(value)}")
|
|
83
|
+
else:
|
|
84
|
+
return False
|
|
85
|
+
return True
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class Timestamp(Type):
|
|
89
|
+
"""
|
|
90
|
+
Manage actions with type google.protobuf.Timestamp
|
|
91
|
+
"""
|
|
92
|
+
@classmethod
|
|
93
|
+
def protobuf_class(cls):
|
|
94
|
+
from google.protobuf.timestamp_pb2 import Timestamp as gp_Timestamp # @UnresolvedImport
|
|
95
|
+
return gp_Timestamp
|
|
96
|
+
|
|
97
|
+
@classmethod
|
|
98
|
+
def _set_object_value(cls, obj, value, raise_exception=False):
|
|
99
|
+
if isinstance(value, cls.protobuf_class()):
|
|
100
|
+
obj.CopyFrom(value)
|
|
101
|
+
elif isinstance(value, datetime):
|
|
102
|
+
obj.FromDatetime(value)
|
|
103
|
+
elif isinstance(value, str):
|
|
104
|
+
if re.match(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:.\d+)?Z", value):
|
|
105
|
+
obj.FromJsonString(value)
|
|
106
|
+
elif DateTime.is_str_datetime(value):
|
|
107
|
+
dt = DateTime.str_2_datetime(value)
|
|
108
|
+
obj.FromDatetime(dt)
|
|
109
|
+
else:
|
|
110
|
+
if raise_exception:
|
|
111
|
+
raise FunctionalException(f"For Timestamp objects, the value must be in a string format like '2022-01-01T01:00:00Z' or '2022-01-01 01:00:00'. Got value: [{value}] (type: {Typing.get_object_class_fullname(value)})")
|
|
112
|
+
else:
|
|
113
|
+
return False
|
|
114
|
+
else:
|
|
115
|
+
if raise_exception:
|
|
116
|
+
raise FunctionalException(f"For Timestamp objects, the value must be a datetime or a string. Got value: [{value}] (type: {Typing.get_object_class_fullname(value)})")
|
|
117
|
+
else:
|
|
118
|
+
return False
|
|
119
|
+
return True
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
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 .ipc.protobuf_steps import *
|
|
@@ -0,0 +1,297 @@
|
|
|
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.scenario.step_tools import StepTools
|
|
17
|
+
from holado.common.context.session_context import SessionContext
|
|
18
|
+
from holado_test.behave.behave import * # @UnusedWildImport
|
|
19
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
20
|
+
from holado_protobuf.ipc.protobuf.protobuf_messages import ProtobufMessages
|
|
21
|
+
import logging
|
|
22
|
+
from holado_test.behave.scenario.behave_step_tools import BehaveStepTools
|
|
23
|
+
from holado_core.common.tools.tools import Tools
|
|
24
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
25
|
+
from holado_python.common.tools.datetime import DateTime
|
|
26
|
+
from holado_python.standard_library.typing import Typing
|
|
27
|
+
from holado_protobuf.ipc.protobuf.protobuf_converter import SortOrder
|
|
28
|
+
|
|
29
|
+
logger = logging.getLogger(__name__)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
if ProtobufMessages.is_available():
|
|
33
|
+
|
|
34
|
+
# TODO: check if needed
|
|
35
|
+
import google.protobuf.pyext
|
|
36
|
+
|
|
37
|
+
def __get_protobuf_converter():
|
|
38
|
+
return SessionContext.instance().protobuf_converter
|
|
39
|
+
|
|
40
|
+
def __get_protobuf_messages():
|
|
41
|
+
return SessionContext.instance().protobuf_messages
|
|
42
|
+
|
|
43
|
+
def __get_protobuf_modifier():
|
|
44
|
+
return SessionContext.instance().protobuf_modifier
|
|
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
|
+
def __get_session_context():
|
|
56
|
+
return SessionContext.instance()
|
|
57
|
+
|
|
58
|
+
@Step(r"(?P<var_name>{Variable}) = convert Protobuf object (?P<obj_var_name>{Variable}) to datetime")
|
|
59
|
+
def step_impl(context, var_name, obj_var_name): # @DuplicatedSignature
|
|
60
|
+
from google.protobuf import timestamp_pb2
|
|
61
|
+
|
|
62
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
63
|
+
obj = StepTools.evaluate_variable_value(obj_var_name)
|
|
64
|
+
|
|
65
|
+
if not isinstance(obj, timestamp_pb2.Timestamp): # @UndefinedVariable
|
|
66
|
+
raise TechnicalException(f"Object must be of type google.protobuf.Timestamp (obtained type: {Typing.get_object_class_fullname(obj)})")
|
|
67
|
+
|
|
68
|
+
res = DateTime.seconds_nanos_to_datetime(obj.seconds, obj.nanos)
|
|
69
|
+
|
|
70
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
71
|
+
|
|
72
|
+
@Step(r"(?P<var_name>{Variable}) = convert list (?P<list_var_name>{Variable}) to list of Protobuf field (?P<attribute_name>{Str})")
|
|
73
|
+
def step_impl(context, var_name, list_var_name, attribute_name): # @DuplicatedSignature
|
|
74
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
75
|
+
attr_name = StepTools.evaluate_scenario_parameter(attribute_name)
|
|
76
|
+
list_obj = StepTools.evaluate_variable_value(list_var_name)
|
|
77
|
+
|
|
78
|
+
res = []
|
|
79
|
+
for index, obj in enumerate(list_obj):
|
|
80
|
+
if hasattr(obj, attr_name):
|
|
81
|
+
attr_val = getattr(obj, attr_name)
|
|
82
|
+
if ProtobufMessages.is_object_repeated(attr_val):
|
|
83
|
+
attr_val = [v for v in attr_val]
|
|
84
|
+
# logger.debug(f"Result list - add field value [{attr_val}] (type: {Typing.get_object_class_fullname(attr_val)} ; dir: {dir(attr_val)})")
|
|
85
|
+
res.append(attr_val)
|
|
86
|
+
else:
|
|
87
|
+
raise FunctionalException(f"In list, object of index {index} hasn't attribute '{attr_name}'")
|
|
88
|
+
|
|
89
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
90
|
+
|
|
91
|
+
@Given(r"(?P<var_name>{Variable}) = convert list (?P<list_var_name>{Variable}) to merged list of Protobuf repeated field (?P<attribute_name>{Str})")
|
|
92
|
+
def step_impl(context, var_name, list_var_name, attribute_name): # @DuplicatedSignature
|
|
93
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
94
|
+
attr_name = StepTools.evaluate_scenario_parameter(attribute_name)
|
|
95
|
+
list_obj = StepTools.evaluate_variable_value(list_var_name)
|
|
96
|
+
|
|
97
|
+
res = []
|
|
98
|
+
for index, obj in enumerate(list_obj):
|
|
99
|
+
if hasattr(obj, attr_name):
|
|
100
|
+
attr_val = getattr(obj, attr_name)
|
|
101
|
+
if not ProtobufMessages.is_object_repeated(attr_val):
|
|
102
|
+
raise FunctionalException(f"In list, object of index {index} has field '{attr_name}' but it isn't repeated")
|
|
103
|
+
|
|
104
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
105
|
+
logger.debug(f"In list, object of index {index} has field '{attr_name}' repeated {len(attr_val)} times")
|
|
106
|
+
for val in attr_val:
|
|
107
|
+
# logger.debug(f"Result list - add field value [{val}] (type: {Typing.get_object_class_fullname(val)} ; dir: {dir(val)})")
|
|
108
|
+
res.append(val)
|
|
109
|
+
else:
|
|
110
|
+
raise FunctionalException(f"In list, object of index {index} hasn't attribute '{attr_name}'")
|
|
111
|
+
|
|
112
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
113
|
+
|
|
114
|
+
@Step(r"(?P<var_name>{Variable}) = convert list (?P<list_var_name>{Variable}) to list of (?P<proto_type_str>{Str}) Protobuf objects")
|
|
115
|
+
def step_impl(context, var_name, list_var_name, proto_type_str): # @DuplicatedSignature
|
|
116
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
117
|
+
list_obj = StepTools.evaluate_variable_value(list_var_name)
|
|
118
|
+
proto_type_str = StepTools.evaluate_scenario_parameter(proto_type_str)
|
|
119
|
+
|
|
120
|
+
res = []
|
|
121
|
+
for index, obj in enumerate(list_obj):
|
|
122
|
+
new_obj = __get_protobuf_messages().new_object(proto_type_str)
|
|
123
|
+
field_names = __get_protobuf_messages().get_object_field_names(obj, recursive=True, uncollapse_repeated=True, add_repeated_index=True, with_unset=False)
|
|
124
|
+
for fn in field_names:
|
|
125
|
+
try:
|
|
126
|
+
value = __get_protobuf_messages().get_object_field_value(obj, fn)
|
|
127
|
+
__get_protobuf_messages().set_object_field_value(new_obj, fn, value)
|
|
128
|
+
except Exception as exc:
|
|
129
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
130
|
+
logger.debug(f"For object of index {index}, failed to set field '{fn}': {str(exc)}")
|
|
131
|
+
res.append(new_obj)
|
|
132
|
+
|
|
133
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
@Given(r'(?P<var_name>{Variable}) = convert list (?P<list_obj_str>{Variable}) to table with Protobuf fields as columns')
|
|
137
|
+
def step_impl(context, var_name, list_obj_str):
|
|
138
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
139
|
+
list_obj = StepTools.evaluate_variable_value(list_obj_str)
|
|
140
|
+
|
|
141
|
+
res = __get_protobuf_converter().create_table_with_protobuf_fields_as_columns(list_obj, recursive=False)
|
|
142
|
+
|
|
143
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
144
|
+
|
|
145
|
+
@Given(r'(?P<var_name>{Variable}) = convert list (?P<list_obj_str>{Variable}) to table with Protobuf fields as columns recursively')
|
|
146
|
+
def step_impl(context, var_name, list_obj_str):
|
|
147
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
148
|
+
list_obj = StepTools.evaluate_variable_value(list_obj_str)
|
|
149
|
+
|
|
150
|
+
res = __get_protobuf_converter().create_table_with_protobuf_fields_as_columns(list_obj, recursive=True)
|
|
151
|
+
|
|
152
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
153
|
+
|
|
154
|
+
@Given(r'(?P<var_name>{Variable}) = convert list (?P<list_obj_str>{Variable}) to table with Protobuf fields as columns recursively and repeated fields uncollapsed')
|
|
155
|
+
def step_impl(context, var_name, list_obj_str):
|
|
156
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
157
|
+
list_obj = StepTools.evaluate_variable_value(list_obj_str)
|
|
158
|
+
|
|
159
|
+
res = __get_protobuf_converter().create_table_with_protobuf_fields_as_columns(list_obj, recursive=True, uncollapse_repeated=True)
|
|
160
|
+
|
|
161
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
@Step(r"(?P<var_name>{Variable}) = new Protobuf object of type (?P<proto_type_str>{Str})")
|
|
165
|
+
def step_impl(context, var_name, proto_type_str):
|
|
166
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
167
|
+
proto_type_str = StepTools.evaluate_scenario_parameter(proto_type_str)
|
|
168
|
+
table = BehaveStepTools.get_step_table(context)
|
|
169
|
+
|
|
170
|
+
res = __get_protobuf_messages().new_message(proto_type_str, fields_table=table)
|
|
171
|
+
|
|
172
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
173
|
+
|
|
174
|
+
@Step(r"(?P<var_name>{Variable}) = serialize Protobuf object (?P<proto_str>{Variable})")
|
|
175
|
+
def step_impl(context, var_name, proto_str):
|
|
176
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
177
|
+
obj = StepTools.evaluate_variable_value(proto_str)
|
|
178
|
+
res = obj.SerializeToString()
|
|
179
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
180
|
+
|
|
181
|
+
@Step(r"(?P<var_name>{Variable}) = serialize list (?P<obj_list>{Variable}) of Protobuf objects")
|
|
182
|
+
def step_impl(context, var_name, obj_list):
|
|
183
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
184
|
+
obj_list = StepTools.evaluate_variable_value(obj_list)
|
|
185
|
+
|
|
186
|
+
res = []
|
|
187
|
+
for obj in obj_list:
|
|
188
|
+
obj = obj.SerializeToString()
|
|
189
|
+
res.append(obj)
|
|
190
|
+
|
|
191
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
192
|
+
|
|
193
|
+
@Step(r"(?P<var_name>{Variable}) = unserialize string (?P<ser_str>{Str}) as (?P<proto_type_str>{Str}) Protobuf object")
|
|
194
|
+
def step_impl(context, var_name, ser_str, proto_type_str):
|
|
195
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
196
|
+
ser_str = StepTools.evaluate_scenario_parameter(ser_str)
|
|
197
|
+
proto_type_str = StepTools.evaluate_scenario_parameter(proto_type_str)
|
|
198
|
+
|
|
199
|
+
obj = __get_protobuf_messages().new_message(proto_type_str, serialized_string=ser_str)
|
|
200
|
+
|
|
201
|
+
__get_variable_manager().register_variable(var_name, obj)
|
|
202
|
+
|
|
203
|
+
@Step(r"(?P<var_name>{Variable}) = unserialize string list (?P<ser_list>{Variable}) as (?P<proto_type_str>{Str}) Protobuf objects")
|
|
204
|
+
def step_impl(context, var_name, ser_list, proto_type_str):
|
|
205
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
206
|
+
ser_list = StepTools.evaluate_variable_value(ser_list)
|
|
207
|
+
proto_type_str = StepTools.evaluate_scenario_parameter(proto_type_str)
|
|
208
|
+
|
|
209
|
+
res = []
|
|
210
|
+
for ser_str in ser_list:
|
|
211
|
+
obj = __get_protobuf_messages().new_message(proto_type_str, serialized_string=ser_str)
|
|
212
|
+
res.append(obj)
|
|
213
|
+
|
|
214
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
215
|
+
|
|
216
|
+
@Given(r"(?P<var_name>{Variable}) = convert Protobuf object (?P<obj_var_name>{Variable}) to json object")
|
|
217
|
+
def step_impl(context, var_name, obj_var_name): # @DuplicatedSignature
|
|
218
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
219
|
+
obj = StepTools.evaluate_variable_value(obj_var_name)
|
|
220
|
+
res = __get_protobuf_converter().convert_protobuf_object_to_json_object(obj)
|
|
221
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
222
|
+
|
|
223
|
+
@Given(r"(?P<var_name>{Variable}) = convert list (?P<obj_list_var_name>{Variable}) of Protobuf objects to json objects")
|
|
224
|
+
def step_impl(context, var_name, obj_list_var_name): # @DuplicatedSignature
|
|
225
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
226
|
+
obj_list = StepTools.evaluate_variable_value(obj_list_var_name)
|
|
227
|
+
|
|
228
|
+
res = []
|
|
229
|
+
for obj in obj_list:
|
|
230
|
+
res_obj = __get_protobuf_converter().convert_protobuf_object_to_json_object(obj)
|
|
231
|
+
res.append(res_obj)
|
|
232
|
+
|
|
233
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
234
|
+
|
|
235
|
+
@Given(r"(?P<var_name>{Variable}) = convert Protobuf object (?P<obj_var_name>{Variable}) to name/value table(?: with(?:(?P<with_names_str> names)?(?: and)?(?P<with_repeated_str> repeated)? uncollapsed)?(?: and)?(?P<with_unset_str> unset fields)?)?(?: \((?P<sort_alphabetically>sort alphabetically)?\))?")
|
|
236
|
+
def step_impl(context, var_name, obj_var_name, with_names_str, with_repeated_str, with_unset_str, sort_alphabetically): # @DuplicatedSignature
|
|
237
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
238
|
+
obj = StepTools.evaluate_variable_value(obj_var_name)
|
|
239
|
+
recursive = with_names_str is not None
|
|
240
|
+
uncollapse_repeated = with_repeated_str is not None
|
|
241
|
+
with_unset = with_unset_str is not None
|
|
242
|
+
sort_order = SortOrder.Alphabetic if sort_alphabetically is not None else None
|
|
243
|
+
|
|
244
|
+
res = __get_protobuf_converter().convert_protobuf_object_to_name_value_table(obj, recursive=recursive, uncollapse_repeated=uncollapse_repeated, with_unset=with_unset, sort_order=sort_order)
|
|
245
|
+
|
|
246
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
247
|
+
|
|
248
|
+
@Given(r"(?P<var_name>{Variable}) = value of Protobuf enum (?P<enum_fullname>{Str})")
|
|
249
|
+
def step_impl(context, var_name, enum_fullname): # @DuplicatedSignature
|
|
250
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
251
|
+
enum_fullname = StepTools.evaluate_scenario_parameter(enum_fullname)
|
|
252
|
+
res = __get_protobuf_messages().get_enum_value(fullname=enum_fullname)
|
|
253
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
254
|
+
|
|
255
|
+
@Given(r"(?P<var_name>{Variable}) = name of value (?P<enum_value>{Str}) of Protobuf enum type (?P<enum_type_fullname>{Str})")
|
|
256
|
+
def step_impl(context, var_name, enum_value, enum_type_fullname): # @DuplicatedSignature
|
|
257
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
258
|
+
enum_value = StepTools.evaluate_scenario_parameter(enum_value)
|
|
259
|
+
enum_type_fullname = StepTools.evaluate_scenario_parameter(enum_type_fullname)
|
|
260
|
+
res = __get_protobuf_messages().get_enum_name(enum_value=enum_value, enum_type_fullname=enum_type_fullname)
|
|
261
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
262
|
+
|
|
263
|
+
@Given(r"import Protobuf enum type (?P<enum_type_fullname>{Str})")
|
|
264
|
+
def step_impl(context, enum_type_fullname): # @DuplicatedSignature
|
|
265
|
+
enum_type_fullname = StepTools.evaluate_scenario_parameter(enum_type_fullname)
|
|
266
|
+
res = __get_protobuf_messages().get_enum_type(enum_type_fullname=enum_type_fullname)
|
|
267
|
+
__get_variable_manager().register_variable(res.DESCRIPTOR.name, res)
|
|
268
|
+
|
|
269
|
+
# Register each enum name fullname
|
|
270
|
+
# Note: accept_expression=False is needed, otherwise, when importing a second enum with same package name,
|
|
271
|
+
# previous line "enum_type_fullname = StepTools.evaluate_scenario_parameter(enum_type_fullname)" will fail
|
|
272
|
+
for name, value in res.DESCRIPTOR.values_by_name.items():
|
|
273
|
+
__get_variable_manager().register_variable(f"{res.DESCRIPTOR.full_name}.{name}", value.number, accept_expression=False)
|
|
274
|
+
|
|
275
|
+
@Given(r"import values of Protobuf enum type (?P<enum_type_fullname>{Str})(?: with prefix (?P<prefix>{Str}))?")
|
|
276
|
+
def step_impl(context, enum_type_fullname, prefix): # @DuplicatedSignature
|
|
277
|
+
enum_type_fullname = StepTools.evaluate_scenario_parameter(enum_type_fullname)
|
|
278
|
+
prefix = StepTools.evaluate_scenario_parameter(prefix)
|
|
279
|
+
et = __get_protobuf_messages().get_enum_type(enum_type_fullname=enum_type_fullname)
|
|
280
|
+
for name, value in et.DESCRIPTOR.values_by_name.items():
|
|
281
|
+
if prefix:
|
|
282
|
+
__get_variable_manager().register_variable(prefix+name, value.number, accept_expression=False)
|
|
283
|
+
else:
|
|
284
|
+
__get_variable_manager().register_variable(name, value.number)
|
|
285
|
+
|
|
286
|
+
@Step(r"(?P<var_name>{Variable}) = list (?P<obj_list>{Variable}) of Protobuf objects with timestamps shifted by (?P<shift_seconds>{Int}) seconds")
|
|
287
|
+
def step_impl(context, var_name, obj_list, shift_seconds):
|
|
288
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
289
|
+
obj_list = StepTools.evaluate_variable_value(obj_list)
|
|
290
|
+
shift_seconds = StepTools.evaluate_scenario_parameter(shift_seconds)
|
|
291
|
+
|
|
292
|
+
res = __get_protobuf_modifier().shift_all_timestamps(obj_list, shift_seconds)
|
|
293
|
+
|
|
294
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
|
|
17
|
+
def dependencies():
|
|
18
|
+
"""
|
|
19
|
+
Return None or the list of names of modules it depend on
|
|
20
|
+
"""
|
|
21
|
+
return None
|
|
22
|
+
|
|
23
|
+
def register():
|
|
24
|
+
"""
|
|
25
|
+
Register the services of this module
|
|
26
|
+
"""
|
|
27
|
+
# from holado.common.context.session_context import SessionContext
|
|
28
|
+
|
|
29
|
+
# from holado_xxx.xxx import XXXManager
|
|
30
|
+
# SessionContext.instance().services.register_service_type("xxx_manager", XXXManager)
|
|
31
|
+
pass
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import logging
|
|
17
|
+
from enum import Enum
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ArithmeticOperator(str, Enum):
|
|
24
|
+
Addition = "+"
|
|
25
|
+
Subtraction = "-"
|
|
26
|
+
Multiplication = "*"
|
|
27
|
+
Division = "/"
|
|
28
|
+
Modulus = "%"
|
|
29
|
+
Exponentiation = "**"
|
|
30
|
+
FloorDivision = "//"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import logging
|
|
17
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
18
|
+
from holado_python.standard_library.typing import Typing
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def is_sorted(iterable, key=lambda x:x, reverse=False):
|
|
24
|
+
if key is None:
|
|
25
|
+
key = lambda x:x
|
|
26
|
+
|
|
27
|
+
if reverse:
|
|
28
|
+
return all(key(iterable[i]) >= key(iterable[i+1]) for i in range(len(iterable) - 1))
|
|
29
|
+
else:
|
|
30
|
+
return all(key(iterable[i]) <= key(iterable[i+1]) for i in range(len(iterable) - 1))
|
|
31
|
+
|
|
32
|
+
def remove_all(iterable, value):
|
|
33
|
+
if not isinstance(iterable, list):
|
|
34
|
+
raise TechnicalException(f"Unmanaged to remove all for iterable type {Typing.get_object_class_fullname(iterable)}")
|
|
35
|
+
|
|
36
|
+
new_list = [x for x in iterable if x != value]
|
|
37
|
+
del iterable[:]
|
|
38
|
+
iterable.extend(new_list)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
|
|
2
|
+
#################################################
|
|
3
|
+
# HolAdo (Holistic Automation do)
|
|
4
|
+
#
|
|
5
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
8
|
+
#
|
|
9
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
|
+
|
|
11
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
12
|
+
#################################################
|
|
13
|
+
|
|
14
|
+
import logging
|
|
15
|
+
from holado_core.common.tools.comparators.comparator import Comparator
|
|
16
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
17
|
+
from holado_core.common.tools.converters.converter import Converter
|
|
18
|
+
from holado_python.standard_library.typing import Typing
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class BooleanComparator(Comparator):
|
|
24
|
+
|
|
25
|
+
def __init__(self):
|
|
26
|
+
super().__init__("boolean")
|
|
27
|
+
|
|
28
|
+
def _convert_input(self, obj, name):
|
|
29
|
+
if Converter.is_boolean(obj):
|
|
30
|
+
res = Converter.to_boolean(obj)
|
|
31
|
+
else:
|
|
32
|
+
res = obj
|
|
33
|
+
|
|
34
|
+
if not isinstance(res, bool):
|
|
35
|
+
raise FunctionalException(f"{name.capitalize()} value is not a boolean: [{res}] (type: {Typing.get_object_class_fullname(res)})")
|
|
36
|
+
return res
|
|
37
|
+
|