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,80 @@
|
|
|
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.tools import Tools
|
|
16
|
+
from holado_yaml.yaml.yaml_client import YAMLClient
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
import ruamel.yaml # @UnresolvedImport
|
|
23
|
+
with_ruamel_yaml = True
|
|
24
|
+
except Exception as exc:
|
|
25
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
26
|
+
logger.debug(f"YAML is not available with ruamel.yaml. Initialization failed on error: {exc}")
|
|
27
|
+
with_ruamel_yaml = False
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class RuamelYAMLClient(YAMLClient):
|
|
32
|
+
"""
|
|
33
|
+
Client for actions on YAML files.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
@classmethod
|
|
37
|
+
def is_available(cls):
|
|
38
|
+
return with_ruamel_yaml
|
|
39
|
+
|
|
40
|
+
def __init__(self, name=None, client_type=None, **kwargs):
|
|
41
|
+
super().__init__(name)
|
|
42
|
+
|
|
43
|
+
if client_type is None:
|
|
44
|
+
client_type = kwargs.get('typ')
|
|
45
|
+
self.__internal_client = ruamel.yaml.YAML(typ=client_type, **kwargs)
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def internal_client(self):
|
|
49
|
+
return self.__internal_client
|
|
50
|
+
|
|
51
|
+
def load_io_file(self, file_like_object):
|
|
52
|
+
res = self.internal_client.load(file_like_object)
|
|
53
|
+
self._rm_style_info(res)
|
|
54
|
+
return res
|
|
55
|
+
|
|
56
|
+
def load_multiple_documents_io_file(self, file_like_object):
|
|
57
|
+
res = list(self.internal_client.load_all(file_like_object))
|
|
58
|
+
self._rm_style_info(res)
|
|
59
|
+
return res
|
|
60
|
+
|
|
61
|
+
def save_in_io_file(self, file_like_object, data, **kwargs):
|
|
62
|
+
self.internal_client.dump(data, file_like_object, **kwargs)
|
|
63
|
+
|
|
64
|
+
def _rm_style_info(self, d):
|
|
65
|
+
"""Remove style info so that fields order can be preserved if saved again.
|
|
66
|
+
"""
|
|
67
|
+
if isinstance(d, dict):
|
|
68
|
+
if hasattr(d, 'fa'):
|
|
69
|
+
d.fa._flow_style = None
|
|
70
|
+
for k, v in d.items():
|
|
71
|
+
self._rm_style_info(k)
|
|
72
|
+
self._rm_style_info(v)
|
|
73
|
+
elif isinstance(d, list):
|
|
74
|
+
if hasattr(d, 'fa'):
|
|
75
|
+
d.fa._flow_style = None
|
|
76
|
+
for elem in d:
|
|
77
|
+
self._rm_style_info(elem)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
@@ -0,0 +1,203 @@
|
|
|
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.common.context.session_context import SessionContext
|
|
16
|
+
from holado.common.handlers.object import Object
|
|
17
|
+
import abc
|
|
18
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
19
|
+
from holado_python.standard_library.typing import Typing
|
|
20
|
+
from holado_yaml.yaml.enums import UpdateType
|
|
21
|
+
import os
|
|
22
|
+
from holado_python.common.iterables import remove_all
|
|
23
|
+
from holado.common.handlers.undefined import not_applicable, undefined_value
|
|
24
|
+
from io import StringIO
|
|
25
|
+
from holado_core.common.tools.tools import Tools
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
logger = logging.getLogger(__name__)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class YAMLClient(Object):
|
|
32
|
+
"""
|
|
33
|
+
Client for actions on YAML files.
|
|
34
|
+
"""
|
|
35
|
+
__metaclass__ = abc.ABCMeta
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
def _get_path_manager(cls):
|
|
39
|
+
return SessionContext.instance().path_manager
|
|
40
|
+
|
|
41
|
+
def __init__(self, name=None):
|
|
42
|
+
super().__init__(name)
|
|
43
|
+
|
|
44
|
+
def load_file(self, file_path):
|
|
45
|
+
with open(file_path, 'r') as file:
|
|
46
|
+
res = self.load_io_file(file)
|
|
47
|
+
|
|
48
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
49
|
+
logger.debug(f"Load YAML file '{file_path}' => [{Typing.get_object_class_fullname(res)}] {res}")
|
|
50
|
+
return res
|
|
51
|
+
|
|
52
|
+
def load_string(self, text):
|
|
53
|
+
with StringIO(text) as file:
|
|
54
|
+
res = self.load_io_file(file)
|
|
55
|
+
|
|
56
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
57
|
+
logger.debug(f"Load YAML string [{text}] => [{Typing.get_object_class_fullname(res)}] {res}")
|
|
58
|
+
return res
|
|
59
|
+
|
|
60
|
+
def load_io_file(self, file_like_object):
|
|
61
|
+
raise NotImplementedError()
|
|
62
|
+
|
|
63
|
+
def load_multiple_documents_file(self, file_path):
|
|
64
|
+
with open(file_path, 'r') as file:
|
|
65
|
+
res = self.load_multiple_documents_io_file(file)
|
|
66
|
+
return res
|
|
67
|
+
|
|
68
|
+
def load_multiple_documents_string(self, text):
|
|
69
|
+
with StringIO(text) as file:
|
|
70
|
+
res = self.load_multiple_documents_io_file(file)
|
|
71
|
+
return res
|
|
72
|
+
|
|
73
|
+
def load_multiple_documents_io_file(self, file_like_object):
|
|
74
|
+
raise NotImplementedError()
|
|
75
|
+
|
|
76
|
+
def save_in_file(self, file_path, data, mode=None, user=None, group=None, **kwargs):
|
|
77
|
+
self._get_path_manager().makefile(file_path, mode=mode, user=user, group=group)
|
|
78
|
+
|
|
79
|
+
with open(file_path, 'w') as file:
|
|
80
|
+
self.save_in_io_file(file, data, **kwargs)
|
|
81
|
+
|
|
82
|
+
def save_in_string(self, data, **kwargs):
|
|
83
|
+
with StringIO() as file:
|
|
84
|
+
self.save_in_io_file(file, data, **kwargs)
|
|
85
|
+
res = file.getvalue()
|
|
86
|
+
return res
|
|
87
|
+
|
|
88
|
+
def save_in_io_file(self, file_like_object, data, **kwargs):
|
|
89
|
+
raise NotImplementedError()
|
|
90
|
+
|
|
91
|
+
def update_file(self, file_path, data, update_type=UpdateType.AddOrUpdate, with_backup=True, backup_extension='.bak', mode=None, user=None, group=None, **kwargs):
|
|
92
|
+
# If file doesn't exist, create an empty file
|
|
93
|
+
self._get_path_manager().makefile(file_path, mode=mode, user=user, group=group)
|
|
94
|
+
|
|
95
|
+
# Manage backup
|
|
96
|
+
# Note: It is done after potential empty file creation, so that restore will leave the file empty or remove it
|
|
97
|
+
if with_backup:
|
|
98
|
+
if backup_extension is None:
|
|
99
|
+
backup_extension = '.bak'
|
|
100
|
+
backup_path = file_path + backup_extension
|
|
101
|
+
if not self._get_path_manager().check_file_exists(backup_path, raise_exception=False):
|
|
102
|
+
self._get_path_manager().copy_path_recursively(file_path, backup_path, user=user, group=group)
|
|
103
|
+
self._get_path_manager().check_file_exists(backup_path, raise_exception=True)
|
|
104
|
+
|
|
105
|
+
# Update file
|
|
106
|
+
dst_data = self.load_file(file_path)
|
|
107
|
+
if dst_data is None:
|
|
108
|
+
dst_data = data
|
|
109
|
+
else:
|
|
110
|
+
self.update_data(dst_data, data, update_type)
|
|
111
|
+
self.save_in_file(file_path, dst_data, **kwargs) # Note: as file already exists, it is not needed to pass parameters mode, user and group
|
|
112
|
+
|
|
113
|
+
def update_string(self, text, data, update_type=UpdateType.AddOrUpdate, **kwargs):
|
|
114
|
+
dst_data = self.load_string(text)
|
|
115
|
+
if dst_data is None:
|
|
116
|
+
dst_data = data
|
|
117
|
+
else:
|
|
118
|
+
self.update_data(dst_data, data, update_type)
|
|
119
|
+
res = self.save_in_string(dst_data, **kwargs)
|
|
120
|
+
return res
|
|
121
|
+
|
|
122
|
+
def update_data(self, dst, src, update_type=UpdateType.AddOrUpdate):
|
|
123
|
+
if dst is None:
|
|
124
|
+
raise TechnicalException("Destination data cannot be None")
|
|
125
|
+
if isinstance(src, str):
|
|
126
|
+
src = self.load_string(src)
|
|
127
|
+
|
|
128
|
+
self._update_data_object(dst, src, update_type)
|
|
129
|
+
|
|
130
|
+
def _update_data_object(self, dst, src, update_type=UpdateType.AddOrUpdate):
|
|
131
|
+
if isinstance(src, dict):
|
|
132
|
+
self._update_data_dict(dst, src, update_type)
|
|
133
|
+
elif isinstance(src, list):
|
|
134
|
+
self._update_data_list(dst, src, update_type)
|
|
135
|
+
else:
|
|
136
|
+
raise TechnicalException(f"Unmanaged update of object of type {Typing.get_object_class_fullname(dst)} with data of type {Typing.get_object_class_fullname(src)}")
|
|
137
|
+
|
|
138
|
+
def _update_data_dict(self, dst, src, update_type=UpdateType.AddOrUpdate):
|
|
139
|
+
if update_type == UpdateType.AddOrUpdate:
|
|
140
|
+
for key, value in src.items():
|
|
141
|
+
if key not in dst or not (isinstance(value, dict) or isinstance(value, list)):
|
|
142
|
+
dst[key] = value
|
|
143
|
+
else:
|
|
144
|
+
self._update_data_object(dst[key], value, update_type)
|
|
145
|
+
elif update_type == UpdateType.Delete:
|
|
146
|
+
for key, value in src.items():
|
|
147
|
+
if key in dst:
|
|
148
|
+
if isinstance(value, dict) or isinstance(value, list):
|
|
149
|
+
self._update_data_object(dst[key], value, update_type)
|
|
150
|
+
if not dst[key]:
|
|
151
|
+
del dst[key]
|
|
152
|
+
else:
|
|
153
|
+
del dst[key]
|
|
154
|
+
elif update_type == UpdateType.Replace:
|
|
155
|
+
for key, value in src.items():
|
|
156
|
+
if key in dst and isinstance(value, dict):
|
|
157
|
+
has_inner_dict = any(map(lambda x:isinstance(x, dict), value.values()))
|
|
158
|
+
if has_inner_dict:
|
|
159
|
+
self._update_data_object(dst[key], value, update_type)
|
|
160
|
+
else:
|
|
161
|
+
dst[key] = value
|
|
162
|
+
else:
|
|
163
|
+
dst[key] = value
|
|
164
|
+
else:
|
|
165
|
+
raise TechnicalException(f"Unamanged update type {update_type}")
|
|
166
|
+
|
|
167
|
+
def _update_data_list(self, dst, src, update_type=UpdateType.AddOrUpdate):
|
|
168
|
+
if update_type == UpdateType.AddOrUpdate:
|
|
169
|
+
for value in src:
|
|
170
|
+
dst.append(value)
|
|
171
|
+
elif update_type == UpdateType.Delete:
|
|
172
|
+
for value in src:
|
|
173
|
+
remove_all(dst, value)
|
|
174
|
+
elif update_type == UpdateType.Replace:
|
|
175
|
+
for index, value in enumerate(src):
|
|
176
|
+
if value is not_applicable:
|
|
177
|
+
continue
|
|
178
|
+
if index < len(dst):
|
|
179
|
+
if isinstance(value, dict) or isinstance(value, list):
|
|
180
|
+
self._update_data_object(dst[index], value, update_type)
|
|
181
|
+
else:
|
|
182
|
+
dst[index] = value
|
|
183
|
+
else:
|
|
184
|
+
while len(dst) < index:
|
|
185
|
+
dst.append(undefined_value)
|
|
186
|
+
dst.append(value)
|
|
187
|
+
else:
|
|
188
|
+
raise TechnicalException(f"Unamanged update type {update_type}")
|
|
189
|
+
|
|
190
|
+
def restore_file(self, file_path, backup_extension='.bak', remove_empty_file=False):
|
|
191
|
+
if backup_extension is None:
|
|
192
|
+
backup_extension = '.bak'
|
|
193
|
+
backup_path = file_path + backup_extension
|
|
194
|
+
if self._get_path_manager().check_file_exists(backup_path, raise_exception=False):
|
|
195
|
+
# Replace file by backup
|
|
196
|
+
self._get_path_manager().rename(backup_path, file_path, raise_if_exists=False)
|
|
197
|
+
|
|
198
|
+
# Manage remove of empty file
|
|
199
|
+
if remove_empty_file and os.path.getsize(file_path) == 0:
|
|
200
|
+
self._get_path_manager().remove_path(file_path)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
@@ -0,0 +1,94 @@
|
|
|
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_yaml.yaml.ruamel.ruamel_yaml_client import RuamelYAMLClient
|
|
16
|
+
from holado_yaml.yaml.pyyaml.pyyaml_client import PyYAMLClient
|
|
17
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
18
|
+
from holado_yaml.yaml.enums import UpdateType
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class YAMLManager(object):
|
|
26
|
+
"""
|
|
27
|
+
Manage actions on YAML files.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
@classmethod
|
|
31
|
+
def is_available(cls):
|
|
32
|
+
return RuamelYAMLClient.is_available() or PyYAMLClient.is_available()
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def get_client(cls, client_type, **kwargs):
|
|
36
|
+
if RuamelYAMLClient.is_available():
|
|
37
|
+
return RuamelYAMLClient(client_type=client_type)
|
|
38
|
+
elif PyYAMLClient.is_available():
|
|
39
|
+
return PyYAMLClient(client_type=client_type)
|
|
40
|
+
else:
|
|
41
|
+
raise TechnicalException("Missing dependencies")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Manage YAML files
|
|
45
|
+
|
|
46
|
+
@classmethod
|
|
47
|
+
def load_file(cls, file_path, client_type=None, client=None):
|
|
48
|
+
client = client if client is not None else cls.get_client(client_type)
|
|
49
|
+
return client.load_file(file_path)
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def load_multiple_documents_file(cls, file_path, client_type=None, client=None):
|
|
53
|
+
client = client if client is not None else cls.get_client(client_type)
|
|
54
|
+
return client.load_multiple_documents_file(file_path)
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
def save_in_file(cls, file_path, data, client_type=None, client=None):
|
|
58
|
+
client = client if client is not None else cls.get_client(client_type)
|
|
59
|
+
client.save_in_file(file_path, data)
|
|
60
|
+
|
|
61
|
+
@classmethod
|
|
62
|
+
def update_file(cls, file_path, data, update_type=UpdateType.AddOrUpdate, client_type=None, client=None, with_backup=True, backup_extension='.bak'):
|
|
63
|
+
client = client if client is not None else cls.get_client(client_type)
|
|
64
|
+
client.update_file(file_path, data, update_type, with_backup, backup_extension)
|
|
65
|
+
|
|
66
|
+
@classmethod
|
|
67
|
+
def restore_file(cls, file_path, client_type=None, client=None, backup_extension='.bak'):
|
|
68
|
+
client = client if client is not None else cls.get_client(client_type)
|
|
69
|
+
client.restore_file(file_path, backup_extension)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
# Manage YAML strings
|
|
73
|
+
|
|
74
|
+
@classmethod
|
|
75
|
+
def load_string(cls, text, client_type=None, client=None):
|
|
76
|
+
client = client if client is not None else cls.get_client(client_type)
|
|
77
|
+
return client.load_string(text)
|
|
78
|
+
|
|
79
|
+
@classmethod
|
|
80
|
+
def load_multiple_documents_string(cls, text, client_type=None, client=None):
|
|
81
|
+
client = client if client is not None else cls.get_client(client_type)
|
|
82
|
+
return client.load_multiple_documents_string(text)
|
|
83
|
+
|
|
84
|
+
@classmethod
|
|
85
|
+
def save_in_string(cls, data, client_type=None, client=None):
|
|
86
|
+
client = client if client is not None else cls.get_client(client_type)
|
|
87
|
+
return client.save_in_string(data)
|
|
88
|
+
|
|
89
|
+
@classmethod
|
|
90
|
+
def update_string(cls, text, data, update_type=UpdateType.AddOrUpdate, client_type=None, client=None):
|
|
91
|
+
client = client if client is not None else cls.get_client(client_type)
|
|
92
|
+
return client.update_string(text, data, update_type)
|
|
93
|
+
|
|
94
|
+
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Note: HolAdo tests are currently failing with Python 3.13.0
|
|
2
|
+
|
|
3
|
+
### Build
|
|
4
|
+
|
|
5
|
+
#FROM python:3.10.15-alpine3.20 AS build
|
|
6
|
+
#FROM python:3.11.10-alpine3.20 AS build
|
|
7
|
+
FROM python:3.12.7-alpine3.20 AS build
|
|
8
|
+
#FROM python:3.13.0-alpine3.20 AS build
|
|
9
|
+
|
|
10
|
+
# Install to build python requirements
|
|
11
|
+
RUN apk update \
|
|
12
|
+
&& apk --no-cache --update add build-base \
|
|
13
|
+
&& apk --update add alpine-sdk \
|
|
14
|
+
&& apk add libffi-dev \
|
|
15
|
+
&& apk add postgresql-dev gcc python3-dev musl-dev \
|
|
16
|
+
&& apk add protobuf-dev
|
|
17
|
+
|
|
18
|
+
# Install to recompile proto
|
|
19
|
+
RUN apk update \
|
|
20
|
+
&& apk add gcompat
|
|
21
|
+
|
|
22
|
+
# Create user
|
|
23
|
+
RUN adduser -D appuser
|
|
24
|
+
|
|
25
|
+
# Create /code folder
|
|
26
|
+
RUN mkdir /code
|
|
27
|
+
RUN chown -R appuser:appuser /code
|
|
28
|
+
|
|
29
|
+
# Switch to user appuser
|
|
30
|
+
USER appuser
|
|
31
|
+
ENV PATH=/home/appuser/.local:/home/appuser/.local/bin:$PATH
|
|
32
|
+
|
|
33
|
+
# Create python venv
|
|
34
|
+
RUN python -m venv /code/env
|
|
35
|
+
RUN source /code/env/bin/activate
|
|
36
|
+
|
|
37
|
+
# Copy HolAdo sources
|
|
38
|
+
WORKDIR /code/holado/python
|
|
39
|
+
COPY --chown=appuser . .
|
|
40
|
+
|
|
41
|
+
# Install python requirements
|
|
42
|
+
RUN pip install -r requirements_docker.txt
|
|
43
|
+
|
|
44
|
+
# Recompile proto
|
|
45
|
+
RUN python tests/behave/test_holado/resources/scripts/update_resources_proto_generated.py -nu
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### Runtime
|
|
50
|
+
|
|
51
|
+
#FROM python:3.10.15-alpine3.20 AS runtime
|
|
52
|
+
#FROM python:3.11.10-alpine3.20 AS runtime
|
|
53
|
+
FROM python:3.12.7-alpine3.20 AS runtime
|
|
54
|
+
#FROM python:3.13.0-alpine3.20 AS runtime
|
|
55
|
+
|
|
56
|
+
# Install for python requirements
|
|
57
|
+
RUN apk update \
|
|
58
|
+
&& apk --no-cache add libstdc++ \
|
|
59
|
+
&& apk --no-cache add postgresql-dev gcc python3-dev musl-dev
|
|
60
|
+
|
|
61
|
+
# Add tools
|
|
62
|
+
RUN apk --no-cache add bash \
|
|
63
|
+
&& apk --no-cache add nano \
|
|
64
|
+
&& apk --no-cache add curl
|
|
65
|
+
|
|
66
|
+
# Create user as in build
|
|
67
|
+
RUN adduser -D appuser
|
|
68
|
+
COPY --from=build /home/appuser/.local /home/appuser/.local
|
|
69
|
+
|
|
70
|
+
# Copy /code from build
|
|
71
|
+
COPY --from=build /code /code
|
|
72
|
+
|
|
73
|
+
# Switch to user appuser
|
|
74
|
+
USER appuser
|
|
75
|
+
ENV PATH=/home/appuser/.local:/home/appuser/.local/bin:$PATH
|
|
76
|
+
|
|
77
|
+
# Set working directory to easily launch HolAdo tests
|
|
78
|
+
WORKDIR /code/holado/python
|
|
79
|
+
RUN source /code/env/bin/activate
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
test_holado/__init__.py
ADDED
test_holado/__main__.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
# This main is only needed to debug behave execution (and thus HolAdo) with breakpoints
|
|
17
|
+
|
|
18
|
+
import re
|
|
19
|
+
import sys
|
|
20
|
+
|
|
21
|
+
from behave.__main__ import main
|
|
22
|
+
|
|
23
|
+
if __name__ == '__main__':
|
|
24
|
+
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
25
|
+
sys.exit(main())
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
import os.path
|
|
16
|
+
import sys
|
|
17
|
+
import logging
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# Add testing solution sources paths
|
|
21
|
+
here = os.path.abspath(os.path.dirname(__file__))
|
|
22
|
+
sys.path.insert(0, here)
|
|
23
|
+
|
|
24
|
+
# Add HolAdo source paths (needed when using a clone of HolAdo project)
|
|
25
|
+
from initialize_holado import insert_holado_source_paths # @UnresolvedImport
|
|
26
|
+
insert_holado_source_paths()
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Configure HolAdo
|
|
30
|
+
import holado
|
|
31
|
+
is_in_steps_catalog = holado.is_in_steps_catalog()
|
|
32
|
+
from test_holado.test_holado_session_context import TestHoladoSessionContext
|
|
33
|
+
if is_in_steps_catalog:
|
|
34
|
+
holado.initialize(TSessionContext=TestHoladoSessionContext, logging_config_file_path=os.path.join(here, 'logging.conf'),
|
|
35
|
+
log_level=logging.INFO, log_on_console=True,
|
|
36
|
+
log_in_file=False, session_kwargs={"with_session_path":False})
|
|
37
|
+
else:
|
|
38
|
+
# Initialize HolAdo:
|
|
39
|
+
# - log_level is set to INFO for initialization phase, it will be overwrite by level in logging config file
|
|
40
|
+
# - log_on_console is True for initialization phase, it will be set to False when root log file will be defined
|
|
41
|
+
# - logging config file
|
|
42
|
+
holado.initialize(TSessionContext=TestHoladoSessionContext, logging_config_file_path=os.path.join(here, 'logging.conf'),
|
|
43
|
+
log_level=logging.INFO, log_on_console=True,
|
|
44
|
+
config_kwargs={'application_group':'test_runner'})
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# Import generic environment methods
|
|
49
|
+
from holado_test.behave.behave_environment import * # @UnusedWildImport
|
|
50
|
+
|
|
51
|
+
# Define project specific environment methods
|
|
52
|
+
|
|
53
|
+
if not is_in_steps_catalog:
|
|
54
|
+
# Wait test daemons are healthy
|
|
55
|
+
from holado_core.common.tools.converters.converter import Converter
|
|
56
|
+
do_wait_test_server = Converter.to_boolean(os.getenv("HOLADO_WAIT_TEST_SERVER", True))
|
|
57
|
+
if do_wait_test_server:
|
|
58
|
+
SessionContext.instance().test_server_client.wait_is_healthy()
|
|
59
|
+
|
|
60
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
@configuration
|
|
2
|
+
@execute_persisted_post_processes
|
|
3
|
+
Feature: Execute persisted post processes
|
|
4
|
+
# Note: scenario post processes are executed before session post processes since it is the usual order of execution
|
|
5
|
+
|
|
6
|
+
@scenario_post_processes
|
|
7
|
+
Scenario: Execute persisted post processes at scenario level
|
|
8
|
+
When execute persisted post processes of scenario context
|
|
9
|
+
|
|
10
|
+
@session_post_processes
|
|
11
|
+
Scenario: Execute persisted post processes at session level
|
|
12
|
+
When execute persisted post processes of session context
|
|
13
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@testing_solution
|
|
2
|
+
@rest
|
|
3
|
+
Feature: Test REST module
|
|
4
|
+
|
|
5
|
+
#@need_update
|
|
6
|
+
Scenario: Simple get
|
|
7
|
+
|
|
8
|
+
### PRECONDITIONS - BEGIN
|
|
9
|
+
Given begin preconditions
|
|
10
|
+
|
|
11
|
+
Given SERVER = start internal REST server
|
|
12
|
+
|
|
13
|
+
Given CLIENT = new internal REST client
|
|
14
|
+
|
|
15
|
+
Given end preconditions
|
|
16
|
+
### PRECONDITIONS - END
|
|
17
|
+
|
|
18
|
+
When RESULT = get '/users' (REST client: CLIENT)
|
|
19
|
+
Then RESULT['results'] is list
|
|
20
|
+
|
|
21
|
+
Given TABLE = convert json RESULT['results'] to table with names as columns
|
|
22
|
+
Then table TABLE contains
|
|
23
|
+
| email | groups | url | username |
|
|
24
|
+
| N/A | N/A | N/A | 'admin' |
|
|
25
|
+
|
|
26
|
+
|