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,183 @@
|
|
|
1
|
+
|
|
2
|
+
#################################################
|
|
3
|
+
# HolAdo (Holistic Automation do)
|
|
4
|
+
#
|
|
5
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
8
|
+
#
|
|
9
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
|
+
|
|
11
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
12
|
+
#################################################
|
|
13
|
+
|
|
14
|
+
import logging
|
|
15
|
+
import json
|
|
16
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
17
|
+
from json.decoder import JSONDecodeError
|
|
18
|
+
import base64
|
|
19
|
+
from holado_python.standard_library.typing import Typing
|
|
20
|
+
from typing import get_args, get_type_hints
|
|
21
|
+
from holado_core.common.handlers.features.resource_by_type import FeatureClassResourceByType
|
|
22
|
+
from holado.common.handlers.undefined import undefined_value
|
|
23
|
+
import inspect
|
|
24
|
+
|
|
25
|
+
logger = logging.getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# Define managed json types
|
|
29
|
+
|
|
30
|
+
class JsonTypes(FeatureClassResourceByType):
|
|
31
|
+
@classmethod
|
|
32
|
+
def _get_class_resource_description(cls, plural=False):
|
|
33
|
+
if plural:
|
|
34
|
+
return 'json types'
|
|
35
|
+
else:
|
|
36
|
+
return 'json type'
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def _new_parents(cls, parents, class_, **kwargs):
|
|
40
|
+
if parents is None:
|
|
41
|
+
res = []
|
|
42
|
+
else:
|
|
43
|
+
res = list(parents)
|
|
44
|
+
res.append( (class_, kwargs) )
|
|
45
|
+
return res
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# Register default json types
|
|
49
|
+
|
|
50
|
+
JsonTypes.register_resource_for_type_in_class('primitive', lambda c: c in [int, float, bool, type(None)], None,
|
|
51
|
+
(lambda x: x, lambda x: x, None))
|
|
52
|
+
JsonTypes.register_resource_for_type_in_class('bytes', lambda c: inspect.isclass(c) and issubclass(c, bytes), None,
|
|
53
|
+
(base64.b64decode, base64.b64encode, None))
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _to_json_from_str(value):
|
|
57
|
+
try:
|
|
58
|
+
return json.loads(value)
|
|
59
|
+
except JSONDecodeError:
|
|
60
|
+
return value
|
|
61
|
+
|
|
62
|
+
JsonTypes.register_resource_for_type_in_class('str', lambda c: inspect.isclass(c) and issubclass(c, str), None,
|
|
63
|
+
(lambda x: x, _to_json_from_str, None))
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _from_json_to_Dict(obj_json, class_, _parents=None, converter=None):
|
|
67
|
+
if not isinstance(obj_json, dict):
|
|
68
|
+
raise TechnicalException(f"Argument 'obj_json' must be a dict")
|
|
69
|
+
if converter is None:
|
|
70
|
+
from holado_json.ipc.json_converter import JsonConverter
|
|
71
|
+
converter = JsonConverter()
|
|
72
|
+
|
|
73
|
+
# Define key and value types if they are available, else type of of key and value will be used
|
|
74
|
+
args = get_args(class_)
|
|
75
|
+
if len(args) > 0:
|
|
76
|
+
if len(args) != 2:
|
|
77
|
+
raise TechnicalException(f"Unmanaged convert from json to {Typing.get_class_fullname(class_)}: 2 type arguments are expected (obtained type arguments: {args})")
|
|
78
|
+
key_type, value_type = args
|
|
79
|
+
else:
|
|
80
|
+
# Use object type of each dict key & value
|
|
81
|
+
key_type, value_type = None, None
|
|
82
|
+
|
|
83
|
+
res = {}
|
|
84
|
+
for k, v in obj_json.items():
|
|
85
|
+
key = converter.from_json_to(k, key_type, _parents=JsonTypes._new_parents(_parents, class_, name=k, index=0))
|
|
86
|
+
value = converter.from_json_to(v, value_type, _parents=JsonTypes._new_parents(_parents, class_, name=k, index=1))
|
|
87
|
+
res[key] = value
|
|
88
|
+
|
|
89
|
+
return res
|
|
90
|
+
|
|
91
|
+
def _to_json_from_dict_or_list(value):
|
|
92
|
+
try:
|
|
93
|
+
tmp = json.dumps(value)
|
|
94
|
+
return json.loads(tmp)
|
|
95
|
+
except JSONDecodeError:
|
|
96
|
+
return value
|
|
97
|
+
|
|
98
|
+
JsonTypes.register_resource_for_type_in_class('Dict', lambda c: inspect.isclass(c) and issubclass(c, dict), None,
|
|
99
|
+
(None, _to_json_from_dict_or_list, _from_json_to_Dict))
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _from_json_to_List(obj_json, class_, _parents=None, converter=None):
|
|
103
|
+
if not isinstance(obj_json, list):
|
|
104
|
+
raise TechnicalException(f"Argument 'obj_json' must be a list")
|
|
105
|
+
if converter is None:
|
|
106
|
+
from holado_json.ipc.json_converter import JsonConverter
|
|
107
|
+
converter = JsonConverter()
|
|
108
|
+
|
|
109
|
+
element_type = get_args(class_)[0]
|
|
110
|
+
|
|
111
|
+
res = []
|
|
112
|
+
for index, el in enumerate(obj_json):
|
|
113
|
+
res_el = converter.from_json_to(el, element_type, _parents=JsonTypes._new_parents(_parents, class_, index=index))
|
|
114
|
+
res.append(res_el)
|
|
115
|
+
|
|
116
|
+
return res
|
|
117
|
+
|
|
118
|
+
JsonTypes.register_resource_for_type_in_class('List', lambda c: inspect.isclass(c) and issubclass(c, list), None,
|
|
119
|
+
(None, _to_json_from_dict_or_list, _from_json_to_List))
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _from_json_to_NamedTuple(obj_json, class_, _parents=None, converter=None):
|
|
123
|
+
if not isinstance(obj_json, dict):
|
|
124
|
+
raise TechnicalException(f"Argument 'obj_json' must be a dict")
|
|
125
|
+
if converter is None:
|
|
126
|
+
from holado_json.ipc.json_converter import JsonConverter
|
|
127
|
+
converter = JsonConverter()
|
|
128
|
+
|
|
129
|
+
kwargs = {}
|
|
130
|
+
for name, type_ in get_type_hints(class_).items():
|
|
131
|
+
if name not in obj_json:
|
|
132
|
+
raise TechnicalException(f"No field '{name}' in json object (existing fields: {list(obj_json.keys())})")
|
|
133
|
+
value = converter.from_json_to(obj_json[name], type_, _parents=JsonTypes._new_parents(_parents, class_, name=name))
|
|
134
|
+
kwargs[name] = value
|
|
135
|
+
|
|
136
|
+
return class_(**kwargs)
|
|
137
|
+
|
|
138
|
+
JsonTypes.register_resource_for_type_in_class('NamedTuple', lambda c: Typing.is_NamedTuple(class_=c), None,
|
|
139
|
+
(None, None, _from_json_to_NamedTuple))
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def _from_json_to_object(obj_json, class_, _parents=None, converter=None):
|
|
143
|
+
if not isinstance(obj_json, dict):
|
|
144
|
+
raise TechnicalException(f"Argument 'obj_json' must be a dict")
|
|
145
|
+
if converter is None:
|
|
146
|
+
from holado_json.ipc.json_converter import JsonConverter
|
|
147
|
+
converter = JsonConverter()
|
|
148
|
+
|
|
149
|
+
res = undefined_value
|
|
150
|
+
|
|
151
|
+
# Try with constructor having all dict keys as arguments
|
|
152
|
+
try:
|
|
153
|
+
res = class_(**obj_json)
|
|
154
|
+
except TypeError as exc: # @UnusedVariable
|
|
155
|
+
# logger.print(f"++++++++++ class_(**obj_json): {exc}")
|
|
156
|
+
pass
|
|
157
|
+
|
|
158
|
+
if res is undefined_value:
|
|
159
|
+
try:
|
|
160
|
+
res = class_()
|
|
161
|
+
except TypeError as exc: # @UnusedVariable
|
|
162
|
+
# logger.print(f"++++++++++ class_(): {exc}")
|
|
163
|
+
pass
|
|
164
|
+
if res is not undefined_value:
|
|
165
|
+
for k, v in obj_json.items():
|
|
166
|
+
if not isinstance(k, str):
|
|
167
|
+
raise TechnicalException(f"Failed to set a field in object of type {class_}: a field has name [{k}] that is not a string (from json object: {obj_json})")
|
|
168
|
+
value = converter.from_json_to(v, None, _parents=JsonTypes._new_parents(_parents, class_, name=k, index=1))
|
|
169
|
+
if hasattr(res, k):
|
|
170
|
+
setattr(res, k, value)
|
|
171
|
+
else:
|
|
172
|
+
raise TechnicalException(f"Failed to set field '{k}' in object of type {class_}: attribute '{k}' doesn't exists")
|
|
173
|
+
|
|
174
|
+
if res is undefined_value:
|
|
175
|
+
raise TechnicalException(f"Failed to create {class_} instance from json object {obj_json}")
|
|
176
|
+
return res
|
|
177
|
+
|
|
178
|
+
JsonTypes.register_resource_for_type_in_class('object', lambda c: inspect.isclass(c) and issubclass(c, object), lambda o: isinstance(o, object) and hasattr(o, '__dict__'),
|
|
179
|
+
(None, lambda x: x.__dict__, _from_json_to_object))
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
from .ipc.json_steps import *
|
|
File without changes
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
from holado_test.scenario.step_tools import StepTools
|
|
17
|
+
from holado.common.context.session_context import SessionContext
|
|
18
|
+
from holado_test.behave.behave import * # @UnusedWildImport
|
|
19
|
+
from holado_json.ipc.json import create_name_value_table_from_json,\
|
|
20
|
+
create_table_with_header_from_json
|
|
21
|
+
import logging
|
|
22
|
+
from holado_value.common.tables.converters.value_table_converter import ValueTableConverter
|
|
23
|
+
from holado_core.common.tools.tools import Tools
|
|
24
|
+
from holado_json.ipc.json_converter import JsonConverter
|
|
25
|
+
from holado_test.behave.scenario.behave_step_tools import BehaveStepTools
|
|
26
|
+
|
|
27
|
+
logger = logging.getLogger(__name__)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def __get_scenario_context():
|
|
31
|
+
return SessionContext.instance().get_scenario_context()
|
|
32
|
+
|
|
33
|
+
def __get_text_interpreter():
|
|
34
|
+
return __get_scenario_context().get_text_interpreter()
|
|
35
|
+
|
|
36
|
+
def __get_variable_manager():
|
|
37
|
+
return __get_scenario_context().get_variable_manager()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@Step(r"(?P<var_name>{Variable}) = convert json (?P<json_value>{Str}) to name/value table")
|
|
41
|
+
def step_impl(context, var_name, json_value):
|
|
42
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
43
|
+
json_value = StepTools.evaluate_scenario_parameter(json_value)
|
|
44
|
+
|
|
45
|
+
res = create_name_value_table_from_json(json_value, recursive=False, uncollapse_list=False)
|
|
46
|
+
|
|
47
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
48
|
+
logger.debug(f"Convertion result:\n{res.represent(4)}\nsource: {json_value}")
|
|
49
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@Step(r"(?P<var_name>{Variable}) = convert json (?P<json_value>{Str}) to name/value table with names uncollapsed")
|
|
53
|
+
def step_impl(context, var_name, json_value):
|
|
54
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
55
|
+
json_value = StepTools.evaluate_scenario_parameter(json_value)
|
|
56
|
+
|
|
57
|
+
res = create_name_value_table_from_json(json_value, recursive=True, uncollapse_list=False)
|
|
58
|
+
|
|
59
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
60
|
+
logger.debug(f"Convertion result:\n{res.represent(4)}\nsource: {json_value}")
|
|
61
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
62
|
+
|
|
63
|
+
@Step(r"(?P<var_name>{Variable}) = convert json (?P<json_value>{Str}) to name/value table with names and list uncollapsed")
|
|
64
|
+
def step_impl(context, var_name, json_value):
|
|
65
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
66
|
+
json_value = StepTools.evaluate_scenario_parameter(json_value)
|
|
67
|
+
|
|
68
|
+
res = create_name_value_table_from_json(json_value, recursive=True, uncollapse_list=True)
|
|
69
|
+
|
|
70
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
71
|
+
logger.debug(f"Convertion result:\n{res.represent(4)}\nsource: {json_value}")
|
|
72
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@Step(r"(?P<var_name>{Variable}) = convert json (?P<json_object>{Str}) to table with names as columns recursively")
|
|
76
|
+
def step_impl(context, var_name, json_object):
|
|
77
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
78
|
+
json_object = StepTools.evaluate_scenario_parameter(json_object)
|
|
79
|
+
|
|
80
|
+
res = create_table_with_header_from_json(json_object, recursive=True, uncollapse_list=False)
|
|
81
|
+
|
|
82
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
83
|
+
logger.debug(f"Convertion result:\n{res.represent(4)}\nsource: {json_object}")
|
|
84
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@Step(r"(?P<var_name>{Variable}) = convert json (?P<json_object>{Str}) to table with names as columns")
|
|
88
|
+
def step_impl(context, var_name, json_object):
|
|
89
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
90
|
+
json_object = StepTools.evaluate_scenario_parameter(json_object)
|
|
91
|
+
|
|
92
|
+
res = create_table_with_header_from_json(json_object, recursive=False, uncollapse_list=False)
|
|
93
|
+
|
|
94
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
95
|
+
logger.debug(f"Convertion result:\n{res.represent(4)}\nsource: {json_object}")
|
|
96
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
97
|
+
|
|
98
|
+
@Step(r"(?P<var_name>{Variable}) = convert text (?P<json_text>{Str}) to json")
|
|
99
|
+
def step_impl(context, var_name, json_text):
|
|
100
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
101
|
+
json_text = StepTools.evaluate_scenario_parameter(json_text)
|
|
102
|
+
|
|
103
|
+
if isinstance(json_text, bytes):
|
|
104
|
+
json_text = json_text.decode('utf-8')
|
|
105
|
+
|
|
106
|
+
converter = JsonConverter()
|
|
107
|
+
json_object = converter.to_json(json_text)
|
|
108
|
+
|
|
109
|
+
__get_variable_manager().register_variable(var_name, json_object)
|
|
110
|
+
|
|
111
|
+
@Step(r"(?P<var_name>{Variable}) = json object")
|
|
112
|
+
def step_impl(context, var_name):
|
|
113
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
114
|
+
json_text = BehaveStepTools.get_step_multiline_text(context)
|
|
115
|
+
|
|
116
|
+
converter = JsonConverter()
|
|
117
|
+
json_object = converter.to_json(json_text)
|
|
118
|
+
|
|
119
|
+
__get_variable_manager().register_variable(var_name, json_object)
|
|
120
|
+
|
|
121
|
+
@Step(r"(?P<var_name>{Variable}) = convert name/value table (?P<table_varname>{Variable}) to json")
|
|
122
|
+
def step_impl(context, var_name, table_varname):
|
|
123
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
124
|
+
table = StepTools.evaluate_variable_value(table_varname)
|
|
125
|
+
|
|
126
|
+
res = ValueTableConverter.convert_name_value_table_2_json_object(table)
|
|
127
|
+
|
|
128
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
129
|
+
logger.debug(f"Convertion result:\n{res}\nsource: {table.represent(4)}")
|
|
130
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
131
|
+
|
|
@@ -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 .tools.keycloak_client_steps import *
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
from holado.common.context.session_context import SessionContext
|
|
17
|
+
from holado_test.behave.behave import * # @UnusedWildImport
|
|
18
|
+
from holado_keycloak.tools.keycloak.keycloak_client import KeycloakClient
|
|
19
|
+
import logging
|
|
20
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
21
|
+
from holado_test.behave.scenario.behave_step_tools import BehaveStepTools
|
|
22
|
+
from holado_value.common.tables.converters.value_table_converter import ValueTableConverter
|
|
23
|
+
from holado_test.scenario.step_tools import StepTools
|
|
24
|
+
|
|
25
|
+
logger = logging.getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def __get_session_context():
|
|
29
|
+
return SessionContext.instance()
|
|
30
|
+
|
|
31
|
+
def __get_scenario_context():
|
|
32
|
+
return __get_session_context().get_scenario_context()
|
|
33
|
+
|
|
34
|
+
def __get_text_interpreter():
|
|
35
|
+
return __get_scenario_context().get_text_interpreter()
|
|
36
|
+
|
|
37
|
+
def __get_variable_manager():
|
|
38
|
+
return __get_scenario_context().get_variable_manager()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@Given(r"(?P<var_name>{Variable}) = token from Keycloak server")
|
|
44
|
+
def step_impl(context, var_name):
|
|
45
|
+
var_name = StepTools.evaluate_variable_name(var_name)
|
|
46
|
+
table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
47
|
+
params = ValueTableConverter.convert_name_value_table_2_dict(table)
|
|
48
|
+
|
|
49
|
+
client = KeycloakClient()
|
|
50
|
+
if 'username' in params and 'password' in params:
|
|
51
|
+
res = client.get_token_by_grant_type_password(**params)
|
|
52
|
+
elif 'refresh_token' in params:
|
|
53
|
+
res = client.get_token_by_grant_type_refresh_token(**params)
|
|
54
|
+
else:
|
|
55
|
+
raise FunctionalException(f"Unable to get token with given parameters.\nAllowed methods: by password (parameters 'username' and 'password'), by refresh (parameter 'refresh_token')\nReceived parameters: {params}")
|
|
56
|
+
|
|
57
|
+
__get_variable_manager().register_variable(var_name, res)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@Given(r"logout from Keycloak server")
|
|
61
|
+
def step_impl(context):
|
|
62
|
+
table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
|
|
63
|
+
params = ValueTableConverter.convert_name_value_table_2_dict(table)
|
|
64
|
+
|
|
65
|
+
client = KeycloakClient()
|
|
66
|
+
|
|
67
|
+
if 'refresh_token' in params:
|
|
68
|
+
client.logout_by_refresh_token(**params)
|
|
69
|
+
# NOTE: As described in client, this method should work but doesn't, that's why it it commented
|
|
70
|
+
# elif 'token' in params:
|
|
71
|
+
# client.logout_by_token(**params)
|
|
72
|
+
else:
|
|
73
|
+
raise FunctionalException(f"Unable to logout with given parameters.\nAllowed methods: by token (parameter 'token')\nReceived parameters: {params}")
|
|
File without changes
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
|
|
2
|
+
#################################################
|
|
3
|
+
# HolAdo (Holistic Automation do)
|
|
4
|
+
#
|
|
5
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
8
|
+
#
|
|
9
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
|
+
|
|
11
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
12
|
+
#################################################
|
|
13
|
+
|
|
14
|
+
import logging
|
|
15
|
+
import json
|
|
16
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
17
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
18
|
+
from holado_system.system.command.command import Command, CommandStates
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
class KeycloakClient(object):
|
|
24
|
+
|
|
25
|
+
def get_token_by_grant_type_password(self, server_url, realm_name, client_id, client_secret, username, password):
|
|
26
|
+
cmd = f"curl --location --request POST '{server_url}/auth/realms/{realm_name}/protocol/openid-connect/token' \
|
|
27
|
+
--header 'Content-Type: application/x-www-form-urlencoded' \
|
|
28
|
+
--data-urlencode 'client_id={client_id}' \
|
|
29
|
+
--data-urlencode 'client_secret={client_secret}' \
|
|
30
|
+
--data-urlencode 'grant_type=password' \
|
|
31
|
+
--data-urlencode 'username={username}' \
|
|
32
|
+
--data-urlencode 'password={password}'"
|
|
33
|
+
command = Command(cmd, do_log_output=True, do_raise_on_stderr=False)
|
|
34
|
+
command.start()
|
|
35
|
+
command.join()
|
|
36
|
+
|
|
37
|
+
if command.state is not CommandStates.Success:
|
|
38
|
+
raise TechnicalException(f"Error while executing token command [{cmd}] : [{command.stderr}]")
|
|
39
|
+
if command.stdout is not None and 'error' in command.stdout.lower():
|
|
40
|
+
raise FunctionalException(f"Error while getting token for {{server '{server_url}', realm '{realm_name}', client id '{client_id}', username '{username}'}}:\n{command.stdout}")
|
|
41
|
+
|
|
42
|
+
return json.loads(command.stdout)
|
|
43
|
+
|
|
44
|
+
def get_token_by_grant_type_refresh_token(self, server_url, realm_name, client_id, client_secret, refresh_token):
|
|
45
|
+
cmd = f"curl --location --request POST '{server_url}/auth/realms/{realm_name}/protocol/openid-connect/token' \
|
|
46
|
+
--header 'Content-Type: application/x-www-form-urlencoded' \
|
|
47
|
+
--data-urlencode 'client_id={client_id}' \
|
|
48
|
+
--data-urlencode 'client_secret={client_secret}' \
|
|
49
|
+
--data-urlencode 'grant_type=refresh_token' \
|
|
50
|
+
--data-urlencode 'refresh_token={refresh_token}'"
|
|
51
|
+
command = Command(cmd, do_log_output=True, do_raise_on_stderr=False)
|
|
52
|
+
command.start()
|
|
53
|
+
command.join()
|
|
54
|
+
|
|
55
|
+
if command.state is not CommandStates.Success:
|
|
56
|
+
raise TechnicalException(f"Error while executing token command [{cmd}] : [{command.stderr}]")
|
|
57
|
+
if command.stdout is not None and 'error' in command.stdout.lower():
|
|
58
|
+
raise FunctionalException(f"Error while getting token for {{server '{server_url}', realm '{realm_name}', client id '{client_id}', refresh_token '{refresh_token}'}}:\n{command.stdout}")
|
|
59
|
+
|
|
60
|
+
return json.loads(command.stdout)
|
|
61
|
+
|
|
62
|
+
# NOTE: This method doesn't work whereas it should according to documentation. Use instead logout_by_client.
|
|
63
|
+
# def logout_by_token(self, server_url, realm_name, token):
|
|
64
|
+
# cmd = f"curl --location --request POST '{server_url}/auth/realms/{realm_name}/protocol/openid-connect/logout' \
|
|
65
|
+
# --header 'Content-Type: application/x-www-form-urlencoded' \
|
|
66
|
+
# --data-urlencode 'id_token_hint={token}'"
|
|
67
|
+
# command = Command(cmd, do_log_output=True, do_raise_on_stderr=False)
|
|
68
|
+
# command.start()
|
|
69
|
+
# command.join()
|
|
70
|
+
#
|
|
71
|
+
# if command.state is not CommandStates.Success:
|
|
72
|
+
# raise TechnicalException(f"Error while executing logout command [{cmd}] : [{command.stderr}]")
|
|
73
|
+
# if command.stdout is not None and 'error' in command.stdout.lower():
|
|
74
|
+
# raise FunctionalException(f"Error while logging out user for {{server '{server_url}', realm '{realm_name}', id_token_hint '{token}'}}:\n{command.stdout}")
|
|
75
|
+
|
|
76
|
+
def logout_by_refresh_token(self, server_url, realm_name, client_id, client_secret, refresh_token):
|
|
77
|
+
cmd = f"curl --location --request POST '{server_url}/auth/realms/{realm_name}/protocol/openid-connect/logout' \
|
|
78
|
+
--header 'Content-Type: application/x-www-form-urlencoded' \
|
|
79
|
+
--data-urlencode 'client_id={client_id}' \
|
|
80
|
+
--data-urlencode 'client_secret={client_secret}' \
|
|
81
|
+
--data-urlencode 'refresh_token={refresh_token}'"
|
|
82
|
+
command = Command(cmd, do_log_output=True, do_raise_on_stderr=False)
|
|
83
|
+
command.start()
|
|
84
|
+
command.join()
|
|
85
|
+
|
|
86
|
+
if command.state is not CommandStates.Success:
|
|
87
|
+
raise TechnicalException(f"Error while executing logout command [{cmd}] : [{command.stderr}]")
|
|
88
|
+
if command.stdout is not None and 'error' in command.stdout.lower():
|
|
89
|
+
raise FunctionalException(f"Error while logging out user for {{server '{server_url}', realm '{realm_name}', client id '{client_id}', refresh_token '{refresh_token}'}}:\n{command.stdout}")
|
|
90
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
#################################################
|
|
4
|
+
# HolAdo (Holistic Automation do)
|
|
5
|
+
#
|
|
6
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
13
|
+
#################################################
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def dependencies():
|
|
19
|
+
return None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def configure(use_holado_logger=True, logging_config_file_path=None, log_level=None, log_time_in_utc=None, log_on_console=False, log_in_file=True):
|
|
24
|
+
from holado_logging.common.logging.log_config import LogConfig
|
|
25
|
+
LogConfig.configure(use_holado_logger=use_holado_logger, config_file_path=logging_config_file_path,
|
|
26
|
+
log_level=log_level, log_time_in_utc=log_time_in_utc, log_on_console=log_on_console, log_in_file=log_in_file)
|
|
27
|
+
|
|
28
|
+
def initialize_and_register():
|
|
29
|
+
from holado.common.context.session_context import SessionContext
|
|
30
|
+
from holado_logging.common.logging.log_manager import LogManager
|
|
31
|
+
|
|
32
|
+
log_manager = LogManager()
|
|
33
|
+
log_manager.configure()
|
|
34
|
+
log_manager.initialize()
|
|
35
|
+
|
|
36
|
+
SessionContext.instance().services.register_service_instance("log_manager", log_manager, SessionContext.instance(),
|
|
37
|
+
raise_if_service_exist=False, raise_if_object_exist=False)
|
|
38
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
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.handlers.undefined import default_value
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class HALogger(logging.Logger):
|
|
21
|
+
default_message_size_limit = None
|
|
22
|
+
|
|
23
|
+
def __init__(self, name, level=logging.NOTSET):
|
|
24
|
+
super().__init__(name, level)
|
|
25
|
+
|
|
26
|
+
def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False, stacklevel=1, msg_size_limit=default_value):
|
|
27
|
+
# def find_handlers(logger_):
|
|
28
|
+
# index = 0
|
|
29
|
+
# while len(logger_.handlers) == 0:
|
|
30
|
+
# if logger_.parent is not None:
|
|
31
|
+
# logger_ = logger_.parent
|
|
32
|
+
# index += 1
|
|
33
|
+
# else:
|
|
34
|
+
# break
|
|
35
|
+
# return index, logger_.handlers
|
|
36
|
+
# print(f"-------------- {id(self)} | {self.name} | {level}/{self.getEffectiveLevel()} | {msg} | {find_handlers(self)=} | {self.filters=}")
|
|
37
|
+
try:
|
|
38
|
+
from holado_core.common.tools.tools import Tools
|
|
39
|
+
except ImportError as exc:
|
|
40
|
+
if "Python is likely shutting down" in str(exc):
|
|
41
|
+
return
|
|
42
|
+
else:
|
|
43
|
+
raise exc
|
|
44
|
+
|
|
45
|
+
if msg_size_limit is default_value:
|
|
46
|
+
msg_size_limit = HALogger.default_message_size_limit
|
|
47
|
+
msg_to_log = Tools.truncate_text(msg, msg_size_limit)
|
|
48
|
+
|
|
49
|
+
logging.Logger._log(self, level, msg_to_log, args, exc_info=exc_info, extra=extra, stack_info=stack_info, stacklevel=stacklevel)
|
|
50
|
+
|
|
51
|
+
# def setLevel(self, level)->None:
|
|
52
|
+
# logger.print(f"Change logger {self} level to {level}")
|
|
53
|
+
# logging.Logger.setLevel(self, level)
|
|
54
|
+
|
|
55
|
+
class HARootLogger(HALogger):
|
|
56
|
+
"""
|
|
57
|
+
Implementation is a copy of logging.RootLogger
|
|
58
|
+
"""
|
|
59
|
+
def __init__(self, level):
|
|
60
|
+
"""
|
|
61
|
+
Initialize the logger with the name "root".
|
|
62
|
+
"""
|
|
63
|
+
super().__init__("root", level)
|
|
64
|
+
|
|
65
|
+
def __reduce__(self):
|
|
66
|
+
return logging.getLogger, ()
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|