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,242 @@
|
|
|
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 super
|
|
15
|
+
from holado_core.common.tables.table_row import TableRow
|
|
16
|
+
from holado_core.common.tables.table import Table
|
|
17
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
18
|
+
import copy
|
|
19
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
20
|
+
import logging
|
|
21
|
+
from holado_core.common.tables.comparators.table_cell_comparator import TableCellComparator
|
|
22
|
+
from holado_core.common.tables.comparators.table_row_comparator import TableRowComparator
|
|
23
|
+
from holado_core.common.tools.tools import Tools
|
|
24
|
+
from holado_core.common.tables.comparators.table_with_header_comparator import TableWithHeaderComparator
|
|
25
|
+
|
|
26
|
+
logger = logging.getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class TableWithHeader(Table):
|
|
30
|
+
|
|
31
|
+
def __init__(self):
|
|
32
|
+
super().__init__()
|
|
33
|
+
|
|
34
|
+
self.__header = TableRow()
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def header(self):
|
|
38
|
+
return self.__header
|
|
39
|
+
|
|
40
|
+
@header.setter
|
|
41
|
+
def header(self, header):
|
|
42
|
+
self.__header = header
|
|
43
|
+
|
|
44
|
+
@Table.nb_columns.getter # @UndefinedVariable
|
|
45
|
+
def nb_columns(self):
|
|
46
|
+
return len(self.header)
|
|
47
|
+
|
|
48
|
+
def __copy__(self):
|
|
49
|
+
res = super().__copy__()
|
|
50
|
+
|
|
51
|
+
# Copy header
|
|
52
|
+
res.header = copy.copy(self.header)
|
|
53
|
+
|
|
54
|
+
return res
|
|
55
|
+
|
|
56
|
+
def set_header(self, row=None, cells=None, cells_content=None):
|
|
57
|
+
if row is not None:
|
|
58
|
+
self.header = row
|
|
59
|
+
else:
|
|
60
|
+
self.header = TableRow(cells=cells, cells_content=cells_content)
|
|
61
|
+
|
|
62
|
+
def add_row(self, row=None, cells=None, cells_content=None, contents_by_colname: dict =None, **kwargs):
|
|
63
|
+
# Manage super call
|
|
64
|
+
if contents_by_colname is None:
|
|
65
|
+
return super().add_row(row=row, cells=cells, cells_content=cells_content, **kwargs)
|
|
66
|
+
|
|
67
|
+
# Verify column names
|
|
68
|
+
for colname in contents_by_colname:
|
|
69
|
+
if not self.has_column(colname, raise_exception=False):
|
|
70
|
+
raise FunctionalException(f"In parameter 'values_by_colname', the column name '{colname}' is not in table header")
|
|
71
|
+
|
|
72
|
+
# Add row
|
|
73
|
+
row_contents = [contents_by_colname[cn] if cn in contents_by_colname else None for cn in self.get_column_names()]
|
|
74
|
+
return self.add_row(cells_content=row_contents, **kwargs)
|
|
75
|
+
|
|
76
|
+
def extend(self, table, copy_method=None, **kwargs):
|
|
77
|
+
# Verify table headers are identical
|
|
78
|
+
comparator = TableWithHeaderComparator()
|
|
79
|
+
comparator.equals_headers(table, self)
|
|
80
|
+
|
|
81
|
+
super().extend(table, copy_method, **kwargs)
|
|
82
|
+
|
|
83
|
+
def represent(self, indent = 0, limit_rows = -1, value_prefix = None, value_postfix = None):
|
|
84
|
+
res_list = []
|
|
85
|
+
|
|
86
|
+
res_list.append(self.header.represent(indent, value_prefix=value_prefix, value_postfix=value_postfix))
|
|
87
|
+
res_list.append("\n")
|
|
88
|
+
|
|
89
|
+
res_list.extend( super().represent(indent, limit_rows=limit_rows) )
|
|
90
|
+
|
|
91
|
+
return "".join(res_list)
|
|
92
|
+
|
|
93
|
+
def get_column(self, index=None, name=None, **kwargs):
|
|
94
|
+
if name is not None:
|
|
95
|
+
index = self.get_column_index(name)
|
|
96
|
+
return super().get_column(index, **kwargs)
|
|
97
|
+
|
|
98
|
+
def get_column_names(self):
|
|
99
|
+
return [cell.string_content for cell in self.header]
|
|
100
|
+
|
|
101
|
+
def get_column_indexes_by_string_content(self):
|
|
102
|
+
return {cell.string_content : index for index, cell in enumerate(self.header)}
|
|
103
|
+
|
|
104
|
+
def get_column_index(self, name):
|
|
105
|
+
indexes = self.get_column_indexes_by_string_content()
|
|
106
|
+
if name in indexes:
|
|
107
|
+
return indexes[name]
|
|
108
|
+
else:
|
|
109
|
+
raise FunctionalException(f"Table has no column named '{name}' (existing column names: {self.header.represent()})")
|
|
110
|
+
|
|
111
|
+
def has_column(self, name, raise_exception=True):
|
|
112
|
+
try:
|
|
113
|
+
self.get_column_index(name)
|
|
114
|
+
except FunctionalException as exc:
|
|
115
|
+
if raise_exception:
|
|
116
|
+
raise exc
|
|
117
|
+
else:
|
|
118
|
+
return False
|
|
119
|
+
else:
|
|
120
|
+
return True
|
|
121
|
+
|
|
122
|
+
def add_column(self, col=None, cells=None, cells_content=None, name=None, **kwargs):
|
|
123
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
124
|
+
logger.debug(f"add_column({col=}, {cells=}, {cells_content=}, {name=})")
|
|
125
|
+
self.header.add_cell(content=name, **kwargs)
|
|
126
|
+
super().add_column(col=col, cells=cells, cells_content=cells_content, **kwargs)
|
|
127
|
+
|
|
128
|
+
def remove_column(self, index=None, name=None, **kwargs):
|
|
129
|
+
if name is not None:
|
|
130
|
+
index = self.get_column_index(name)
|
|
131
|
+
self.header.remove_cell(index, **kwargs)
|
|
132
|
+
return super().remove_column(index, **kwargs)
|
|
133
|
+
|
|
134
|
+
def switch_columns(self, index_1=None, index_2=None, name_1=None, name_2=None, **kwargs):
|
|
135
|
+
if name_1 is not None:
|
|
136
|
+
index_1 = self.get_column_index(name_1)
|
|
137
|
+
if name_2 is not None:
|
|
138
|
+
index_2 = self.get_column_index(name_2)
|
|
139
|
+
if index_1 == index_2:
|
|
140
|
+
raise TechnicalException(f"The two indexes are equal (index = {index_1})")
|
|
141
|
+
|
|
142
|
+
self.header.switch_cells(index_1, index_2, **kwargs)
|
|
143
|
+
super().switch_columns(index_1, index_2, **kwargs)
|
|
144
|
+
|
|
145
|
+
def sort(self, indexes=None, names=None, reverse=False, **kwargs):
|
|
146
|
+
"""Sort table rows according to indexes or column names order."""
|
|
147
|
+
if names:
|
|
148
|
+
indexes = tuple(self.get_column_index(name) for name in names)
|
|
149
|
+
super().sort(indexes=indexes, reverse=reverse, **kwargs)
|
|
150
|
+
|
|
151
|
+
def is_sorted(self, indexes=None, names=None, reverse=False, **kwargs): # @UnusedVariable
|
|
152
|
+
"""Check if table rows are sorted according to indexes or column names order."""
|
|
153
|
+
if names:
|
|
154
|
+
indexes = tuple(self.get_column_index(name) for name in names)
|
|
155
|
+
return super().is_sorted(indexes=indexes, reverse=reverse, **kwargs)
|
|
156
|
+
|
|
157
|
+
def order_columns(self, indexes=None, names=None, **kwargs):
|
|
158
|
+
if names:
|
|
159
|
+
indexes = tuple(self.get_column_index(name) for name in names)
|
|
160
|
+
super().order_columns(indexes=indexes, **kwargs)
|
|
161
|
+
|
|
162
|
+
def remove_rows_verifying(self, expected_table, table_comparator, keep_rows=False, **kwargs):
|
|
163
|
+
"""
|
|
164
|
+
Remove rows verifying expected values.
|
|
165
|
+
Parameter 'expected_table' has to refer all possible columns.
|
|
166
|
+
|
|
167
|
+
Remove rows that are equals compared to at least one line of expected_table.
|
|
168
|
+
If keep_rows is True, keep the rows rather than remove them.
|
|
169
|
+
"""
|
|
170
|
+
|
|
171
|
+
# Verifying header are matching
|
|
172
|
+
table_comparator.equals_headers(self, expected_table, raise_exception=True)
|
|
173
|
+
|
|
174
|
+
# Remove rows
|
|
175
|
+
super().remove_rows_verifying(expected_table, table_comparator, keep_rows=keep_rows, **kwargs)
|
|
176
|
+
|
|
177
|
+
def remove_rows_only_verifying(self, expected_table, table_comparator, keep_rows=False, **kwargs): # @UnusedVariable
|
|
178
|
+
"""
|
|
179
|
+
Remove rows verifying expected values.
|
|
180
|
+
Parameter 'expected_table' can contain only some columns.
|
|
181
|
+
|
|
182
|
+
Remove rows that are equals compared to at least one line of expected_table.
|
|
183
|
+
If keep_rows is True, keep the rows rather than remove them.
|
|
184
|
+
"""
|
|
185
|
+
col_indexes = [self.get_column_index(hcell.string_content) for hcell in expected_table.header]
|
|
186
|
+
n = 0
|
|
187
|
+
while n < self.nb_rows:
|
|
188
|
+
comp_row = copy.copy(self.get_row(n, **kwargs))
|
|
189
|
+
# logger.info(f"+++++++++++++ line {n} - comp_row: {comp_row.represent(0)}")
|
|
190
|
+
comp_row.order_cells(indexes=col_indexes)
|
|
191
|
+
# logger.info(f"+++++++++++++ line {n} - comp_row: {comp_row.represent(0)}")
|
|
192
|
+
comp_row.keep_cells(indexes=range(len(col_indexes)))
|
|
193
|
+
# logger.info(f"+++++++++++++ line {n} - comp_row: {comp_row.represent(0)}")
|
|
194
|
+
|
|
195
|
+
found = False
|
|
196
|
+
for i in range(expected_table.nb_rows):
|
|
197
|
+
found = table_comparator.row_comparator.equals(comp_row, expected_table.get_row(i), raise_exception=False);
|
|
198
|
+
if found:
|
|
199
|
+
break
|
|
200
|
+
|
|
201
|
+
# logger.info(f"+++++++++++++ line {n}: {found}")
|
|
202
|
+
if found ^ keep_rows:
|
|
203
|
+
self.remove_row(n);
|
|
204
|
+
else:
|
|
205
|
+
n += 1
|
|
206
|
+
|
|
207
|
+
def remove_rows_duplicated(self, row_comparator=None, column_names=None, **kwargs):
|
|
208
|
+
"""
|
|
209
|
+
Remove rows that are duplicates of previous rows.
|
|
210
|
+
If row_comparator is None, column_names is used to create a row comparator that compares only given columns.
|
|
211
|
+
"""
|
|
212
|
+
if row_comparator is None and column_names is None:
|
|
213
|
+
raise TechnicalException("If parameter 'row_comparator' is not defined, at least column_names must be defined")
|
|
214
|
+
|
|
215
|
+
if row_comparator is None and column_names is not None:
|
|
216
|
+
cells_comparators = [TableCellComparator() if cn in column_names else None for cn in self.get_column_names()]
|
|
217
|
+
row_comparator = TableRowComparator(cells_comparators=cells_comparators)
|
|
218
|
+
|
|
219
|
+
super().remove_rows_duplicated(row_comparator=row_comparator, **kwargs)
|
|
220
|
+
|
|
221
|
+
def extract_col(self, col_name, **kwargs):
|
|
222
|
+
"""
|
|
223
|
+
Builds a new TableWithHeader from column col_name
|
|
224
|
+
"""
|
|
225
|
+
if self.has_column(col_name, raise_exception=True):
|
|
226
|
+
returnTable = TableWithHeader()
|
|
227
|
+
returnTable.header = TableRow(cells_content=[col_name])
|
|
228
|
+
|
|
229
|
+
col = self.get_column(name=col_name, **kwargs)
|
|
230
|
+
for content in col.cells_content:
|
|
231
|
+
returnTable.add_row(cells_content=content, **kwargs)
|
|
232
|
+
|
|
233
|
+
return returnTable
|
|
234
|
+
|
|
235
|
+
def rename_column(self, old_name, new_name, **kwargs):
|
|
236
|
+
index=self.get_column_index(old_name)
|
|
237
|
+
|
|
238
|
+
self.__header.get_cell(index).content = new_name
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
File without changes
|
|
@@ -0,0 +1,151 @@
|
|
|
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 abc
|
|
16
|
+
from enum import Enum
|
|
17
|
+
from holado_core.common.exceptions.verify_exception import VerifyException
|
|
18
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
19
|
+
from holado_python.standard_library.typing import Typing
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class CompareOperator(str, Enum):
|
|
25
|
+
Different = ("!=", "Equal", "Different")
|
|
26
|
+
Equal = ("==", "Different", "Equal")
|
|
27
|
+
Inferior = ("<", "SuperiorOrEqual", "Superior")
|
|
28
|
+
InferiorOrEqual = ("<=", "Superior", "SuperiorOrEqual")
|
|
29
|
+
Superior = (">", "InferiorOrEqual", "Inferior")
|
|
30
|
+
SuperiorOrEqual = (">=", "Inferior", "InferiorOrEqual")
|
|
31
|
+
|
|
32
|
+
def __new__(cls, value, not_name, switch_name):
|
|
33
|
+
obj = str.__new__(cls, [value])
|
|
34
|
+
obj._value_ = value
|
|
35
|
+
obj.__not_name = not_name
|
|
36
|
+
obj.__switch_name = switch_name
|
|
37
|
+
return obj
|
|
38
|
+
|
|
39
|
+
@property
|
|
40
|
+
def not_(self):
|
|
41
|
+
return CompareOperator[self.__not_name]
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def switch(self):
|
|
45
|
+
return CompareOperator[self.__switch_name]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class Comparator(object):
|
|
49
|
+
"""
|
|
50
|
+
Mother class of comparator objects.
|
|
51
|
+
"""
|
|
52
|
+
__metaclass__ = abc.ABCMeta
|
|
53
|
+
|
|
54
|
+
def __init__(self, type_description):
|
|
55
|
+
self.__type_description = type_description
|
|
56
|
+
self.__do_convert_input1 = True
|
|
57
|
+
self.__do_convert_input2 = True
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def do_convert_input1(self):
|
|
61
|
+
return self.__do_convert_input1
|
|
62
|
+
|
|
63
|
+
@do_convert_input1.setter
|
|
64
|
+
def do_convert_input1(self, value: bool):
|
|
65
|
+
self.__do_convert_input1 = value
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def do_convert_input2(self):
|
|
69
|
+
return self.__do_convert_input2
|
|
70
|
+
|
|
71
|
+
@do_convert_input2.setter
|
|
72
|
+
def do_convert_input2(self, value: bool):
|
|
73
|
+
self.__do_convert_input2 = value
|
|
74
|
+
|
|
75
|
+
def equals(self, obj_1, obj_2, is_obtained_vs_expected = True, raise_exception = True):
|
|
76
|
+
"""
|
|
77
|
+
Compare by equality.
|
|
78
|
+
"""
|
|
79
|
+
return self.compare(obj_1, CompareOperator.Equal, obj_2, is_obtained_vs_expected, raise_exception, redirect_to_equals=False)
|
|
80
|
+
|
|
81
|
+
def compare(self, obj_1, operator: CompareOperator, obj_2, is_obtained_vs_expected = True, raise_exception = True, redirect_to_equals=True):
|
|
82
|
+
"""
|
|
83
|
+
Compare by given CompareOperator.
|
|
84
|
+
"""
|
|
85
|
+
obj_1, obj_2 = self._convert_inputs(obj_1, obj_2, is_obtained_vs_expected)
|
|
86
|
+
return self._compare_by_operator(obj_1, operator, obj_2, is_obtained_vs_expected, raise_exception, redirect_to_equals=redirect_to_equals)
|
|
87
|
+
|
|
88
|
+
def _convert_inputs(self, obj_1, obj_2, is_obtained_vs_expected):
|
|
89
|
+
if self.do_convert_input1:
|
|
90
|
+
obj_1 = self._convert_input1(obj_1, self._get_name_1(is_obtained_vs_expected))
|
|
91
|
+
if self.do_convert_input2:
|
|
92
|
+
obj_2 = self._convert_input2(obj_2, self._get_name_2(is_obtained_vs_expected))
|
|
93
|
+
return [obj_1, obj_2]
|
|
94
|
+
|
|
95
|
+
def _convert_input1(self, obj, name):
|
|
96
|
+
return self._convert_input(obj, name)
|
|
97
|
+
|
|
98
|
+
def _convert_input2(self, obj, name):
|
|
99
|
+
return self._convert_input(obj, name)
|
|
100
|
+
|
|
101
|
+
def _convert_input(self, obj, name):
|
|
102
|
+
"""
|
|
103
|
+
Method applied to compared objects before comparison.
|
|
104
|
+
To compare similar types that are not comparable directly, override this method to convert objects in comparable types
|
|
105
|
+
"""
|
|
106
|
+
# By default no conversion is applied
|
|
107
|
+
return obj
|
|
108
|
+
|
|
109
|
+
def _compare_by_operator(self, obj_1, operator: CompareOperator, obj_2, is_obtained_vs_expected = True, raise_exception = True, redirect_to_equals=True):
|
|
110
|
+
if redirect_to_equals and operator == CompareOperator.Equal:
|
|
111
|
+
return self.equals(obj_1, obj_2, is_obtained_vs_expected, raise_exception)
|
|
112
|
+
|
|
113
|
+
res = self._compare_result(obj_1, operator, obj_2)
|
|
114
|
+
|
|
115
|
+
# logger.debug("[{}] obj_1 equals obj_2 => {}\n obj_1 = [{}]\n obj_2 = [{}]".format(Typing.get_object_class(self).__name__, res, obj_1, obj_2))
|
|
116
|
+
if not res and raise_exception:
|
|
117
|
+
raise VerifyException(f"Match failure, {self.__type_description} values don't verify expression [{self._get_name_1(is_obtained_vs_expected)} {operator.value} {self._get_name_2(is_obtained_vs_expected)}]:\n {self._get_name_1(is_obtained_vs_expected)}: {obj_1} (type: {Typing.get_object_class_fullname(obj_1)})\n {self._get_name_2(is_obtained_vs_expected)}: {obj_2} (type: {Typing.get_object_class_fullname(obj_2)})")
|
|
118
|
+
return res
|
|
119
|
+
|
|
120
|
+
def _compare_result(self, obj_1, operator: CompareOperator, obj_2):
|
|
121
|
+
if operator == CompareOperator.Different:
|
|
122
|
+
return (obj_1 != obj_2)
|
|
123
|
+
elif operator == CompareOperator.Equal:
|
|
124
|
+
return (obj_1 == obj_2)
|
|
125
|
+
elif operator == CompareOperator.Inferior:
|
|
126
|
+
return (obj_1 < obj_2)
|
|
127
|
+
elif operator == CompareOperator.InferiorOrEqual:
|
|
128
|
+
return (obj_1 <= obj_2)
|
|
129
|
+
elif operator == CompareOperator.Superior:
|
|
130
|
+
return (obj_1 > obj_2)
|
|
131
|
+
elif operator == CompareOperator.SuperiorOrEqual:
|
|
132
|
+
return (obj_1 >= obj_2)
|
|
133
|
+
else:
|
|
134
|
+
raise TechnicalException(f"Unmanaged compare operator {operator}")
|
|
135
|
+
|
|
136
|
+
def _get_name_1(self, is_obtained_vs_expected):
|
|
137
|
+
if is_obtained_vs_expected == True:
|
|
138
|
+
return "obtained"
|
|
139
|
+
elif is_obtained_vs_expected == False:
|
|
140
|
+
return "expected"
|
|
141
|
+
else:
|
|
142
|
+
return "1"
|
|
143
|
+
|
|
144
|
+
def _get_name_2(self, is_obtained_vs_expected):
|
|
145
|
+
if is_obtained_vs_expected == True:
|
|
146
|
+
return "expected"
|
|
147
|
+
elif is_obtained_vs_expected == False:
|
|
148
|
+
return "obtained"
|
|
149
|
+
else:
|
|
150
|
+
return "2"
|
|
151
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
#################################################
|
|
3
|
+
# HolAdo (Holistic Automation do)
|
|
4
|
+
#
|
|
5
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
8
|
+
#
|
|
9
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
|
+
|
|
11
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
12
|
+
#################################################
|
|
13
|
+
|
|
14
|
+
from holado_core.common.tools.comparators.comparator import Comparator
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ObjectComparator(Comparator):
|
|
18
|
+
|
|
19
|
+
def __init__(self):
|
|
20
|
+
super().__init__("object")
|
|
21
|
+
|
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
14
|
+
import io
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Converter(object):
|
|
19
|
+
|
|
20
|
+
@classmethod
|
|
21
|
+
def is_boolean(cls, value):
|
|
22
|
+
return isinstance(value, bool)\
|
|
23
|
+
or isinstance(value, str) and (value == "False" or value == "True")
|
|
24
|
+
|
|
25
|
+
@classmethod
|
|
26
|
+
def to_boolean(cls, value):
|
|
27
|
+
if isinstance(value, bool):
|
|
28
|
+
return value
|
|
29
|
+
elif isinstance(value, str):
|
|
30
|
+
if value == "True":
|
|
31
|
+
return True
|
|
32
|
+
elif value == "False":
|
|
33
|
+
return False
|
|
34
|
+
else:
|
|
35
|
+
raise TechnicalException(f"String value '{value}' is not a boolean")
|
|
36
|
+
else:
|
|
37
|
+
from holado_python.standard_library.typing import Typing
|
|
38
|
+
raise TechnicalException(f"Value [{value}] (type: {Typing.get_object_class_fullname(value)}) is not a boolean")
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def is_dict(cls, obj):
|
|
42
|
+
return isinstance(obj, dict)
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def to_dict(cls, value):
|
|
46
|
+
if isinstance(value, dict):
|
|
47
|
+
return value
|
|
48
|
+
else:
|
|
49
|
+
return dict(value)
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def is_list(cls, obj):
|
|
53
|
+
return isinstance(obj, list)
|
|
54
|
+
|
|
55
|
+
@classmethod
|
|
56
|
+
def to_list(cls, value):
|
|
57
|
+
if value is None:
|
|
58
|
+
return None
|
|
59
|
+
elif isinstance(value, list):
|
|
60
|
+
return value
|
|
61
|
+
elif cls.is_iterable(value):
|
|
62
|
+
return list(value)
|
|
63
|
+
else:
|
|
64
|
+
from holado_python.standard_library.typing import Typing
|
|
65
|
+
raise TechnicalException(f"Unmanaged convertion to list of object of type {Typing.get_object_class_fullname(value)}")
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def is_integer(cls, value):
|
|
69
|
+
try:
|
|
70
|
+
int(value)
|
|
71
|
+
except ValueError:
|
|
72
|
+
return False
|
|
73
|
+
else:
|
|
74
|
+
return True
|
|
75
|
+
|
|
76
|
+
@classmethod
|
|
77
|
+
def to_integer(cls, value):
|
|
78
|
+
if isinstance(value, int):
|
|
79
|
+
return value
|
|
80
|
+
else:
|
|
81
|
+
return int(value)
|
|
82
|
+
|
|
83
|
+
@classmethod
|
|
84
|
+
def is_float(cls, value):
|
|
85
|
+
try:
|
|
86
|
+
float(value)
|
|
87
|
+
except ValueError:
|
|
88
|
+
return False
|
|
89
|
+
else:
|
|
90
|
+
return True
|
|
91
|
+
|
|
92
|
+
@classmethod
|
|
93
|
+
def to_float(cls, value):
|
|
94
|
+
if isinstance(value, float):
|
|
95
|
+
return value
|
|
96
|
+
else:
|
|
97
|
+
return float(value)
|
|
98
|
+
|
|
99
|
+
@classmethod
|
|
100
|
+
def is_primitive(cls, obj):
|
|
101
|
+
from holado_python.standard_library.typing import Typing
|
|
102
|
+
return (not hasattr(obj, '__dict__') or type(obj) == type) and not Typing.is_NamedTuple(obj)
|
|
103
|
+
|
|
104
|
+
@classmethod
|
|
105
|
+
def is_iterable(cls, obj):
|
|
106
|
+
try:
|
|
107
|
+
_ = (e for e in obj)
|
|
108
|
+
except TypeError:
|
|
109
|
+
return False
|
|
110
|
+
else:
|
|
111
|
+
return True
|
|
112
|
+
|
|
113
|
+
@classmethod
|
|
114
|
+
def is_file_like(cls, obj):
|
|
115
|
+
return isinstance(obj, io.TextIOBase) or isinstance(obj, io.BufferedIOBase) or isinstance(obj, io.RawIOBase) or isinstance(obj, io.IOBase)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|