holado 0.2.1__py3-none-any.whl → 0.2.3__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.
Potentially problematic release.
This version of holado might be problematic. Click here for more details.
- holado/__init__.py +8 -4
- {holado-0.2.1.dist-info → holado-0.2.3.dist-info}/METADATA +13 -9
- holado-0.2.3.dist-info/RECORD +535 -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 +203 -0
- holado_ais/ais/ais_payload.py +35 -0
- holado_ais/ais/enums.py +37 -0
- holado_ais/ais/patch_pyais.py +1303 -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 +182 -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 +131 -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 +36 -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 +695 -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 +133 -0
- holado_core/common/resource/resource_manager.py +143 -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 +194 -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 +366 -0
- holado_core/common/tables/table_row.py +169 -0
- holado_core/common/tables/table_with_header.py +236 -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 +107 -0
- holado_core/common/tools/path_manager.py +185 -0
- holado_core/common/tools/string_tools.py +135 -0
- holado_core/common/tools/tools.py +172 -0
- holado_core/common/transport/__init__.py +0 -0
- holado_core/common/transport/crc.py +40 -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 +136 -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 +537 -0
- holado_core/tools/__init__.py +0 -0
- holado_core/tools/abstracts/__init__.py +0 -0
- holado_core/tools/abstracts/blocking_command_service.py +56 -0
- holado_core/tools/abstracts/service.py +48 -0
- holado_data/__init__.py +31 -0
- holado_data/data/generator/base.py +93 -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 +60 -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_client.py +206 -0
- holado_db/tools/db/clients/postgresql/postgresql_client.py +65 -0
- holado_db/tools/db/clients/sqlite/sqlite_client.py +56 -0
- holado_db/tools/db/db_manager.py +109 -0
- holado_db/tools/db/query/base/query_builder.py +87 -0
- holado_db/tools/db/query/pypika/pypika_query_builder.py +193 -0
- holado_db/tools/db/query/query_manager.py +77 -0
- holado_docker/__init__.py +25 -0
- holado_docker/sdk/docker/docker_client.py +268 -0
- holado_docker/sdk/docker/docker_service.py +71 -0
- holado_docker/tests/behave/steps/__init__.py +16 -0
- holado_docker/tests/behave/steps/tools/docker_steps.py +33 -0
- holado_docker/tools/docker_controler/__init__.py +26 -0
- holado_docker/tools/docker_controler/docker_controler_client.py +36 -0
- holado_docker/tools/docker_controler/docker_controler_server.py +31 -0
- holado_docker/tools/docker_controler/proto/compile_proto.py +60 -0
- holado_docker/tools/docker_controler/proto/definitions/docker_controler.proto +63 -0
- holado_docker/tools/docker_controler/proto/generated/docker_controler_pb2.py +52 -0
- holado_docker/tools/docker_controler/proto/generated/docker_controler_pb2_grpc.py +233 -0
- holado_grpc/__init__.py +32 -0
- holado_grpc/api/rpc/TODO.txt +4 -0
- holado_grpc/api/rpc/grpc_client.py +181 -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 +42 -0
- holado_helper/docker/run_holado_test_nonreg_in_docker.sh +120 -0
- holado_helper/docker/run_terminal_in_docker-with_docker_control.sh +103 -0
- holado_helper/docker/run_terminal_in_docker.sh +101 -0
- holado_helper/holado_module_template/__init__.py +31 -0
- holado_helper/holado_module_template/test/behave/steps/__init__.py +16 -0
- holado_helper/holado_module_template/test/behave/steps/private/__init__.py +16 -0
- holado_helper/script/action.py +109 -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 +115 -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/ipc/json.py +125 -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 +120 -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 +59 -0
- holado_keycloak/tools/keycloak/__init__.py +0 -0
- holado_keycloak/tools/keycloak/keycloak_client.py +61 -0
- holado_logging/__init__.py +36 -0
- holado_logging/common/logging/holado_logger.py +75 -0
- holado_logging/common/logging/log_config.py +128 -0
- holado_logging/common/logging/log_manager.py +292 -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 +135 -0
- holado_multitask/multiprocessing/process.py +196 -0
- holado_multitask/multiprocessing/processesmanager.py +133 -0
- holado_multitask/multitasking/multitask_manager.py +439 -0
- holado_multitask/multithreading/__init__.py +0 -0
- holado_multitask/multithreading/context/thread_context.py +84 -0
- holado_multitask/multithreading/functionthreaded.py +129 -0
- holado_multitask/multithreading/loopfunctionthreaded.py +45 -0
- holado_multitask/multithreading/loopthread.py +100 -0
- holado_multitask/multithreading/periodicfunctionthreaded.py +136 -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 +177 -0
- holado_multitask/multithreading/threadsmanager.py +162 -0
- holado_multitask/multithreading/timer.py +48 -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 +965 -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 +35 -0
- holado_python/common/enums.py +34 -0
- holado_python/common/iterables.py +30 -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 +279 -0
- holado_python/standard_library/csv.py +207 -0
- holado_python/standard_library/hashlib.py +82 -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 +136 -0
- holado_python/standard_library/socket/echo_server.py +28 -0
- holado_python/standard_library/socket/message_socket.py +91 -0
- holado_python/standard_library/socket/non_blocking_socket.py +151 -0
- holado_python/standard_library/socket/socket.py +148 -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 +81 -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 +258 -0
- holado_python/tests/behave/steps/standard_library/ssl_steps.py +67 -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 +537 -0
- holado_rabbitmq/tests/behave/steps/tools/rabbitmq_server_steps.py +64 -0
- holado_rabbitmq/tools/rabbitmq/rabbitmq_blocking_client.py +311 -0
- holado_rabbitmq/tools/rabbitmq/rabbitmq_client.py +675 -0
- holado_rabbitmq/tools/rabbitmq/rabbitmq_manager.py +173 -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 +27 -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_failed_report_builder.py +146 -0
- holado_report/report/builders/json_execution_historic_report_builder.py +123 -0
- holado_report/report/builders/report_builder.py +64 -0
- holado_report/report/builders/short_scenario_failed_report_builder.py +76 -0
- holado_report/report/builders/summary_report_builder.py +89 -0
- holado_report/report/builders/summary_scenario_failed_report_builder.py +56 -0
- holado_report/report/builders/summary_scenario_report_builder.py +74 -0
- holado_report/report/execution_historic.py +141 -0
- holado_report/report/report_manager.py +256 -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 +24 -0
- holado_rest/api/rest/TODO.txt +2 -0
- holado_rest/api/rest/rest_client.py +113 -0
- holado_rest/api/rest/rest_manager.py +62 -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 +141 -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 +70 -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 +53 -0
- holado_scripting/common/tools/dynamic_text_manager.py +73 -0
- holado_scripting/common/tools/evaluate_parameters.py +210 -0
- holado_scripting/common/tools/expression_evaluator.py +387 -0
- holado_scripting/common/tools/variable_manager.py +321 -0
- holado_scripting/tests/behave/steps/__init__.py +22 -0
- holado_scripting/tests/behave/steps/common/tools/variable_convert_steps.py +158 -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_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/text_interpreter.py +216 -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 +32 -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 +216 -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 +76 -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 +215 -0
- holado_system/tests/behave/steps/system/system_steps.py +84 -0
- holado_test/__init__.py +27 -0
- holado_test/behave/__init__.py +0 -0
- holado_test/behave/behave.py +397 -0
- holado_test/behave/behave_environment.py +143 -0
- holado_test/behave/behave_function.py +33 -0
- holado_test/behave/behave_manager.py +555 -0
- holado_test/behave/independant_runner.py +68 -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 +79 -0
- holado_test/common/context/scenario_context.py +217 -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 +523 -0
- holado_test/scenario/tester_tools.py +52 -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 +87 -0
- holado_test/tests/behave/steps/scenario/tester_steps.py +65 -0
- holado_value/__init__.py +24 -0
- holado_value/common/tables/comparators/table_2_value_table_cell_comparator.py +195 -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 +217 -0
- holado_value/common/tables/value_table.py +29 -0
- holado_value/common/tables/value_table_cell.py +67 -0
- holado_value/common/tables/value_table_manager.py +58 -0
- holado_value/common/tables/value_table_row.py +44 -0
- holado_value/common/tables/value_table_with_header.py +28 -0
- holado_value/common/tools/unique_value_manager.py +108 -0
- holado_value/common/tools/value.py +164 -0
- holado_value/common/tools/value_types.py +35 -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_yaml/__init__.py +31 -0
- holado_yaml/tests/behave/steps/__init__.py +16 -0
- holado_yaml/tests/behave/steps/yaml_steps.py +64 -0
- holado_yaml/yaml/yaml_manager.py +86 -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 +42 -0
- test_holado/features/NonReg/api/REST.feature +21 -0
- test_holado/features/NonReg/api/gRPC.feature +122 -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 +239 -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_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.feature +101 -0
- test_holado/features/NonReg/holado_python/standard_library/socket_with_ssl.feature +180 -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 +218 -0
- test_holado/features/NonReg/ipc/bit_series.error.feature +33 -0
- test_holado/features/NonReg/ipc/bit_series.feature +131 -0
- test_holado/features/NonReg/ipc/json.feature +20 -0
- test_holado/features/NonReg/scenario/scenario.feature +139 -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/__init__.py +0 -0
- test_holado/logging.conf +41 -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/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 +27 -0
- test_holado/tools/django/api_grpc/manual_test_commands.txt +25 -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
- holado-0.2.1.dist-info/RECORD +0 -17
- {holado-0.2.1.dist-info → holado-0.2.3.dist-info}/WHEEL +0 -0
- {holado-0.2.1.dist-info → holado-0.2.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,164 @@
|
|
|
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
|
+
from builtins import str
|
|
15
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
16
|
+
from holado_core.common.tools.tools import Tools
|
|
17
|
+
from holado.common.context.session_context import SessionContext
|
|
18
|
+
import logging
|
|
19
|
+
from holado_value.common.tools.value_types import ValueTypes
|
|
20
|
+
from functools import total_ordering
|
|
21
|
+
from holado_scripting.common.tools.evaluate_parameters import EvaluateParameters
|
|
22
|
+
from holado.holado_config import Config
|
|
23
|
+
from holado.common.handlers.undefined import undefined_value
|
|
24
|
+
from holado_python.standard_library.typing import Typing
|
|
25
|
+
|
|
26
|
+
logger = logging.getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@total_ordering
|
|
30
|
+
class Value(object):
|
|
31
|
+
|
|
32
|
+
def __init__(self, original_value=undefined_value, value=undefined_value, do_eval_once=True, eval_params=undefined_value):
|
|
33
|
+
"""
|
|
34
|
+
@summary: Constructor
|
|
35
|
+
@param original_value: Original value - can be a string or any object
|
|
36
|
+
@param value: Value - can be a string or any object
|
|
37
|
+
"""
|
|
38
|
+
self.__value_original = undefined_value
|
|
39
|
+
self.__type = None
|
|
40
|
+
self.__value = undefined_value
|
|
41
|
+
|
|
42
|
+
# Manage value evaluation
|
|
43
|
+
self.__value_to_eval = undefined_value
|
|
44
|
+
self.__value_evaluated = undefined_value
|
|
45
|
+
# By default, raise on interpret and variable evaluation error, but not on eval error
|
|
46
|
+
self.__eval_params_default = eval_params if eval_params is not undefined_value else EvaluateParameters.default().with_raise_on_eval_error(False)
|
|
47
|
+
self.__do_eval_once = do_eval_once
|
|
48
|
+
|
|
49
|
+
self.__extract_value_information(original_value, value)
|
|
50
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
51
|
+
logger.trace(f"New Value: value_original=[{self.__value_original}] ; type=[{self.value_type.name}] ; value=[{self.__value}] ; value_to_eval=[{self.__value_to_eval}]")
|
|
52
|
+
|
|
53
|
+
def _verify_valid_compared_object(self, other, raise_exception=True):
|
|
54
|
+
res = isinstance(other, Value)
|
|
55
|
+
if not res and raise_exception:
|
|
56
|
+
return TechnicalException(f"Unmanaged comparison between types '{self.__class__.__name__}' and '{other.__class__.__name__}'")
|
|
57
|
+
|
|
58
|
+
def __eq__(self, other):
|
|
59
|
+
self._verify_valid_compared_object(other)
|
|
60
|
+
if isinstance(other, Value):
|
|
61
|
+
return (self.get_value() == other.get_value())
|
|
62
|
+
else:
|
|
63
|
+
return TechnicalException(f"Unmanaged comparison between types '{self.__class__.__name__}' and '{other.__class__.__name__}'")
|
|
64
|
+
|
|
65
|
+
def __lt__(self, other):
|
|
66
|
+
self._verify_valid_compared_object(other)
|
|
67
|
+
if isinstance(other, Value):
|
|
68
|
+
return (self.get_value() < other.get_value())
|
|
69
|
+
else:
|
|
70
|
+
return TechnicalException(f"Unmanaged comparison between types '{self.__class__.__name__}' and '{other.__class__.__name__}'")
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def string_value(self):
|
|
74
|
+
value = self.get_value()
|
|
75
|
+
|
|
76
|
+
if value is undefined_value:
|
|
77
|
+
return Config.NOT_APPLICABLE_SYMBOL
|
|
78
|
+
if value is None:
|
|
79
|
+
return Config.NONE_SYMBOL
|
|
80
|
+
else:
|
|
81
|
+
return str(value)
|
|
82
|
+
|
|
83
|
+
@property
|
|
84
|
+
def value_original(self):
|
|
85
|
+
"""
|
|
86
|
+
@summary: Return the original value
|
|
87
|
+
"""
|
|
88
|
+
return self.__value_original
|
|
89
|
+
|
|
90
|
+
@property
|
|
91
|
+
def value_type(self):
|
|
92
|
+
return self.__type
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def value_before_eval(self):
|
|
96
|
+
"""
|
|
97
|
+
@summary: Return the value before evaluation
|
|
98
|
+
"""
|
|
99
|
+
return self.__value_to_eval
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def value(self):
|
|
103
|
+
"""
|
|
104
|
+
@summary: Return the value, after evaluation if needed
|
|
105
|
+
"""
|
|
106
|
+
return self.get_value(raise_if_undefined=True)
|
|
107
|
+
|
|
108
|
+
def get_value(self, raise_if_undefined=False, eval_params=undefined_value):
|
|
109
|
+
if self.__value_to_eval is not undefined_value:
|
|
110
|
+
if self.__value_evaluated is undefined_value or not self.__do_eval_once:
|
|
111
|
+
eval_params = eval_params if eval_params is not undefined_value else self.__eval_params_default
|
|
112
|
+
self.__value_evaluated = self.__get_expression_evaluator().evaluate_expression_of_information(self.__type, self.__value_to_eval, eval_params=eval_params)
|
|
113
|
+
res = self.__value_evaluated
|
|
114
|
+
else:
|
|
115
|
+
res = self.__value
|
|
116
|
+
|
|
117
|
+
if res is undefined_value and raise_if_undefined:
|
|
118
|
+
msg = "Value is undefined"
|
|
119
|
+
if self.value_type == ValueTypes.NotApplicable:
|
|
120
|
+
msg += " (Not Applicable)"
|
|
121
|
+
raise ValueError(f"Value is undefined (value type: {self.value_type.name} ; original value: [{self.value_original}] (type: {Typing.get_object_class_fullname(self.value_original)}))")
|
|
122
|
+
return res
|
|
123
|
+
|
|
124
|
+
def represent(self, indent = 0, do_evaluation = False):
|
|
125
|
+
res_list = []
|
|
126
|
+
|
|
127
|
+
res_list.append(Tools.get_indent_string(indent))
|
|
128
|
+
|
|
129
|
+
if self.__type in [ValueTypes.String, ValueTypes.DynamicString, ValueTypes.ThreadDynamicString, ValueTypes.UniqueString]:
|
|
130
|
+
if do_evaluation:
|
|
131
|
+
res_list.append("'")
|
|
132
|
+
res_list.append(self.string_value)
|
|
133
|
+
res_list.append("'")
|
|
134
|
+
else:
|
|
135
|
+
res_list.append(str(self.value_original))
|
|
136
|
+
elif self.__type in [ValueTypes.Boolean, ValueTypes.Integer, ValueTypes.Float, ValueTypes.Null, ValueTypes.NotApplicable, ValueTypes.Symbol, ValueTypes.Generic]:
|
|
137
|
+
if do_evaluation:
|
|
138
|
+
res_list.append(self.string_value)
|
|
139
|
+
else:
|
|
140
|
+
res_list.append(str(self.value_original))
|
|
141
|
+
else:
|
|
142
|
+
raise TechnicalException("Unmanaged value type '{}'".format(self.__type.name))
|
|
143
|
+
|
|
144
|
+
return "".join(res_list)
|
|
145
|
+
|
|
146
|
+
def __extract_value_information(self, value_original, value):
|
|
147
|
+
# Define original value
|
|
148
|
+
if value_original is not undefined_value and not (value_original is None and value not in [undefined_value, None]):
|
|
149
|
+
self.__value_original = value_original
|
|
150
|
+
elif value is not undefined_value:
|
|
151
|
+
if value is not None and isinstance(value, str):
|
|
152
|
+
self.__value_original = f"'{value}'"
|
|
153
|
+
else:
|
|
154
|
+
self.__value_original = value
|
|
155
|
+
|
|
156
|
+
# Define value information from original value
|
|
157
|
+
self.__type, self.__value, self.__value_to_eval = self.__get_expression_evaluator().extract_expression_information(self.value_original)
|
|
158
|
+
|
|
159
|
+
def __get_expression_evaluator(self):
|
|
160
|
+
if SessionContext.instance().has_scenario_context():
|
|
161
|
+
return SessionContext.instance().get_scenario_context().get_expression_evaluator()
|
|
162
|
+
else:
|
|
163
|
+
return SessionContext.instance().expression_evaluator
|
|
164
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
from holado.common.handlers.enums import AutoNumber
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ValueTypes(AutoNumber):
|
|
18
|
+
"""
|
|
19
|
+
@summary: Value types in scenario
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
Undefined = ()
|
|
23
|
+
Boolean = ()
|
|
24
|
+
Integer = ()
|
|
25
|
+
Float = ()
|
|
26
|
+
String = ()
|
|
27
|
+
DynamicString = ()
|
|
28
|
+
ThreadDynamicString = ()
|
|
29
|
+
UniqueString = ()
|
|
30
|
+
Null = ()
|
|
31
|
+
NotApplicable = ()
|
|
32
|
+
Merged = ()
|
|
33
|
+
Symbol = ()
|
|
34
|
+
Generic = ()
|
|
35
|
+
|
|
@@ -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 .xxx import *
|
holado_ws/__init__.py
ADDED
|
@@ -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 .api.web_service_steps import *
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import logging
|
|
17
|
+
from holado_core.common.tools.tools import Tools
|
|
18
|
+
from holado_core.common.tables.table_with_header import TableWithHeader
|
|
19
|
+
from holado_value.common.tables.comparators.table_2_value_table_comparator import Table2ValueTable_Comparator
|
|
20
|
+
from holado_core.common.tables.table_manager import TableManager
|
|
21
|
+
from holado_value.common.tables.value_table_manager import ValueTableManager
|
|
22
|
+
from holado.common.context.session_context import SessionContext
|
|
23
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
24
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
25
|
+
from holado_test.behave.behave import *
|
|
26
|
+
from holado_test.behave.scenario.behave_step_tools import BehaveStepTools
|
|
27
|
+
from holado_value.common.tables.converters.value_table_converter import ValueTableConverter
|
|
28
|
+
from holado_test.scenario.step_tools import StepTools
|
|
29
|
+
from holado_python.standard_library.typing import Typing
|
|
30
|
+
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# Configure module to use internally
|
|
35
|
+
try:
|
|
36
|
+
from suds.sudsobject import Printer, Object, Facade # @UnresolvedImport @UnusedImport
|
|
37
|
+
import suds.client # @UnresolvedImport
|
|
38
|
+
from suds.cache import NoCache # @UnresolvedImport
|
|
39
|
+
with_suds = True
|
|
40
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
41
|
+
logger.debug("Module 'suds' will be used in web service steps")
|
|
42
|
+
except Exception as exc:
|
|
43
|
+
with_suds_exception = exc
|
|
44
|
+
with_suds = False
|
|
45
|
+
|
|
46
|
+
if not with_suds:
|
|
47
|
+
try:
|
|
48
|
+
import zeep # @UnresolvedImport
|
|
49
|
+
from zeep.transports import Transport # @UnresolvedImport
|
|
50
|
+
with_zeep = True
|
|
51
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
52
|
+
logger.debug("Module 'zeep' will be used in web service steps")
|
|
53
|
+
except Exception as exc:
|
|
54
|
+
with_zeep_exception = exc
|
|
55
|
+
with_zeep = False
|
|
56
|
+
|
|
57
|
+
if not with_suds and not with_zeep:
|
|
58
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
59
|
+
logger.debug(f"Web service module is not available. No package was found to manage web service steps (managed packages: suds, zeep).\nInitialization failed with suds on error: {with_suds_exception}\nInitialization failed with zeep on error: {with_zeep_exception}")
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def __get_scenario_context():
|
|
63
|
+
return SessionContext.instance().get_scenario_context()
|
|
64
|
+
|
|
65
|
+
def __get_text_interpreter():
|
|
66
|
+
return __get_scenario_context().get_text_interpreter()
|
|
67
|
+
|
|
68
|
+
def __get_variable_manager():
|
|
69
|
+
return __get_scenario_context().get_variable_manager()
|
|
70
|
+
|
|
71
|
+
@Given(r"open web service client for WSDL (?P<wsdl_file>{Str})")
|
|
72
|
+
def step_impl(context, wsdl_file):
|
|
73
|
+
wsdl_file = StepTools.evaluate_scenario_parameter(wsdl_file)
|
|
74
|
+
|
|
75
|
+
if with_suds:
|
|
76
|
+
context.ws_client = suds.client.Client(wsdl_file, cache=NoCache())
|
|
77
|
+
elif with_zeep:
|
|
78
|
+
transport = Transport(cache=None)
|
|
79
|
+
context.ws_client = zeep.Client(wsdl_file, transport=transport)
|
|
80
|
+
else:
|
|
81
|
+
raise TechnicalException("No module was found to manage web service steps (managed modules: suds, zeep)")
|
|
82
|
+
|
|
83
|
+
@Given(r"open (?P<ws_name>{Str}) web service client")
|
|
84
|
+
def step_impl(context, ws_name): # @DuplicatedSignature
|
|
85
|
+
ws_name = StepTools.evaluate_scenario_parameter(ws_name)
|
|
86
|
+
|
|
87
|
+
wsdl_file = 'http://10.0.3.247/{}/?wsdl'.format(ws_name)
|
|
88
|
+
step = u"Given open web service client for WSDL '{}'".format(wsdl_file)
|
|
89
|
+
execute_steps(step)
|
|
90
|
+
|
|
91
|
+
@Given(r'close web service client')
|
|
92
|
+
def step_impl(context): # @DuplicatedSignature
|
|
93
|
+
del context.ws_client
|
|
94
|
+
|
|
95
|
+
@When(r"(?P<var_name>{Variable}) = call web service (?P<method_name>{Str}) with parameters")
|
|
96
|
+
def step_impl(context, var_name, method_name): # @DuplicatedSignature
|
|
97
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
98
|
+
method_name = StepTools.evaluate_scenario_parameter(method_name)
|
|
99
|
+
table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
100
|
+
parameters = ValueTableConverter.convert_name_value_table_2_dict(table)
|
|
101
|
+
logger.info("call web service '{}' with parameters [{}]".format(method_name, parameters))
|
|
102
|
+
|
|
103
|
+
# Verify web service method
|
|
104
|
+
if not hasattr(context, 'ws_client') or context.ws_client is None:
|
|
105
|
+
raise FunctionalException("No web service is opened")
|
|
106
|
+
try:
|
|
107
|
+
method = getattr(context.ws_client.service, method_name)
|
|
108
|
+
except:
|
|
109
|
+
raise FunctionalException("Method '{}' doesn't exist in web service".format(method_name))
|
|
110
|
+
|
|
111
|
+
# Call web service method
|
|
112
|
+
result = method(**parameters)
|
|
113
|
+
|
|
114
|
+
# Store result in variable
|
|
115
|
+
logger.info("result of web service '{}': [{}]".format(method_name, result))
|
|
116
|
+
__get_variable_manager().register_variable(var_name, result)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
@Given(r"(?P<var_name>{Variable}) = new (?P<type_name>{Str}) from web service")
|
|
120
|
+
def step_impl(context, var_name, type_name): # @DuplicatedSignature
|
|
121
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
122
|
+
type_name = StepTools.evaluate_string_parameter(type_name)
|
|
123
|
+
# Verify web service
|
|
124
|
+
if not hasattr(context, 'ws_client') or context.ws_client is None:
|
|
125
|
+
raise FunctionalException("No web service is opened")
|
|
126
|
+
|
|
127
|
+
table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
128
|
+
|
|
129
|
+
# Create object instance
|
|
130
|
+
if with_suds:
|
|
131
|
+
obj = context.ws_client.factory.create(type_name)
|
|
132
|
+
elif with_zeep:
|
|
133
|
+
obj = getattr(context.ws_client.type_factory('asgard.api_reseaux.tns'), type_name)()
|
|
134
|
+
else:
|
|
135
|
+
raise TechnicalException("No module was found to manage web service steps (managed modules: suds, zeep)")
|
|
136
|
+
|
|
137
|
+
# Fill object
|
|
138
|
+
if type_name == "stringArray":
|
|
139
|
+
# Verify table structure
|
|
140
|
+
ValueTableManager.verify_table_is_value_table(table)
|
|
141
|
+
|
|
142
|
+
# Fill stringArray
|
|
143
|
+
for row in table.rows:
|
|
144
|
+
obj.string.append(row.get_cell(0).value)
|
|
145
|
+
else:
|
|
146
|
+
ValueTableManager.set_object_attributes_according_name_value_table(obj, table)
|
|
147
|
+
|
|
148
|
+
# Store in variable
|
|
149
|
+
__get_variable_manager().register_variable(var_name, obj)
|
|
150
|
+
|
|
151
|
+
@Then(r"(?P<object_string>{Str}) is (?P<type_name>{Str}) from web service")
|
|
152
|
+
def step_impl(context, object_string, type_name): # @DuplicatedSignature
|
|
153
|
+
obj = StepTools.evaluate_scenario_parameter(object_string)
|
|
154
|
+
type_name = StepTools.evaluate_string_parameter(type_name)
|
|
155
|
+
table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
156
|
+
|
|
157
|
+
# Verify web service
|
|
158
|
+
if not hasattr(context, 'ws_client') or context.ws_client is None:
|
|
159
|
+
raise FunctionalException("No web service is opened")
|
|
160
|
+
|
|
161
|
+
if with_suds:
|
|
162
|
+
ws_obj = context.ws_client.factory.create(type_name)
|
|
163
|
+
elif with_zeep:
|
|
164
|
+
ws_obj = getattr(context.ws_client.type_factory('asgard.api_reseaux.tns'), type_name)()
|
|
165
|
+
else:
|
|
166
|
+
raise TechnicalException("No module was found to manage web service steps (managed modules: suds, zeep)")
|
|
167
|
+
|
|
168
|
+
if isinstance(obj, Typing.get_object_class(ws_obj)):
|
|
169
|
+
if type_name == "stringArray":
|
|
170
|
+
# Convert stringArray to table
|
|
171
|
+
obj_table = TableWithHeader()
|
|
172
|
+
obj_table.header.add_cells_from_contents(["Value"])
|
|
173
|
+
for obj_str in obj.string:
|
|
174
|
+
obj_table.add_row(cells_content=[obj_str])
|
|
175
|
+
|
|
176
|
+
# Compare tables
|
|
177
|
+
comparator = Table2ValueTable_Comparator()
|
|
178
|
+
comparator.equals(obj_table, table)
|
|
179
|
+
else:
|
|
180
|
+
# Convert object to table
|
|
181
|
+
obj_table = TableManager.convert_object_attributes_2_name_value_table(obj)
|
|
182
|
+
|
|
183
|
+
# Compare tables
|
|
184
|
+
comparator = Table2ValueTable_Comparator()
|
|
185
|
+
comparator.equals(obj_table, table)
|
|
186
|
+
else:
|
|
187
|
+
raise FunctionalException("Object is of type '{}' (expected type: '{}' ; type_name: '{}')".format(Typing.get_object_class_fullname(obj), Typing.get_object_class_fullname(ws_obj), type_name))
|
|
188
|
+
|
|
189
|
+
|
holado_yaml/__init__.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
def dependencies():
|
|
17
|
+
"""
|
|
18
|
+
Return None or the list of names of modules it depend on
|
|
19
|
+
"""
|
|
20
|
+
return None
|
|
21
|
+
|
|
22
|
+
def register():
|
|
23
|
+
"""
|
|
24
|
+
Register the services of this module
|
|
25
|
+
"""
|
|
26
|
+
# from holado.common.context.session_context import SessionContext
|
|
27
|
+
|
|
28
|
+
# from holado_xxx.xxx import XXXManager
|
|
29
|
+
# SessionContext.instance().services.register_service_type("xxx_manager", XXXManager)
|
|
30
|
+
pass
|
|
31
|
+
|
|
@@ -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 .yaml_steps import *
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
from holado_test.scenario.step_tools import StepTools
|
|
17
|
+
from holado.common.context.session_context import SessionContext
|
|
18
|
+
from holado_test.behave.behave import *
|
|
19
|
+
import logging
|
|
20
|
+
from holado_yaml.yaml.yaml_manager import YAMLManager
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
if YAMLManager.is_available():
|
|
26
|
+
|
|
27
|
+
def __get_scenario_context():
|
|
28
|
+
return SessionContext.instance().get_scenario_context()
|
|
29
|
+
|
|
30
|
+
def __get_variable_manager():
|
|
31
|
+
return __get_scenario_context().get_variable_manager()
|
|
32
|
+
|
|
33
|
+
def __get_path_manager():
|
|
34
|
+
return SessionContext.instance().path_manager
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@Step(r"(?P<var_name>{Variable}) = load YAML file (?P<path>{Str})(?:(?P<with_only_strings_str> \(with only strings\))|(?P<with_full_yaml_features_str> \(with full YAML features\)))?")
|
|
38
|
+
def step_impl(context, var_name, path, with_only_strings_str, with_full_yaml_features_str): # @DuplicatedSignature
|
|
39
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
40
|
+
path = StepTools.evaluate_scenario_parameter(path)
|
|
41
|
+
|
|
42
|
+
res = YAMLManager.load_file(path, with_only_strings_str is not None, with_full_yaml_features_str is not None)
|
|
43
|
+
|
|
44
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
45
|
+
|
|
46
|
+
@Step(r"(?P<var_name>{Variable}) = load multiple documents YAML file (?P<path>{Str})(?:(?P<with_only_strings_str> \(with only strings\))|(?P<with_full_yaml_features_str> \(with full YAML features\)))?")
|
|
47
|
+
def step_impl(context, var_name, path, with_only_strings_str, with_full_yaml_features_str): # @DuplicatedSignature
|
|
48
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
49
|
+
path = StepTools.evaluate_scenario_parameter(path)
|
|
50
|
+
|
|
51
|
+
res = YAMLManager.load_multiple_documents_file(path, with_only_strings_str is not None, with_full_yaml_features_str is not None)
|
|
52
|
+
|
|
53
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
54
|
+
|
|
55
|
+
@Step(r"save (?P<data>{Variable}) in YAML file (?P<path>{Str})")
|
|
56
|
+
def step_impl(context, data, path): # @DuplicatedSignature
|
|
57
|
+
data = StepTools.evaluate_scenario_parameter(data)
|
|
58
|
+
path = StepTools.evaluate_scenario_parameter(path)
|
|
59
|
+
|
|
60
|
+
YAMLManager.save_file(data, path)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
@@ -0,0 +1,86 @@
|
|
|
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.common.context.session_context import SessionContext
|
|
17
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
18
|
+
from yaml.loader import BaseLoader, FullLoader, SafeLoader
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
import yaml
|
|
25
|
+
with_yaml = True
|
|
26
|
+
except Exception as exc:
|
|
27
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
28
|
+
logger.debug(f"YAML is not available. Initialization failed on error: {exc}")
|
|
29
|
+
with_yaml = False
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class YAMLManager(object):
|
|
33
|
+
"""
|
|
34
|
+
Manage actions on YAML files.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
def is_available(cls):
|
|
39
|
+
return with_yaml
|
|
40
|
+
|
|
41
|
+
@classmethod
|
|
42
|
+
def __path_manager(cls):
|
|
43
|
+
return SessionContext.instance().path_manager
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def load_file(cls, file_path, with_only_strings=False, with_full_yaml_features=False):
|
|
47
|
+
if with_only_strings and with_full_yaml_features:
|
|
48
|
+
raise FunctionalException(f"It is not possible to set both with_only_strings and with_full_yaml_features to True")
|
|
49
|
+
|
|
50
|
+
if with_only_strings:
|
|
51
|
+
loader = BaseLoader
|
|
52
|
+
elif with_full_yaml_features:
|
|
53
|
+
loader = FullLoader
|
|
54
|
+
else:
|
|
55
|
+
loader = SafeLoader
|
|
56
|
+
|
|
57
|
+
with open(file_path, 'r') as file:
|
|
58
|
+
res = yaml.load(file, Loader=loader)
|
|
59
|
+
|
|
60
|
+
return res
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def load_multiple_documents_file(cls, file_path, with_only_strings=False, with_full_yaml_features=False):
|
|
64
|
+
if with_only_strings and with_full_yaml_features:
|
|
65
|
+
raise FunctionalException(f"It is not possible to set both with_only_strings and with_full_yaml_features to True")
|
|
66
|
+
|
|
67
|
+
if with_only_strings:
|
|
68
|
+
loader = BaseLoader
|
|
69
|
+
elif with_full_yaml_features:
|
|
70
|
+
loader = FullLoader
|
|
71
|
+
else:
|
|
72
|
+
loader = SafeLoader
|
|
73
|
+
|
|
74
|
+
with open(file_path, 'r') as file:
|
|
75
|
+
res = list(yaml.load_all(file, Loader=loader))
|
|
76
|
+
|
|
77
|
+
return res
|
|
78
|
+
|
|
79
|
+
@classmethod
|
|
80
|
+
def save_file(cls, data, file_path):
|
|
81
|
+
cls.__path_manager().makedirs(file_path)
|
|
82
|
+
with open(file_path, 'w') as file:
|
|
83
|
+
yaml.dump(data, file)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|