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,307 @@
|
|
|
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.tables.table_with_header import TableWithHeader
|
|
16
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
17
|
+
from typing import NamedTuple, Iterable
|
|
18
|
+
from holado_core.common.tables.table_row import TableRow
|
|
19
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
20
|
+
from holado_binary.ipc.binary import Binary
|
|
21
|
+
from holado_python.standard_library.typing import Typing
|
|
22
|
+
from holado_core.common.tools.string_tools import StrTools
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class BitSeries():
|
|
28
|
+
"""
|
|
29
|
+
Define a bit-series as a list of bit sections.
|
|
30
|
+
A bit section is a tuple (name, bit length, type, value).
|
|
31
|
+
|
|
32
|
+
It can be used in 'declaration' mode, ie when bit sections are added without "value" and values are filled after declaration with method "from_hex".
|
|
33
|
+
|
|
34
|
+
BitSeries can be compared. If a bit section mustn't be compared, simply set its value to None in one BitSeries.
|
|
35
|
+
"""
|
|
36
|
+
def __init__(self, bit_sections_list = None):
|
|
37
|
+
self.__series = []
|
|
38
|
+
self.__index_by_name = {}
|
|
39
|
+
self.__len = None
|
|
40
|
+
|
|
41
|
+
self.add_bit_section(bit_sections_list = bit_sections_list)
|
|
42
|
+
|
|
43
|
+
def __iter__(self):
|
|
44
|
+
return self.__series.__iter__()
|
|
45
|
+
|
|
46
|
+
def __next__(self):
|
|
47
|
+
return self.__series.__next__()
|
|
48
|
+
|
|
49
|
+
def __len__(self):
|
|
50
|
+
if self.__len is None:
|
|
51
|
+
self.__len = sum(iter(bs.length for bs in self.__series))
|
|
52
|
+
return self.__len
|
|
53
|
+
|
|
54
|
+
def __getitem__(self, key):
|
|
55
|
+
if isinstance(key, int):
|
|
56
|
+
return self.get_bit_section(index=key).value
|
|
57
|
+
elif isinstance(key, str):
|
|
58
|
+
return self.get_bit_section(name=key).value
|
|
59
|
+
else:
|
|
60
|
+
raise TechnicalException(f"Unmanaged key: {key} (type: {Typing.get_object_class_fullname(key)})")
|
|
61
|
+
|
|
62
|
+
def __setitem__(self, key, value):
|
|
63
|
+
if isinstance(key, int):
|
|
64
|
+
return self.set_bit_section_value(index=key, value=value)
|
|
65
|
+
elif isinstance(key, str):
|
|
66
|
+
return self.set_bit_section_value(name=key, value=value)
|
|
67
|
+
else:
|
|
68
|
+
raise TechnicalException(f"Unmanaged key: {key}")
|
|
69
|
+
|
|
70
|
+
@property
|
|
71
|
+
def nb_bits(self):
|
|
72
|
+
return len(self)
|
|
73
|
+
|
|
74
|
+
@property
|
|
75
|
+
def nb_bit_sections(self):
|
|
76
|
+
return len(self.__series)
|
|
77
|
+
|
|
78
|
+
def add_bit_section(self, bit_section=None, bit_sections_list=None):
|
|
79
|
+
"""
|
|
80
|
+
Parameter "bit_section" is an iterable of 3 elements (name, bit length, type) or 4 elements (name, bit length, type, value).
|
|
81
|
+
The "value" is usually omitted when in declaration mode, ie when .
|
|
82
|
+
Parameter "bit_sections_list" is an iterable of "bit_section".
|
|
83
|
+
"""
|
|
84
|
+
if bit_sections_list is not None:
|
|
85
|
+
if not isinstance(bit_sections_list, Iterable):
|
|
86
|
+
raise TechnicalException(f"Parameter 'bit_sections_list' has to be an iterable (obtained type: {Typing.get_object_class_fullname(bit_sections_list)})")
|
|
87
|
+
for bit_section in bit_sections_list:
|
|
88
|
+
self.add_bit_section(bit_section=bit_section)
|
|
89
|
+
return
|
|
90
|
+
|
|
91
|
+
if bit_section is not None:
|
|
92
|
+
if len(bit_section) < 3 or len(bit_section) > 5:
|
|
93
|
+
raise TechnicalException(f"bit_section must be an iterable of length between 3 and 5")
|
|
94
|
+
|
|
95
|
+
# Declare bit section
|
|
96
|
+
bs = NamedTuple('BitSection', name=str, length=int, type=type, value=int, right_padded=bool)
|
|
97
|
+
|
|
98
|
+
if isinstance(bit_section[0], str):
|
|
99
|
+
bs.name = bit_section[0]
|
|
100
|
+
else:
|
|
101
|
+
raise TechnicalException(f"First bit_section element is the name and must be a string (obtained type: {Typing.get_object_class_fullname(bit_section[0])})")
|
|
102
|
+
|
|
103
|
+
if isinstance(bit_section[1], int) and bit_section[1] >= 0:
|
|
104
|
+
bs.length = bit_section[1]
|
|
105
|
+
else:
|
|
106
|
+
raise TechnicalException(f"Second bit_section element is the bit length and must be a positive integer (obtained type: {Typing.get_object_class_fullname(bit_section[1])} ; value: {bit_section[1]})")
|
|
107
|
+
|
|
108
|
+
if isinstance(bit_section[2], type):
|
|
109
|
+
bs.type = bit_section[2]
|
|
110
|
+
else:
|
|
111
|
+
raise TechnicalException(f"Third bit_section element is the value type and must be a type in (int, str, bytes) (obtained type: {Typing.get_object_class_fullname(bit_section[2])} ; value: {bit_section[2]})")
|
|
112
|
+
|
|
113
|
+
# Set right padding
|
|
114
|
+
if len(bit_section) > 4:
|
|
115
|
+
if bit_section[4] is None or isinstance(bit_section[4], bool):
|
|
116
|
+
bs.right_padded = bit_section[4]
|
|
117
|
+
else:
|
|
118
|
+
raise TechnicalException(f"Fifth bit_section element define if right padding must be done and must be a boolean or None (obtained type: {Typing.get_object_class_fullname(bit_section[4])} ; value: {bit_section[4]})")
|
|
119
|
+
else:
|
|
120
|
+
bs.right_padded = None
|
|
121
|
+
|
|
122
|
+
self.__series.append(bs)
|
|
123
|
+
self.__len = None
|
|
124
|
+
self.__update_index_by_name()
|
|
125
|
+
|
|
126
|
+
# Set value
|
|
127
|
+
if len(bit_section) > 3:
|
|
128
|
+
self.set_bit_section_value(bs.name, bit_section[3])
|
|
129
|
+
|
|
130
|
+
def __update_index_by_name(self):
|
|
131
|
+
self.__index_by_name = {}
|
|
132
|
+
for index, bs in enumerate(self):
|
|
133
|
+
self.__index_by_name[bs.name] = index
|
|
134
|
+
|
|
135
|
+
def get_bit_section(self, index=None, name=None):
|
|
136
|
+
if name is not None:
|
|
137
|
+
if name in self.__index_by_name:
|
|
138
|
+
index = self.__index_by_name[name]
|
|
139
|
+
else:
|
|
140
|
+
raise FunctionalException(f"No bit section of name '{name}'")
|
|
141
|
+
|
|
142
|
+
if index is not None:
|
|
143
|
+
return self.__series[index]
|
|
144
|
+
else:
|
|
145
|
+
raise TechnicalException("Undefined parameter 'index' or 'name'")
|
|
146
|
+
|
|
147
|
+
def set_bit_section_value(self, name=None, value=None, index=None):
|
|
148
|
+
bs = self.get_bit_section(index=index, name=name)
|
|
149
|
+
if value is None:
|
|
150
|
+
bs.value = value
|
|
151
|
+
elif bs.type is int:
|
|
152
|
+
if not isinstance(value, int):
|
|
153
|
+
raise FunctionalException(f"Unexpected value type {type(value)} (bit section '{bs.name}' has type {bs.type})")
|
|
154
|
+
bs.value = value
|
|
155
|
+
elif bs.type is str:
|
|
156
|
+
if not isinstance(value, str):
|
|
157
|
+
raise FunctionalException(f"Unexpected value type {type(value)} (bit section '{bs.name}' has type {bs.type})")
|
|
158
|
+
if StrTools.is_hex(value):
|
|
159
|
+
bs.value = value
|
|
160
|
+
else:
|
|
161
|
+
raise TechnicalException(f"If value is set in string format, it has to be an hexa string (value: [{value}])")
|
|
162
|
+
elif bs.type is bytes:
|
|
163
|
+
if not isinstance(value, bytes):
|
|
164
|
+
raise FunctionalException(f"Unexpected value type {type(value)} (bit section '{bs.name}' has type {bs.type})")
|
|
165
|
+
bs.value = value
|
|
166
|
+
else:
|
|
167
|
+
raise TechnicalException(f"Value must be a positive integer, a hexa string, bytes or None (value type: {Typing.get_object_class_fullname(value)} ; value: {value})")
|
|
168
|
+
|
|
169
|
+
def from_hex(self, hex_str, right_padded=False):
|
|
170
|
+
"""
|
|
171
|
+
Fill bit series from given hexadecimal string.
|
|
172
|
+
|
|
173
|
+
If bit series has a bit length that is not a multiple of 4, padding is expected in hex_str at left or right depending on parameter right_padded.
|
|
174
|
+
A control is made if padding bits are only zeros.
|
|
175
|
+
"""
|
|
176
|
+
# Verify padding
|
|
177
|
+
bin_str = Binary.convert_hex_str_to_bin_str(hex_str)
|
|
178
|
+
nb_bits_out_of_block = len(bin_str) - self.nb_bits
|
|
179
|
+
if nb_bits_out_of_block < 0:
|
|
180
|
+
raise FunctionalException(f"Hexadecimal string has not enough bits (expected: {self.nb_bits} ; obtained: {len(hex_str) * 4}")
|
|
181
|
+
elif nb_bits_out_of_block > 0:
|
|
182
|
+
if right_padded:
|
|
183
|
+
padding_bits = bin_str[-nb_bits_out_of_block:]
|
|
184
|
+
else:
|
|
185
|
+
padding_bits = bin_str[0:nb_bits_out_of_block]
|
|
186
|
+
value = int(padding_bits, 2)
|
|
187
|
+
if value != 0:
|
|
188
|
+
raise FunctionalException(f"Hexadecimal string has unexpected padded characters, only zero padding is managed (expected bits number: {self.nb_bits} ; {'right' if right_padded else 'left'} padding ; obtained padding bits: {padding_bits})\n obtained bits: {bin_str}")
|
|
189
|
+
|
|
190
|
+
# Fill bit sections
|
|
191
|
+
bit_offset = 0 if right_padded else nb_bits_out_of_block
|
|
192
|
+
for bs in self:
|
|
193
|
+
# Extract bit section value
|
|
194
|
+
try:
|
|
195
|
+
hex_value = self.__from_hex_get_bit_section_value(hex_str, bit_offset=bit_offset, bit_length=bs.length, right_padding=bs.right_padded)
|
|
196
|
+
if bs.type is int:
|
|
197
|
+
value = int(hex_value, 16)
|
|
198
|
+
elif bs.type is bytes:
|
|
199
|
+
value = StrTools.hex_to_bytes(hex_value)
|
|
200
|
+
elif bs.type is str:
|
|
201
|
+
value = hex_value
|
|
202
|
+
else:
|
|
203
|
+
raise TechnicalException(f"Unmanaged bit section value type {bs.type} (possible types: int, str, bytes)")
|
|
204
|
+
except Exception as exc:
|
|
205
|
+
raise TechnicalException(f"Error while extracting value of field '{bs.name}': {exc}") from exc
|
|
206
|
+
|
|
207
|
+
# Set value
|
|
208
|
+
self.set_bit_section_value(bs.name, value)
|
|
209
|
+
|
|
210
|
+
# Prepare next round
|
|
211
|
+
bit_offset += bs.length
|
|
212
|
+
|
|
213
|
+
def __from_hex_get_bit_section_value(self, hex_str, bit_offset, bit_length, right_padding):
|
|
214
|
+
bin_str = "".join(["{:04b}".format(int(hc, 16)) for hc in hex_str])
|
|
215
|
+
bs_bin_str = bin_str[bit_offset : bit_offset + bit_length]
|
|
216
|
+
if bit_length % 4 > 0:
|
|
217
|
+
str_padding = "0" * (4 - bit_length % 4)
|
|
218
|
+
if right_padding is not None and right_padding:
|
|
219
|
+
bs_bin_str_padded = bs_bin_str + str_padding
|
|
220
|
+
else:
|
|
221
|
+
bs_bin_str_padded = str_padding + bs_bin_str
|
|
222
|
+
else:
|
|
223
|
+
bs_bin_str_padded = bs_bin_str
|
|
224
|
+
bs_hex_str = "".join(["{:X}".format(int(bs_bin_str_padded[i*4:i*4+4],2)) for i in range(len(bs_bin_str_padded)//4)])
|
|
225
|
+
# logger.info(f"++++++++++ __from_hex_get_bit_section_value: bit_offset={bit_offset} ; bit_length={bit_length}\n hex_str: [{hex_str}]\n bin_str: [{bin_str}]\n bs_bin_str: [{bs_bin_str}]\n bs_bin_str: [{bs_bin_str_padded}]\n => bs_hex_str: [{bs_hex_str}]")
|
|
226
|
+
return bs_hex_str
|
|
227
|
+
|
|
228
|
+
def to_bin(self, right_padding=False):
|
|
229
|
+
"""
|
|
230
|
+
Convert bit series to binary string.
|
|
231
|
+
|
|
232
|
+
If a bit section is of type str and has a bit length lower than its section value,
|
|
233
|
+
the section value is considered padded with zeros at left or right, depending on parameter right_padding.
|
|
234
|
+
"""
|
|
235
|
+
res_list = []
|
|
236
|
+
for bs in self:
|
|
237
|
+
try:
|
|
238
|
+
if bs.right_padded is not None:
|
|
239
|
+
bs_right_padded = bs.right_padded
|
|
240
|
+
else:
|
|
241
|
+
bs_right_padded = right_padding
|
|
242
|
+
|
|
243
|
+
if bs.type is int:
|
|
244
|
+
bs_format = f"{{:0{bs.length}b}}"
|
|
245
|
+
res_bs = bs_format.format(bs.value)
|
|
246
|
+
elif bs.type is str or bs.type is bytes:
|
|
247
|
+
if bs.type is bytes:
|
|
248
|
+
value = StrTools.to_hex(bs.value)
|
|
249
|
+
else:
|
|
250
|
+
value = bs.value
|
|
251
|
+
|
|
252
|
+
res_bs = "".join(["{:04b}".format(int(hc, 16)) for hc in value])
|
|
253
|
+
if len(res_bs) > bs.length:
|
|
254
|
+
# The section value was padded
|
|
255
|
+
if bs_right_padded:
|
|
256
|
+
res_bs_padding = res_bs[bs.length:]
|
|
257
|
+
res_bs = res_bs[0:bs.length]
|
|
258
|
+
else:
|
|
259
|
+
res_bs_padding = res_bs[0:-bs.length]
|
|
260
|
+
res_bs = res_bs[-bs.length:]
|
|
261
|
+
if int(res_bs_padding, 2) != 0:
|
|
262
|
+
raise TechnicalException(f"For field '{bs.name}', the value was padded with {len(res_bs_padding)} bits ('{res_bs_padding}') at {'right' if right_padding else 'left'} with non zero bits")
|
|
263
|
+
else:
|
|
264
|
+
raise TechnicalException(f"For field '{bs.name}', unmanaged type {bs.type}")
|
|
265
|
+
except TechnicalException as exc:
|
|
266
|
+
raise exc
|
|
267
|
+
except Exception as exc:
|
|
268
|
+
raise TechnicalException(f"Error while formatting field '{bs.name}': {exc}") from exc
|
|
269
|
+
|
|
270
|
+
if len(res_bs) != bs.length:
|
|
271
|
+
raise FunctionalException(f"For field '{bs.name}', the value [{bs.value}] has binary length {len(res_bs)} (expected length: {bs.length})")
|
|
272
|
+
res_list.append(res_bs)
|
|
273
|
+
return "".join(res_list)
|
|
274
|
+
|
|
275
|
+
def to_hex(self, right_padding=False, bytes_padding=True, nbbits_by_block=None):
|
|
276
|
+
"""
|
|
277
|
+
Convert bit series to hexadecimal string (ex: 'A2FF').
|
|
278
|
+
|
|
279
|
+
If bit series has a length that is not a multiple of block size, a padding with zeros is made at left or right, depending on parameter right_padding.
|
|
280
|
+
The block size is equal to:
|
|
281
|
+
1. nbbits_by_block (if nbbits_by_block is not None)
|
|
282
|
+
2. 8 (else if bytes_padding is True)
|
|
283
|
+
3. 4 (in other cases)
|
|
284
|
+
"""
|
|
285
|
+
# Convert to binary string
|
|
286
|
+
res_bin = self.to_bin(right_padding=right_padding)
|
|
287
|
+
|
|
288
|
+
# Convert binary string to hexadecimal string
|
|
289
|
+
if nbbits_by_block is None:
|
|
290
|
+
nbbits_by_block = 8 if bytes_padding else 4
|
|
291
|
+
return Binary.convert_bin_str_to_hex_str(res_bin, right_padding, nbbits_by_block=nbbits_by_block)
|
|
292
|
+
|
|
293
|
+
def convert_bit_series_to_table(bit_series):
|
|
294
|
+
res = TableWithHeader()
|
|
295
|
+
res.header = TableRow(cells_content=["Name", "Bit length", "Type", "Value"])
|
|
296
|
+
for bit_section in bit_series:
|
|
297
|
+
res.add_row(cells_content=[bit_section.name, bit_section.length, bit_section.type, bit_section.value])
|
|
298
|
+
return res
|
|
299
|
+
|
|
300
|
+
def convert_bit_series_to_name_value_table(bit_series):
|
|
301
|
+
res = TableWithHeader()
|
|
302
|
+
res.header = TableRow(cells_content=["Name", "Value"])
|
|
303
|
+
for bit_section in bit_series:
|
|
304
|
+
res.add_row(cells_content=[bit_section.name, bit_section.value])
|
|
305
|
+
return res
|
|
306
|
+
|
|
307
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
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.binary_steps import *
|
|
17
|
+
from .ipc.bit_series_steps import *
|
|
@@ -0,0 +1,57 @@
|
|
|
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.scenario.step_tools import StepTools
|
|
18
|
+
import logging
|
|
19
|
+
from holado_binary.ipc.binary import Binary
|
|
20
|
+
from holado.common.context.session_context import SessionContext
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def __get_scenario_context():
|
|
27
|
+
return SessionContext.instance().get_scenario_context()
|
|
28
|
+
|
|
29
|
+
def __get_text_interpreter():
|
|
30
|
+
return __get_scenario_context().get_text_interpreter()
|
|
31
|
+
|
|
32
|
+
def __get_variable_manager():
|
|
33
|
+
return __get_scenario_context().get_variable_manager()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@Step(r"(?P<var_name>{Variable}) = convert binary string (?P<bin_str>{Str}) to hexadecimal string")
|
|
38
|
+
def step_impl(context, var_name, bin_str):
|
|
39
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
40
|
+
bin_str = StepTools.evaluate_scenario_parameter(bin_str)
|
|
41
|
+
|
|
42
|
+
res = Binary.convert_bin_str_to_hex_str(bin_str)
|
|
43
|
+
|
|
44
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
45
|
+
|
|
46
|
+
@Step(r"(?P<var_name>{Variable}) = convert hexadecimal string (?P<hex_str>{Str}) to binary string")
|
|
47
|
+
def step_impl(context, var_name, hex_str):
|
|
48
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
49
|
+
hex_str = StepTools.evaluate_scenario_parameter(hex_str)
|
|
50
|
+
|
|
51
|
+
res = Binary.convert_hex_str_to_bin_str(hex_str)
|
|
52
|
+
|
|
53
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
@@ -0,0 +1,132 @@
|
|
|
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_value.common.tables.value_table_manager import ValueTableManager
|
|
18
|
+
from holado_test.scenario.step_tools import StepTools
|
|
19
|
+
from holado_binary.ipc.bit_series import BitSeries
|
|
20
|
+
import copy
|
|
21
|
+
from holado_binary.ipc import bit_series
|
|
22
|
+
from holado_value.common.tables.comparators.table_2_value_table_with_header_comparator import Table2ValueTable_WithHeaderComparator
|
|
23
|
+
import logging
|
|
24
|
+
from holado_core.common.tables.comparators.table_with_header_comparator import TableWithHeaderComparator
|
|
25
|
+
from holado_test.behave.scenario.behave_step_tools import BehaveStepTools
|
|
26
|
+
from holado.common.context.session_context import SessionContext
|
|
27
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
28
|
+
from holado_value.common.tables.converters.value_table_converter import ValueTableConverter
|
|
29
|
+
|
|
30
|
+
logger = logging.getLogger(__name__)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def __get_scenario_context():
|
|
35
|
+
return SessionContext.instance().get_scenario_context()
|
|
36
|
+
|
|
37
|
+
def __get_text_interpreter():
|
|
38
|
+
return __get_scenario_context().get_text_interpreter()
|
|
39
|
+
|
|
40
|
+
def __get_variable_manager():
|
|
41
|
+
return __get_scenario_context().get_variable_manager()
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def __verify_table_is_bit_series_table(table):
|
|
45
|
+
if not ValueTableManager.verify_table_is_x_table(table, "Name", "Bit length", "Type", "Value", raise_exception=False) \
|
|
46
|
+
and not ValueTableManager.verify_table_is_x_table(table, "Name", "Bit length", "Type", raise_exception=False):
|
|
47
|
+
raise FunctionalException("Table header has to be [Name, Bit length, Type, Value] or [Name, Bit length, Type]")
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@Step(r"(?P<var_name>{Variable}) = bit series")
|
|
51
|
+
def step_impl(context, var_name):
|
|
52
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
53
|
+
table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
54
|
+
|
|
55
|
+
__verify_table_is_bit_series_table(table)
|
|
56
|
+
bs = BitSeries(bit_sections_list = ValueTableConverter.convert_table_2_list_of_tuples(table, as_generator=True))
|
|
57
|
+
|
|
58
|
+
__get_variable_manager().register_variable(var_name, bs)
|
|
59
|
+
|
|
60
|
+
@Step(r"fill bit series (?P<bs_var_name>{Variable}) from hexadecimal string (?P<hex_str>{Str})(?: \((?P<padding_side>right|left) padded\))?")
|
|
61
|
+
def step_impl(context, bs_var_name, hex_str, padding_side):
|
|
62
|
+
bs = StepTools.evaluate_variable_value(bs_var_name)
|
|
63
|
+
hex_str = StepTools.evaluate_scenario_parameter(hex_str)
|
|
64
|
+
right_padded = padding_side == "right"
|
|
65
|
+
|
|
66
|
+
bs.from_hex(hex_str, right_padded=right_padded)
|
|
67
|
+
|
|
68
|
+
@Step(r"(?P<var_name>{Variable}) = convert bit series (?P<bs_var_name>{Variable}) to hexadecimal string(?: \((?P<padding_side>right|left) padded\))?")
|
|
69
|
+
def step_impl(context, var_name, bs_var_name, padding_side):
|
|
70
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
71
|
+
bs = StepTools.evaluate_variable_value(bs_var_name)
|
|
72
|
+
right_padding = padding_side == "right"
|
|
73
|
+
|
|
74
|
+
res = bs.to_hex(right_padding=right_padding)
|
|
75
|
+
|
|
76
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
77
|
+
|
|
78
|
+
@Step(r"(?P<var_name>{Variable}) = convert bit series (?P<bs_var_name>{Variable}) to name/value table")
|
|
79
|
+
def step_impl(context, var_name, bs_var_name):
|
|
80
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
81
|
+
bs = StepTools.evaluate_variable_value(bs_var_name)
|
|
82
|
+
|
|
83
|
+
res = bit_series.convert_bit_series_to_name_value_table(bs)
|
|
84
|
+
|
|
85
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
86
|
+
|
|
87
|
+
@Then(r"hexadecimal string (?P<hex_str>{Str}) is bit series")
|
|
88
|
+
def step_impl(context, hex_str):
|
|
89
|
+
hex_str = StepTools.evaluate_scenario_parameter(hex_str)
|
|
90
|
+
expected_table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
91
|
+
|
|
92
|
+
__verify_table_is_bit_series_table(expected_table)
|
|
93
|
+
|
|
94
|
+
# Build a table representing the bit series in hexadecimal string
|
|
95
|
+
declare_table = copy.copy(expected_table)
|
|
96
|
+
declare_table.remove_column(name="Value")
|
|
97
|
+
bs = BitSeries(bit_sections_list=ValueTableConverter.convert_table_2_list_of_tuples(declare_table, as_generator=True))
|
|
98
|
+
bs.from_hex(hex_str)
|
|
99
|
+
obtained_table = bit_series.convert_bit_series_to_table(bs)
|
|
100
|
+
|
|
101
|
+
comparator = Table2ValueTable_WithHeaderComparator()
|
|
102
|
+
comparator.equals(obtained_table, expected_table)
|
|
103
|
+
|
|
104
|
+
@Then(r"hexadecimal string (?P<hex_str>{Str}) is bit series (?P<var_bit_series>{Variable})")
|
|
105
|
+
def step_impl(context, hex_str, var_bit_series):
|
|
106
|
+
hex_str = StepTools.evaluate_scenario_parameter(hex_str)
|
|
107
|
+
expected_bs = StepTools.evaluate_variable_value(var_bit_series)
|
|
108
|
+
|
|
109
|
+
# Build a table representing the bit series in hexadecimal string
|
|
110
|
+
bs = copy.copy(expected_bs)
|
|
111
|
+
bs.from_hex(hex_str)
|
|
112
|
+
obtained_table = bit_series.convert_bit_series_to_table(bs)
|
|
113
|
+
|
|
114
|
+
expected_table = bit_series.convert_bit_series_to_table(expected_bs)
|
|
115
|
+
|
|
116
|
+
comparator = TableWithHeaderComparator()
|
|
117
|
+
comparator.equals(obtained_table, expected_table)
|
|
118
|
+
|
|
119
|
+
@Then(r"bit series (?P<var_bit_series>{Variable}) is")
|
|
120
|
+
def step_impl(context, var_bit_series):
|
|
121
|
+
bs = StepTools.evaluate_variable_value(var_bit_series)
|
|
122
|
+
expected_table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
123
|
+
|
|
124
|
+
__verify_table_is_bit_series_table(expected_table)
|
|
125
|
+
|
|
126
|
+
obtained_table = bit_series.convert_bit_series_to_table(bs)
|
|
127
|
+
|
|
128
|
+
comparator = Table2ValueTable_WithHeaderComparator()
|
|
129
|
+
comparator.equals(obtained_table, expected_table)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
@@ -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
|
+
|
|
@@ -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 .xxx import *
|
|
@@ -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 .common.context_steps import *
|
|
@@ -0,0 +1,68 @@
|
|
|
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.common.context.session_context import SessionContext
|
|
17
|
+
from holado_test.behave.behave import * # @UnusedWildImport
|
|
18
|
+
import logging
|
|
19
|
+
from holado_test.scenario.step_tools import StepTools
|
|
20
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def __get_scenario_context():
|
|
26
|
+
return SessionContext.instance().get_scenario_context()
|
|
27
|
+
|
|
28
|
+
def __get_text_interpreter():
|
|
29
|
+
return __get_scenario_context().get_text_interpreter()
|
|
30
|
+
|
|
31
|
+
def __get_variable_manager():
|
|
32
|
+
return __get_scenario_context().get_variable_manager()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def __get_context(context_name):
|
|
36
|
+
context_name = context_name.capitalize()
|
|
37
|
+
if context_name in ["Session", SessionContext.instance().name]:
|
|
38
|
+
return SessionContext.instance()
|
|
39
|
+
elif context_name == __get_scenario_context().name:
|
|
40
|
+
return __get_scenario_context()
|
|
41
|
+
else:
|
|
42
|
+
raise TechnicalException(f"Not found context of name '{context_name}'")
|
|
43
|
+
|
|
44
|
+
@Step(r"execute post processes of (?P<context_name>{Str}) context")
|
|
45
|
+
def step_impl(context, context_name):
|
|
46
|
+
context_name = StepTools.evaluate_scenario_parameter(context_name)
|
|
47
|
+
|
|
48
|
+
context = __get_context(context_name)
|
|
49
|
+
context.do_post_processes()
|
|
50
|
+
|
|
51
|
+
@Step(r"execute persisted post processes of (?P<context_name>{Str}) context")
|
|
52
|
+
def step_impl(context, context_name):
|
|
53
|
+
context_name = StepTools.evaluate_scenario_parameter(context_name)
|
|
54
|
+
|
|
55
|
+
context = __get_context(context_name)
|
|
56
|
+
context.do_persisted_post_processes()
|
|
57
|
+
|
|
58
|
+
@Step(r"(?P<var_name>{Variable}) = number of persisted post processes to perform for (?P<context_name>{Str}) context")
|
|
59
|
+
def step_impl(context, var_name, context_name):
|
|
60
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
61
|
+
context_name = StepTools.evaluate_scenario_parameter(context_name)
|
|
62
|
+
|
|
63
|
+
context = __get_context(context_name)
|
|
64
|
+
res = context.get_number_of_persisted_post_processes_to_perform()
|
|
65
|
+
|
|
66
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
67
|
+
|
|
68
|
+
|