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,175 @@
|
|
|
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 object
|
|
15
|
+
import logging
|
|
16
|
+
from holado.common.handlers.enums import ObjectStates
|
|
17
|
+
|
|
18
|
+
logger = None
|
|
19
|
+
|
|
20
|
+
def initialize_logger():
|
|
21
|
+
global logger
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Object(object):
|
|
26
|
+
def __init__(self, name=None):
|
|
27
|
+
self.__name = name
|
|
28
|
+
self.__obj_state = ObjectStates.Created
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def name(self):
|
|
32
|
+
if self.__name:
|
|
33
|
+
return self.__name
|
|
34
|
+
else:
|
|
35
|
+
return str(self)
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def object_state(self):
|
|
39
|
+
return self.__obj_state
|
|
40
|
+
|
|
41
|
+
@object_state.setter
|
|
42
|
+
def object_state(self, state):
|
|
43
|
+
from holado_core.common.tools.tools import Tools
|
|
44
|
+
from holado_python.standard_library.typing import Typing
|
|
45
|
+
|
|
46
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
47
|
+
logger.trace(f"State changed for object '{self.name}' (type: {Typing.get_object_class_fullname(self)}): {self.__obj_state} -> {state}")
|
|
48
|
+
self.__obj_state = state
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class DeleteableObject(Object):
|
|
52
|
+
"""
|
|
53
|
+
Add to a class deleting features:the possibility to be deleted
|
|
54
|
+
- Self deleting actions
|
|
55
|
+
- Register functions to call on delete
|
|
56
|
+
|
|
57
|
+
Note: It is highly recommended to set garbage collector periodicity with GcManager.collect_periodically method (see method documentation)
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
def __init__(self, name=None):
|
|
61
|
+
super().__init__(name)
|
|
62
|
+
|
|
63
|
+
self.__on_delete_funcs = []
|
|
64
|
+
self.__on_delete_gc_collect = False
|
|
65
|
+
self.__is_deleteable = True
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def _is_deleteable(self):
|
|
69
|
+
return self.__is_deleteable
|
|
70
|
+
|
|
71
|
+
@_is_deleteable.setter
|
|
72
|
+
def _is_deleteable(self, is_deleteable):
|
|
73
|
+
self.__is_deleteable = is_deleteable
|
|
74
|
+
|
|
75
|
+
def __del__(self):
|
|
76
|
+
try:
|
|
77
|
+
if not self._is_deleteable:
|
|
78
|
+
return
|
|
79
|
+
if self.object_state in [ObjectStates.Deleting, ObjectStates.Deleted]:
|
|
80
|
+
return
|
|
81
|
+
|
|
82
|
+
if logger.isEnabledFor(logging.DEBUG):
|
|
83
|
+
logger.debug(f"Deleting object of ID {id(self)} and type {type(self)}")
|
|
84
|
+
if logger.isEnabledFor(logging.TRACE): # @UndefinedVariable
|
|
85
|
+
import traceback
|
|
86
|
+
logger.trace("".join(traceback.format_list(traceback.extract_stack())))
|
|
87
|
+
|
|
88
|
+
# Notes:
|
|
89
|
+
# - Garbage collector default mecanism is incompatible with custom object finalizers (cf GcManager.Method __del__ is called by garbage collector. This call can be done in any thread at any moment.
|
|
90
|
+
# - When SessionContext is under deletion, delete any object by thread is not possible
|
|
91
|
+
from holado.common.context.session_context import SessionContext
|
|
92
|
+
from holado.common.tools.gc_manager import GcManager
|
|
93
|
+
if GcManager.is_collect_threaded() or isinstance(self, SessionContext.TSessionContext) or not SessionContext.has_instance():
|
|
94
|
+
self.__delete()
|
|
95
|
+
else:
|
|
96
|
+
from holado_multitask.multithreading.functionthreaded import FunctionThreaded
|
|
97
|
+
func = FunctionThreaded(self.__delete, name=f"delete object '{self.name}'", register_thread=False, do_log=False)
|
|
98
|
+
func._is_deleteable = False # Deactivate deletion mechanism of DeleteableObject to avoid an infinite loop
|
|
99
|
+
func.start()
|
|
100
|
+
func.join(timeout=30, raise_if_still_alive=False) # timeout of 30s to limit deadlock impact ; raise to False since exceptions are omitted in gc collect context
|
|
101
|
+
except AttributeError as exc:
|
|
102
|
+
if "'NoneType' object has no attribute" in str(exc):
|
|
103
|
+
# Simply return, this exception can appear when system in interrupting
|
|
104
|
+
return
|
|
105
|
+
else:
|
|
106
|
+
raise exc
|
|
107
|
+
except Exception as exc:
|
|
108
|
+
if "Python is likely shutting down" in str(exc):
|
|
109
|
+
# Simply return
|
|
110
|
+
return
|
|
111
|
+
else:
|
|
112
|
+
raise exc
|
|
113
|
+
|
|
114
|
+
def __delete(self):
|
|
115
|
+
try:
|
|
116
|
+
self.delete_object()
|
|
117
|
+
except Exception as exc:
|
|
118
|
+
if "Python is likely shutting down" in str(exc):
|
|
119
|
+
# Simply return
|
|
120
|
+
return
|
|
121
|
+
else:
|
|
122
|
+
raise exc
|
|
123
|
+
|
|
124
|
+
@property
|
|
125
|
+
def on_delete_call_gc_collect(self):
|
|
126
|
+
return self.__on_delete_gc_collect
|
|
127
|
+
|
|
128
|
+
@on_delete_call_gc_collect.setter
|
|
129
|
+
def on_delete_call_gc_collect(self, do_call):
|
|
130
|
+
self.__on_delete_gc_collect = do_call
|
|
131
|
+
|
|
132
|
+
def on_delete_call_func(self, func):
|
|
133
|
+
self.__on_delete_funcs.append(func)
|
|
134
|
+
|
|
135
|
+
def delete_object(self):
|
|
136
|
+
from holado_core.common.tools.tools import Tools
|
|
137
|
+
from holado_python.standard_library.typing import Typing
|
|
138
|
+
|
|
139
|
+
if not self._is_deleteable:
|
|
140
|
+
return
|
|
141
|
+
if self.object_state in [ObjectStates.Deleting, ObjectStates.Deleted]:
|
|
142
|
+
return False
|
|
143
|
+
|
|
144
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
145
|
+
logger.debug(f"Deleting object '{self.name}' (type: {Typing.get_object_class_fullname(self)})...")
|
|
146
|
+
self.object_state = ObjectStates.Deleting
|
|
147
|
+
|
|
148
|
+
# Run on_delete functions
|
|
149
|
+
for func in self.__on_delete_funcs:
|
|
150
|
+
try:
|
|
151
|
+
func()
|
|
152
|
+
except:
|
|
153
|
+
logger.exception(f"[{self.name}] Error while running on delete function '{func}'")
|
|
154
|
+
|
|
155
|
+
self._delete_object()
|
|
156
|
+
|
|
157
|
+
# Call garbage collector
|
|
158
|
+
if self.__on_delete_gc_collect:
|
|
159
|
+
from holado.common.tools.gc_manager import GcManager
|
|
160
|
+
GcManager.collect()
|
|
161
|
+
|
|
162
|
+
self.object_state = ObjectStates.Deleted
|
|
163
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
164
|
+
logger.debug(f"Deleted object '{self.name}' (type: {Typing.get_object_class_fullname(self)})")
|
|
165
|
+
|
|
166
|
+
return True
|
|
167
|
+
|
|
168
|
+
def _delete_object(self):
|
|
169
|
+
"""
|
|
170
|
+
Implement this method for specific delete actions
|
|
171
|
+
"""
|
|
172
|
+
pass
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#################################################
|
|
2
|
+
# HolAdo (Holistic Automation do)
|
|
3
|
+
#
|
|
4
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
5
|
+
#
|
|
6
|
+
# 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:
|
|
7
|
+
#
|
|
8
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
9
|
+
|
|
10
|
+
# 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.
|
|
11
|
+
#################################################
|
|
12
|
+
|
|
13
|
+
import logging
|
|
14
|
+
from holado.common.handlers.object import Object
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class Undefined(Object):
|
|
20
|
+
def __init__(self, name, undefined_value=0):
|
|
21
|
+
super().__init__(name)
|
|
22
|
+
self.__value = undefined_value
|
|
23
|
+
|
|
24
|
+
def __str__(self)->str:
|
|
25
|
+
if self.name is not None:
|
|
26
|
+
return f"<{self.name}>"
|
|
27
|
+
else:
|
|
28
|
+
return super().__str__()
|
|
29
|
+
|
|
30
|
+
def is_undefined(obj):
|
|
31
|
+
return isinstance(obj, Undefined)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# Define specific undefined objects
|
|
35
|
+
|
|
36
|
+
undefined_argument = Undefined("Undefined argument", 0)
|
|
37
|
+
undefined_value = Undefined("Undefined value", 1)
|
|
38
|
+
not_applicable = Undefined("Not Applicable", 2)
|
|
39
|
+
to_be_defined = Undefined("To be defined", 3) # Usage: initial variable value defining it is to be defined. It is useful when undefined_value can be a possible value.
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# Define specific default values
|
|
43
|
+
# Note: Real value is defined by methods managing these values as argument.
|
|
44
|
+
|
|
45
|
+
default = Undefined("Default", 10)
|
|
46
|
+
default_value = Undefined("Default value", 11)
|
|
47
|
+
default_context = Undefined("Default context", 12) # Example of real value: for ThreadsManager it means "current ScenarioContext" if a scenario context exists else "SessionContext".
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
# Define symbolic values
|
|
51
|
+
|
|
52
|
+
any_value = Undefined("Any value", 20)
|
|
53
|
+
not_defined_value = Undefined("Not defined value", 21)
|
|
54
|
+
|
|
55
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
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 initialize_loggers():
|
|
17
|
+
import holado.common.tools.gc_manager
|
|
18
|
+
holado.common.tools.gc_manager.initialize_logger()
|
|
19
|
+
|
|
@@ -0,0 +1,155 @@
|
|
|
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 builtins import object
|
|
16
|
+
import threading
|
|
17
|
+
import gc
|
|
18
|
+
from holado.common.handlers.undefined import default_value
|
|
19
|
+
|
|
20
|
+
logger = None
|
|
21
|
+
default_collect_periodicity = 10
|
|
22
|
+
|
|
23
|
+
def initialize_logger():
|
|
24
|
+
global logger
|
|
25
|
+
logger = logging.getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class GcManager(object):
|
|
29
|
+
"""
|
|
30
|
+
Manage Garbage Collector
|
|
31
|
+
|
|
32
|
+
Note: When working with HolAdo, it is highly recommended to call collect_periodically method at process start in order to avoid deadlocks.
|
|
33
|
+
This is done by default in holado.initialize method.
|
|
34
|
+
Explanation:
|
|
35
|
+
HolAdo is using object finalizers (define __del__ methods) to properly release objects resources.
|
|
36
|
+
But in current garbage collector default mecanism, objects are technically finalized (call of __del__) in any yielded thread.
|
|
37
|
+
Thus, depending on what thread is doing when an object is finalized, a deadlock can occur.
|
|
38
|
+
Example: current thread is logging a message, garbage collector is finalizing an object in this thread when logger flushes its stream,
|
|
39
|
+
and object finalizer tries to log an other message => it results to a deadlock in logging library in its lock mecanism.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
# Manage running and pended collect
|
|
43
|
+
__collect_run_lock = threading.Lock()
|
|
44
|
+
__is_collect_running = False
|
|
45
|
+
__is_collect_pending = False
|
|
46
|
+
__duration_until_pended_collect = default_collect_periodicity
|
|
47
|
+
|
|
48
|
+
# Manage scheduled collect as timer
|
|
49
|
+
__collect_timer_lock = threading.RLock()
|
|
50
|
+
__collect_periodicity = None
|
|
51
|
+
__collect_timer = None
|
|
52
|
+
__collect_timer_at = None
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def is_collect_threaded(cls):
|
|
56
|
+
return cls.__collect_periodicity is not None
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def get_collect_periodicity(cls):
|
|
60
|
+
return cls.__collect_periodicity
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def collect_periodically(cls, collect_periodicity=default_value):
|
|
64
|
+
"""
|
|
65
|
+
Call this method to periodically process gargage collector collect.
|
|
66
|
+
By calling this method, default behaviour of garbage collector is disabled.
|
|
67
|
+
"""
|
|
68
|
+
gc.disable()
|
|
69
|
+
with cls.__collect_timer_lock:
|
|
70
|
+
cls.__collect_periodicity = default_collect_periodicity if collect_periodicity is default_value else collect_periodicity
|
|
71
|
+
cls.__schedule_next_timer(cls.__collect_periodicity)
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def collect(cls, max_duration_until_next_collect_in_seconds=default_value):
|
|
75
|
+
max_duration = default_collect_periodicity if max_duration_until_next_collect_in_seconds is default_value else max_duration_until_next_collect_in_seconds
|
|
76
|
+
|
|
77
|
+
with cls.__collect_run_lock:
|
|
78
|
+
# If a collect is already pended, update duration until pended collect
|
|
79
|
+
if cls.__is_collect_pending:
|
|
80
|
+
if max_duration < cls.__duration_until_pended_collect:
|
|
81
|
+
cls.__duration_until_pended_collect = max_duration
|
|
82
|
+
return
|
|
83
|
+
# If a collect is already running, pend a collect
|
|
84
|
+
if cls.__is_collect_running:
|
|
85
|
+
cls.__is_collect_pending = True
|
|
86
|
+
cls.__duration_until_pended_collect = max_duration
|
|
87
|
+
return
|
|
88
|
+
|
|
89
|
+
# Else schedule next collect
|
|
90
|
+
with cls.__collect_timer_lock:
|
|
91
|
+
if cls.__collect_timer is not None:
|
|
92
|
+
cls.__schedule_next_timer(max_duration_until_next_collect_in_seconds)
|
|
93
|
+
else:
|
|
94
|
+
cls.__schedule_next_timer(0)
|
|
95
|
+
|
|
96
|
+
@classmethod
|
|
97
|
+
def __collect(cls):
|
|
98
|
+
# Start running
|
|
99
|
+
with cls.__collect_run_lock:
|
|
100
|
+
cls.__is_collect_running = True
|
|
101
|
+
|
|
102
|
+
# Process collect
|
|
103
|
+
gc.collect()
|
|
104
|
+
|
|
105
|
+
# Schedule next timer
|
|
106
|
+
duration_until_next_collect = None
|
|
107
|
+
with cls.__collect_run_lock:
|
|
108
|
+
if cls.__is_collect_pending:
|
|
109
|
+
duration_until_next_collect = cls.__duration_until_pended_collect
|
|
110
|
+
with cls.__collect_timer_lock:
|
|
111
|
+
if cls.__collect_periodicity is not None:
|
|
112
|
+
if duration_until_next_collect is None:
|
|
113
|
+
duration_until_next_collect = cls.__collect_periodicity
|
|
114
|
+
else:
|
|
115
|
+
duration_until_next_collect = min(duration_until_next_collect, cls.__collect_periodicity)
|
|
116
|
+
|
|
117
|
+
cls.__schedule_next_timer(duration_until_next_collect)
|
|
118
|
+
|
|
119
|
+
# Stop running
|
|
120
|
+
with cls.__collect_run_lock:
|
|
121
|
+
cls.__is_collect_running = False
|
|
122
|
+
# Reinitialize pending variables
|
|
123
|
+
cls.__is_collect_pending = False
|
|
124
|
+
cls.__duration_until_pended_collect = default_collect_periodicity
|
|
125
|
+
|
|
126
|
+
@classmethod
|
|
127
|
+
def __schedule_next_timer(cls, duration_until_next_collect_seconds):
|
|
128
|
+
import holado_multitask.multithreading.timer as mmt
|
|
129
|
+
from holado_multitask.multitasking.multitask_manager import MultitaskManager
|
|
130
|
+
from holado_python.common.tools.datetime import DateTime, DurationUnit
|
|
131
|
+
from holado_python.common.enums import ArithmeticOperator
|
|
132
|
+
|
|
133
|
+
if duration_until_next_collect_seconds is default_value:
|
|
134
|
+
duration_until_next_collect_seconds = default_collect_periodicity
|
|
135
|
+
|
|
136
|
+
with cls.__collect_timer_lock:
|
|
137
|
+
if duration_until_next_collect_seconds is not None:
|
|
138
|
+
now = DateTime.now()
|
|
139
|
+
next_timer_at = DateTime.apply_delta_on_datetime(now, ArithmeticOperator.Addition, duration_until_next_collect_seconds, DurationUnit.Second)
|
|
140
|
+
|
|
141
|
+
if cls.__collect_timer_at is not None and cls.__collect_timer_at > now and next_timer_at > cls.__collect_timer_at:
|
|
142
|
+
# Current scheduled collect is not running and will occur before newly schedule, it is preserved
|
|
143
|
+
return
|
|
144
|
+
elif cls.__collect_timer_at is not None:
|
|
145
|
+
# Current scheduled collect is canceled and replaced
|
|
146
|
+
cls.__collect_timer.cancel()
|
|
147
|
+
|
|
148
|
+
# Schedule timer with given duration
|
|
149
|
+
cls.__collect_timer = mmt.Timer("GcManager-collect", duration_until_next_collect_seconds, cls.__collect, register_scope=MultitaskManager.SESSION_SCOPE_NAME)
|
|
150
|
+
cls.__collect_timer.start()
|
|
151
|
+
cls.__collect_timer_at = next_timer_at
|
|
152
|
+
else:
|
|
153
|
+
cls.__collect_timer = None
|
|
154
|
+
cls.__collect_timer_at = None
|
|
155
|
+
|
holado/holado_config.py
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#################################################
|
|
2
|
+
# HolAdo (Holistic Automation do)
|
|
3
|
+
#
|
|
4
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
5
|
+
#
|
|
6
|
+
# 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:
|
|
7
|
+
#
|
|
8
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
9
|
+
|
|
10
|
+
# 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.
|
|
11
|
+
#################################################
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Config(object):
|
|
15
|
+
"""HolAdo project configuration"""
|
|
16
|
+
|
|
17
|
+
# Application properties
|
|
18
|
+
application_group = None
|
|
19
|
+
|
|
20
|
+
# Timeouts
|
|
21
|
+
session_timeout_seconds = 7 * 24 * 3600 # Session timeout is by default to 7 days
|
|
22
|
+
timeout_seconds = 240 # Default timeout
|
|
23
|
+
join_timeout_seconds = 1800 # Long timeout used when a join should stop without deadlock. When this timeout is reached, a TimeoutTechnicalException is raised
|
|
24
|
+
|
|
25
|
+
# Message
|
|
26
|
+
message_truncate_length = 500 # Length used to truncate a message when it is too long. When a message is truncated, it is suffixed by '...'
|
|
27
|
+
|
|
28
|
+
# Time analysis
|
|
29
|
+
threshold_warn_time_spent_s = 10 # Duration in seconds that triggers a warning on spent time
|
|
30
|
+
|
|
31
|
+
# Redo
|
|
32
|
+
redo_wait_process_min_interval_s = 0.001 # In redo, minimal duration to sleep between two verification of process thread end
|
|
33
|
+
redo_wait_process_max_interval_s = 0.1 # In redo, maximal duration to sleep between two verification of process thread end
|
|
34
|
+
|
|
35
|
+
# Unique values
|
|
36
|
+
unique_string_padding_length = 6 # Number of characters used to generate a unique text suffix
|
|
37
|
+
|
|
38
|
+
# Symbols
|
|
39
|
+
DYNAMIC_SYMBOL = u"%"
|
|
40
|
+
THREAD_DYNAMIC_SYMBOL = u"@"
|
|
41
|
+
UNIQUE_SYMBOL = u"#"
|
|
42
|
+
NOT_APPLICABLE_SYMBOL = u"N/A"
|
|
43
|
+
NONE_SYMBOL = u"None"
|
|
44
|
+
|
|
45
|
+
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: holado
|
|
3
|
+
Version: 0.13.22
|
|
4
|
+
Summary: HolAdo framework
|
|
5
|
+
Project-URL: Homepage, https://gitlab.com/holado_framework/python
|
|
6
|
+
Project-URL: Issues, https://gitlab.com/holado_framework/python/-/issues
|
|
7
|
+
Author-email: Eric Klumpp <eric.klumpp@gmail.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: AIS,BDD,Behavior Driver Development,Behaviour Driven Development,DB,Protobuf,REST,RabbitMQ,Redis,S3,Specification By Example,Web Services,XML,YAML,automation,docker,functional test,gRPC,logging,multitask,script,test,test automation
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Requires-Dist: behave
|
|
19
|
+
Requires-Dist: duration-parser
|
|
20
|
+
Requires-Dist: psutil
|
|
21
|
+
Requires-Dist: pypika
|
|
22
|
+
Requires-Dist: python-dateutil
|
|
23
|
+
Requires-Dist: sql-metadata
|
|
24
|
+
Requires-Dist: xmltodict
|
|
25
|
+
Provides-Extra: ais
|
|
26
|
+
Requires-Dist: pyais; extra == 'ais'
|
|
27
|
+
Provides-Extra: all
|
|
28
|
+
Requires-Dist: boto3; extra == 'all'
|
|
29
|
+
Requires-Dist: certifi; extra == 'all'
|
|
30
|
+
Requires-Dist: connexion[flask,swagger-ui,uvicorn]; extra == 'all'
|
|
31
|
+
Requires-Dist: docker; extra == 'all'
|
|
32
|
+
Requires-Dist: flask; extra == 'all'
|
|
33
|
+
Requires-Dist: flask-cors; extra == 'all'
|
|
34
|
+
Requires-Dist: google; extra == 'all'
|
|
35
|
+
Requires-Dist: google-api-core; extra == 'all'
|
|
36
|
+
Requires-Dist: grpc-requests; extra == 'all'
|
|
37
|
+
Requires-Dist: grpcio; extra == 'all'
|
|
38
|
+
Requires-Dist: grpcio-reflection; extra == 'all'
|
|
39
|
+
Requires-Dist: grpcio-tools; extra == 'all'
|
|
40
|
+
Requires-Dist: minio; extra == 'all'
|
|
41
|
+
Requires-Dist: moto; extra == 'all'
|
|
42
|
+
Requires-Dist: paramiko<4.0.0; extra == 'all'
|
|
43
|
+
Requires-Dist: pika; extra == 'all'
|
|
44
|
+
Requires-Dist: prettytable; extra == 'all'
|
|
45
|
+
Requires-Dist: protobuf; extra == 'all'
|
|
46
|
+
Requires-Dist: psycopg; extra == 'all'
|
|
47
|
+
Requires-Dist: psycopg-binary; extra == 'all'
|
|
48
|
+
Requires-Dist: pyais; extra == 'all'
|
|
49
|
+
Requires-Dist: pympler; extra == 'all'
|
|
50
|
+
Requires-Dist: pyopenssl; extra == 'all'
|
|
51
|
+
Requires-Dist: pysftp; extra == 'all'
|
|
52
|
+
Requires-Dist: redis; extra == 'all'
|
|
53
|
+
Requires-Dist: redis-om; extra == 'all'
|
|
54
|
+
Requires-Dist: ruamel-yaml; extra == 'all'
|
|
55
|
+
Requires-Dist: sftpserver; extra == 'all'
|
|
56
|
+
Requires-Dist: truststore; extra == 'all'
|
|
57
|
+
Requires-Dist: zeep; extra == 'all'
|
|
58
|
+
Provides-Extra: api-connexion
|
|
59
|
+
Requires-Dist: connexion[flask,swagger-ui,uvicorn]; extra == 'api-connexion'
|
|
60
|
+
Provides-Extra: db-postgresql
|
|
61
|
+
Requires-Dist: psycopg; extra == 'db-postgresql'
|
|
62
|
+
Requires-Dist: psycopg-binary; extra == 'db-postgresql'
|
|
63
|
+
Provides-Extra: docker
|
|
64
|
+
Requires-Dist: docker; extra == 'docker'
|
|
65
|
+
Requires-Dist: prettytable; extra == 'docker'
|
|
66
|
+
Provides-Extra: grpc
|
|
67
|
+
Requires-Dist: google; extra == 'grpc'
|
|
68
|
+
Requires-Dist: google-api-core; extra == 'grpc'
|
|
69
|
+
Requires-Dist: grpc-requests; extra == 'grpc'
|
|
70
|
+
Requires-Dist: grpcio; extra == 'grpc'
|
|
71
|
+
Requires-Dist: grpcio-reflection; extra == 'grpc'
|
|
72
|
+
Requires-Dist: grpcio-tools; extra == 'grpc'
|
|
73
|
+
Requires-Dist: protobuf; extra == 'grpc'
|
|
74
|
+
Provides-Extra: helper-debug
|
|
75
|
+
Requires-Dist: pympler; extra == 'helper-debug'
|
|
76
|
+
Provides-Extra: protobuf
|
|
77
|
+
Requires-Dist: google; extra == 'protobuf'
|
|
78
|
+
Requires-Dist: google-api-core; extra == 'protobuf'
|
|
79
|
+
Requires-Dist: protobuf; extra == 'protobuf'
|
|
80
|
+
Provides-Extra: rabbitmq
|
|
81
|
+
Requires-Dist: pika; extra == 'rabbitmq'
|
|
82
|
+
Provides-Extra: redis
|
|
83
|
+
Requires-Dist: redis; extra == 'redis'
|
|
84
|
+
Requires-Dist: redis-om; extra == 'redis'
|
|
85
|
+
Provides-Extra: s3
|
|
86
|
+
Requires-Dist: boto3; extra == 's3'
|
|
87
|
+
Requires-Dist: flask; extra == 's3'
|
|
88
|
+
Requires-Dist: flask-cors; extra == 's3'
|
|
89
|
+
Requires-Dist: minio; extra == 's3'
|
|
90
|
+
Requires-Dist: moto; extra == 's3'
|
|
91
|
+
Provides-Extra: sftp
|
|
92
|
+
Requires-Dist: certifi; extra == 'sftp'
|
|
93
|
+
Requires-Dist: paramiko<4.0.0; extra == 'sftp'
|
|
94
|
+
Requires-Dist: pyopenssl; extra == 'sftp'
|
|
95
|
+
Requires-Dist: pysftp; extra == 'sftp'
|
|
96
|
+
Requires-Dist: sftpserver; extra == 'sftp'
|
|
97
|
+
Requires-Dist: truststore; extra == 'sftp'
|
|
98
|
+
Provides-Extra: ssl
|
|
99
|
+
Requires-Dist: certifi; extra == 'ssl'
|
|
100
|
+
Requires-Dist: pyopenssl; extra == 'ssl'
|
|
101
|
+
Requires-Dist: truststore; extra == 'ssl'
|
|
102
|
+
Provides-Extra: ws-suds
|
|
103
|
+
Requires-Dist: suds; extra == 'ws-suds'
|
|
104
|
+
Provides-Extra: ws-zeep
|
|
105
|
+
Requires-Dist: zeep; extra == 'ws-zeep'
|
|
106
|
+
Provides-Extra: yaml
|
|
107
|
+
Requires-Dist: ruamel-yaml; extra == 'yaml'
|
|
108
|
+
Description-Content-Type: text/markdown
|
|
109
|
+
|
|
110
|
+
# HolAdo (Holistic Automation do)
|
|
111
|
+
|
|
112
|
+
# HolAdo
|
|
113
|
+
|
|
114
|
+
HolAdo, or Holistic Automation do, gives a road to holistic automation in software development.
|
|
115
|
+
It's aim is to facilitate many actions by unifying in one framework all needed modules.
|
|
116
|
+
Each module delivers a specific need, and it is generally internally using another framework focussed on this need.
|
|
117
|
+
|
|
118
|
+
HolAdo framework makes it easy to build a solution with many capabilities.
|
|
119
|
+
Historically, it was created to easily build powerful functional testing solutions.
|
|
120
|
+
But it's conception allows to use it in any context, by integrating only needed HolAdo modules.
|
|
121
|
+
|
|
122
|
+
In order to improve transparency and maintainability of built solution,
|
|
123
|
+
the Gherkin language is used as a meta-language humanly readable.
|
|
124
|
+
Each module includes dedicated steps to easily write scenarios (for testing) or processes (for configuration, deployment,...).
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
# Status
|
|
128
|
+
|
|
129
|
+
HolAdo can be used as is, it is stable and maintained.
|
|
130
|
+
|
|
131
|
+
Until v1.0.0, it is still considered under construction, it is regularly refactored with breaking changes.
|
|
132
|
+
|
|
133
|
+
To facilitate it's use, each breaking change will result to a new middle version 0.X.0, so that you can update minor versions without problem.
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
# Python
|
|
137
|
+
|
|
138
|
+
HolAdo project for Python development.
|
|
139
|
+
Python is currently the only one supported language.
|
|
140
|
+
|
|
141
|
+
Currently, main available modules are:
|
|
142
|
+
* ais: manage AIS data
|
|
143
|
+
* binary: manipulate binary data, like bit series
|
|
144
|
+
* db: manage DB actions (clients, query)
|
|
145
|
+
* docker: manage Docker actions
|
|
146
|
+
* grpc: manage gRPC clients
|
|
147
|
+
* helper: many helpers to easily use HolAdo possibilities (ex: build script/executable using Gherkin language outside of testing context, like to write automatic processes with pseudo code)
|
|
148
|
+
* json: manipulate JSON data
|
|
149
|
+
* keycloak: a Keycloak client
|
|
150
|
+
* logging: add logging capabilities
|
|
151
|
+
* multitask: manage multithreading and multiprocessing
|
|
152
|
+
* protobuf: manage Protobuf
|
|
153
|
+
* python: some tools over python libraries
|
|
154
|
+
* rabbitmq: manage RabbitMQ
|
|
155
|
+
* redis: manage Redis clients
|
|
156
|
+
* report: manage reporting
|
|
157
|
+
* rest: manage REST clients
|
|
158
|
+
* s3: manage S3 clients
|
|
159
|
+
* scripting: add scripting capabilities in other modules
|
|
160
|
+
* sftp: manage sFTP clients
|
|
161
|
+
* system: manage system actions
|
|
162
|
+
* test: core module for testing capability (currently, only BDD tool "behave" is supported)
|
|
163
|
+
* value: manage values (like tables with scripting capabilities)
|
|
164
|
+
* ws: manage Web Service clients
|
|
165
|
+
|
|
166
|
+
Major upcomming capabilities:
|
|
167
|
+
* WebUI interactions (with playright or selenium)
|
|
168
|
+
* DB ORM
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
# Community
|
|
172
|
+
|
|
173
|
+
A community around HolAdo is under construction.
|
|
174
|
+
|
|
175
|
+
For the moment you can contact me by email (eric.klumpp@gmail.com).
|
|
176
|
+
|
|
177
|
+
For any support, please write scenarios (executable with 'behave') illustating your problem:
|
|
178
|
+
* If you encounter a bug, scenarios reproducing the bug.
|
|
179
|
+
* If you need an evolution, scenarios illustrating the expected behavior.
|
|
180
|
+
|
|
181
|
+
If you have implemented a new module, please send it to me, and I will include it in HolAdo framework.
|
|
182
|
+
|
|
183
|
+
<!--
|
|
184
|
+
|
|
185
|
+
# Howto run HolAdo non-regression tests from docker image got from registry.gitlab.com
|
|
186
|
+
|
|
187
|
+
Note: Read HolAdo non-regression tests is a good way to discover its capabilities.
|
|
188
|
+
|
|
189
|
+
* docker login -u XXX registry.gitlab.com
|
|
190
|
+
* docker pull registry.gitlab.com/holado_framework/python:main
|
|
191
|
+
* docker run --rm -it registry.gitlab.com/holado_framework/python:main /bin/sh -c "cd /code/holado/python; ./run_test_nonreg.sh"
|
|
192
|
+
|
|
193
|
+
-->
|
|
194
|
+
|