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,27 @@
|
|
|
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
|
+
|
|
15
|
+
|
|
16
|
+
from builtins import super
|
|
17
|
+
from holado_core.common.tables.comparators.table_row_comparator import TableRowComparator
|
|
18
|
+
from holado_value.common.tables.comparators.table_2_value_table_cell_comparator import Table2ValueTable_CellComparator
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Table2ValueTable_RowComparator(TableRowComparator):
|
|
22
|
+
def __init__(self, cell_comparator=None , **kwargs):
|
|
23
|
+
if cell_comparator is None:
|
|
24
|
+
cell_comparator = Table2ValueTable_CellComparator(**kwargs)
|
|
25
|
+
super().__init__(cell_comparator=cell_comparator)
|
|
26
|
+
|
|
27
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
|
|
15
|
+
|
|
16
|
+
from builtins import super
|
|
17
|
+
from holado_value.common.tables.comparators.table_2_value_table_row_comparator import Table2ValueTable_RowComparator
|
|
18
|
+
from holado_core.common.tables.comparators.table_with_header_comparator import TableWithHeaderComparator
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Table2ValueTable_WithHeaderComparator(TableWithHeaderComparator):
|
|
22
|
+
def __init__(self, header_comparator=None, row_comparator=None, cell_comparator=None , **kwargs):
|
|
23
|
+
if row_comparator is None:
|
|
24
|
+
row_comparator = Table2ValueTable_RowComparator(cell_comparator=cell_comparator, **kwargs)
|
|
25
|
+
super().__init__(header_comparator=header_comparator, row_comparator=row_comparator, cell_comparator=None)
|
|
26
|
+
|
|
27
|
+
|
|
@@ -0,0 +1,267 @@
|
|
|
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
|
+
|
|
15
|
+
|
|
16
|
+
from holado_value.common.tables.value_table import ValueTable
|
|
17
|
+
from holado_value.common.tables.value_table_with_header import ValueTableWithHeader
|
|
18
|
+
from holado_core.common.tables.table_row import TableRow
|
|
19
|
+
from holado_core.common.tables.converters.table_converter import TableConverter
|
|
20
|
+
from holado_core.common.tables.table_with_header import TableWithHeader
|
|
21
|
+
from holado_core.common.tables.table import Table
|
|
22
|
+
import copy
|
|
23
|
+
import logging
|
|
24
|
+
from holado_value.common.tables.value_table_manager import ValueTableManager
|
|
25
|
+
from holado_core.common.exceptions.functional_exception import FunctionalException
|
|
26
|
+
from holado_value.common.tools.value_types import ValueTypes
|
|
27
|
+
from holado_core.common.tools.tools import Tools
|
|
28
|
+
from holado_json.ipc.json_converter import JsonConverter
|
|
29
|
+
from holado_python.standard_library.typing import Typing
|
|
30
|
+
from holado_data.data.generator.base import BaseGenerator
|
|
31
|
+
|
|
32
|
+
logger = logging.getLogger(__name__)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ValueTableConverter(TableConverter):
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
def convert_table_2_value_table(cls, table, do_eval_once=True):
|
|
39
|
+
if isinstance(table, TableWithHeader):
|
|
40
|
+
res = ValueTableWithHeader()
|
|
41
|
+
res.header = copy.copy(table.header)
|
|
42
|
+
else:
|
|
43
|
+
res = ValueTable()
|
|
44
|
+
for row in table:
|
|
45
|
+
cells_content = [f"'{cc}'" if isinstance(cc, str) else f"{cc}" for cc in row.cells_content]
|
|
46
|
+
res.add_row(cells_content=cells_content, do_eval_once=do_eval_once)
|
|
47
|
+
return res
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def convert_value_table_2_table(cls, table):
|
|
51
|
+
ValueTableManager.verify_is_value_table(table)
|
|
52
|
+
|
|
53
|
+
if isinstance(table, ValueTableWithHeader):
|
|
54
|
+
res = TableWithHeader()
|
|
55
|
+
res.header = copy.copy(table.header)
|
|
56
|
+
else:
|
|
57
|
+
res = Table()
|
|
58
|
+
for row in table:
|
|
59
|
+
cells_content = row.cells_value
|
|
60
|
+
res.add_row(cells_content=cells_content)
|
|
61
|
+
return res
|
|
62
|
+
|
|
63
|
+
@classmethod
|
|
64
|
+
def convert_table_with_header_to_dict_list(cls, table, as_generator=False):
|
|
65
|
+
if not ValueTableManager.is_value_table(table):
|
|
66
|
+
return TableConverter.convert_table_with_header_to_dict_list(table, as_generator=as_generator)
|
|
67
|
+
|
|
68
|
+
if as_generator:
|
|
69
|
+
class TableWithHeader2DictGenerator(BaseGenerator):
|
|
70
|
+
def __init__(self, table):
|
|
71
|
+
super().__init__(name="table with header to dict generator")
|
|
72
|
+
self.__table = table
|
|
73
|
+
self.__index_by_name = table.get_column_indexes_by_string_content()
|
|
74
|
+
self.__table_rows_iter = iter(self.__table.rows)
|
|
75
|
+
|
|
76
|
+
def __next__(self):
|
|
77
|
+
row = next(self.__table_rows_iter)
|
|
78
|
+
return {name: row.get_cell(index).value for name, index in self.__index_by_name.items()}
|
|
79
|
+
|
|
80
|
+
return TableWithHeader2DictGenerator(table)
|
|
81
|
+
else:
|
|
82
|
+
# index_by_name = table.get_column_indexes_by_string_content()
|
|
83
|
+
#
|
|
84
|
+
# res = []
|
|
85
|
+
# for row in table.rows:
|
|
86
|
+
# new_dict = {name: row.get_cell(index).value for name, index in index_by_name.items()}
|
|
87
|
+
# res.append(new_dict)
|
|
88
|
+
#
|
|
89
|
+
# return res
|
|
90
|
+
gen = cls.convert_table_with_header_to_dict_list(table, as_generator=True)
|
|
91
|
+
return [e for e in gen]
|
|
92
|
+
|
|
93
|
+
@classmethod
|
|
94
|
+
def convert_table_2_list_of_tuples(cls, table, as_generator=False):
|
|
95
|
+
if not ValueTableManager.is_value_table(table):
|
|
96
|
+
return TableConverter.convert_table_2_list_of_tuples(table, as_generator=as_generator)
|
|
97
|
+
|
|
98
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
99
|
+
logger.debug("Converting table to a list of tuples...")
|
|
100
|
+
if as_generator:
|
|
101
|
+
class Table2TupleGenerator(BaseGenerator):
|
|
102
|
+
def __init__(self, table):
|
|
103
|
+
super().__init__(name="table with header to dict generator")
|
|
104
|
+
self.__table = table
|
|
105
|
+
self.__table_rows_iter = iter(self.__table.rows)
|
|
106
|
+
|
|
107
|
+
def __next__(self):
|
|
108
|
+
row = next(self.__table_rows_iter)
|
|
109
|
+
return tuple((cell.value for cell in row.cells))
|
|
110
|
+
|
|
111
|
+
return Table2TupleGenerator(table)
|
|
112
|
+
else:
|
|
113
|
+
# return [tuple((cell.content for cell in row.cells)) for row in table.rows]
|
|
114
|
+
gen = cls.convert_table_2_list_of_tuples(table, as_generator=True)
|
|
115
|
+
return [e for e in gen]
|
|
116
|
+
|
|
117
|
+
@classmethod
|
|
118
|
+
def convert_name_value_table_2_dict(cls, table, with_original_value_content = False):
|
|
119
|
+
if not ValueTableManager.is_value_table(table):
|
|
120
|
+
return TableConverter.convert_name_value_table_2_dict(table)
|
|
121
|
+
|
|
122
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
123
|
+
logger.trace(f"Converting Name/Value table to dict (table = {table})")
|
|
124
|
+
|
|
125
|
+
res = {}
|
|
126
|
+
if table is not None:
|
|
127
|
+
# Verify table structure
|
|
128
|
+
ValueTableManager.verify_table_is_name_value_table(table)
|
|
129
|
+
ValueTableManager.verify_is_value_table(table)
|
|
130
|
+
|
|
131
|
+
for row in table.rows:
|
|
132
|
+
if row.get_cell(1).value_type not in [ValueTypes.NotApplicable]:
|
|
133
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
134
|
+
logger.trace("Converting row (%s)", row)
|
|
135
|
+
|
|
136
|
+
name = row.get_cell(0).value
|
|
137
|
+
if with_original_value_content:
|
|
138
|
+
value = row.get_cell(1).content
|
|
139
|
+
else:
|
|
140
|
+
value = row.get_cell(1).value
|
|
141
|
+
|
|
142
|
+
if name in res:
|
|
143
|
+
raise FunctionalException("Name '{}' appears several times in table".format(name))
|
|
144
|
+
else:
|
|
145
|
+
res[name] = value
|
|
146
|
+
|
|
147
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
148
|
+
logger.debug(f"Converting Name/Value table to dict (table = {table}) => {res}")
|
|
149
|
+
return res
|
|
150
|
+
|
|
151
|
+
@classmethod
|
|
152
|
+
def convert_name_value_table_2_list_and_dict(cls, table, with_original_value_content = False):
|
|
153
|
+
# if not ValueTableManager.is_value_table(table):
|
|
154
|
+
# return TableConverter.convert_name_value_table_2_list_and_dict(table)
|
|
155
|
+
|
|
156
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
157
|
+
logger.trace(f"Converting Name/Value table to list and dict (table = {table})")
|
|
158
|
+
|
|
159
|
+
# Verify table structure
|
|
160
|
+
ValueTableManager.verify_table_is_name_value_table(table)
|
|
161
|
+
ValueTableManager.verify_is_value_table(table)
|
|
162
|
+
|
|
163
|
+
res_list = []
|
|
164
|
+
res_dict = {}
|
|
165
|
+
for row in table.rows:
|
|
166
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
167
|
+
logger.trace("Converting row (%s)", row)
|
|
168
|
+
|
|
169
|
+
name = row.get_cell(0).value
|
|
170
|
+
if with_original_value_content:
|
|
171
|
+
value = row.get_cell(1).content
|
|
172
|
+
else:
|
|
173
|
+
value = row.get_cell(1).value
|
|
174
|
+
|
|
175
|
+
if name and len(name) > 0:
|
|
176
|
+
if name in res_dict:
|
|
177
|
+
raise FunctionalException("Name '{}' appears several times in table".format(name))
|
|
178
|
+
else:
|
|
179
|
+
res_dict[name] = value
|
|
180
|
+
else:
|
|
181
|
+
res_list.append(value)
|
|
182
|
+
|
|
183
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
184
|
+
logger.debug(f"Converting Name/Value table to list and dict (table = {table}) => {res_list} ; {res_dict}")
|
|
185
|
+
return [res_list, res_dict]
|
|
186
|
+
|
|
187
|
+
@classmethod
|
|
188
|
+
def convert_name_value_table_2_json_object(cls, table, converter=None):
|
|
189
|
+
if not ValueTableManager.is_value_table(table):
|
|
190
|
+
return TableConverter.convert_name_value_table_2_json_object(table, converter=converter)
|
|
191
|
+
|
|
192
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
193
|
+
logger.trace(f"Converting Name/Value table to json object (table = {table})")
|
|
194
|
+
if converter is None:
|
|
195
|
+
converter = JsonConverter()
|
|
196
|
+
|
|
197
|
+
# Verify table structure
|
|
198
|
+
ValueTableManager.verify_table_is_name_value_table(table)
|
|
199
|
+
ValueTableManager.verify_is_value_table(table)
|
|
200
|
+
|
|
201
|
+
res = {}
|
|
202
|
+
for row in table.rows:
|
|
203
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
204
|
+
logger.trace("Converting row (%s)", row)
|
|
205
|
+
|
|
206
|
+
if row.get_cell(1).value_type in [ValueTypes.NotApplicable, ValueTypes.Merged]:
|
|
207
|
+
pass
|
|
208
|
+
elif ValueTypes.is_string(row.get_cell(1).value_type):
|
|
209
|
+
name = row.get_cell(0).value
|
|
210
|
+
value = row.get_cell(1).value
|
|
211
|
+
|
|
212
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
213
|
+
|
|
214
|
+
logger.trace(f"Adding for name '{name}' string value [{value}] (type: {Typing.get_object_class_fullname(value)})")
|
|
215
|
+
cls._fill_json_dict(res, name, value)
|
|
216
|
+
else:
|
|
217
|
+
name = row.get_cell(0).value
|
|
218
|
+
value = row.get_cell(1).value
|
|
219
|
+
value = converter.to_json(value)
|
|
220
|
+
|
|
221
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
222
|
+
|
|
223
|
+
logger.trace(f"Adding for name '{name}' json value [{value}] (type: {Typing.get_object_class_fullname(value)})")
|
|
224
|
+
cls._fill_json_dict(res, name, value)
|
|
225
|
+
|
|
226
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
227
|
+
logger.debug(f"Converting Name/Value table to json object (table = {table}) => {res}")
|
|
228
|
+
return res
|
|
229
|
+
|
|
230
|
+
@classmethod
|
|
231
|
+
def convert_x_name_value_table_2_list_x_values(cls, table, x_name, with_original_value_content = False):
|
|
232
|
+
# if not ValueTableManager.is_value_table(table):
|
|
233
|
+
# return TableConverter.convert_x_name_value_table_2_list_x_values(table, x_name)
|
|
234
|
+
|
|
235
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
236
|
+
logger.trace(f"Converting {x_name}/Name/Value table to list of {x_name} and values dict (table = {table})")
|
|
237
|
+
|
|
238
|
+
# Verify table structure
|
|
239
|
+
ValueTableManager.verify_table_is_x_name_value_table(table, x_name)
|
|
240
|
+
|
|
241
|
+
x_list = []
|
|
242
|
+
res_dict = {}
|
|
243
|
+
for row in table.rows:
|
|
244
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
245
|
+
logger.trace("Converting row (%s)", row)
|
|
246
|
+
|
|
247
|
+
x = row.get_cell(0).value
|
|
248
|
+
name = row.get_cell(1).value
|
|
249
|
+
if with_original_value_content:
|
|
250
|
+
value = row.get_cell(2).content
|
|
251
|
+
else:
|
|
252
|
+
value = row.get_cell(2).value
|
|
253
|
+
|
|
254
|
+
if x not in res_dict:
|
|
255
|
+
res_dict[x] = {}
|
|
256
|
+
x_list.append(x)
|
|
257
|
+
res_dict[x][name] = value
|
|
258
|
+
|
|
259
|
+
res = [{x_name:x, 'values':res_dict[x]} for x in x_list]
|
|
260
|
+
|
|
261
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
262
|
+
logger.debug(f"Converting {x_name}/Name/Value table to list of {x_name} and values dict (table = {table}) => {res}")
|
|
263
|
+
return res
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
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 import Table
|
|
16
|
+
from holado_value.common.tables.value_table_row import ValueTableRow
|
|
17
|
+
import logging
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ValueTable(Table):
|
|
23
|
+
def __init__(self):
|
|
24
|
+
super().__init__()
|
|
25
|
+
|
|
26
|
+
def _new_row(self, cells=None, cells_content=None, cells_value=None, **kwargs): # @UnusedVariable
|
|
27
|
+
return ValueTableRow(cells=cells, cells_content=cells_content, cells_value=cells_value, **kwargs)
|
|
28
|
+
|
|
29
|
+
|
|
@@ -0,0 +1,76 @@
|
|
|
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_cell import TableCell
|
|
16
|
+
import logging
|
|
17
|
+
from holado_value.common.tools.value import Value
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ValueTableCell(TableCell):
|
|
23
|
+
|
|
24
|
+
def __init__(self, cell_content, cell_value=None, do_eval_once=True):
|
|
25
|
+
"""
|
|
26
|
+
@summary: Constructor
|
|
27
|
+
@param cell_content: Cell content
|
|
28
|
+
@param cell_value: Cell value
|
|
29
|
+
@param do_eval_once: If cell value must be evaluated only at first value evaluation (ie at first call of value property) (default: True)
|
|
30
|
+
"""
|
|
31
|
+
super().__init__(cell_content)
|
|
32
|
+
|
|
33
|
+
self.__value = Value(original_value=cell_content, value=cell_value, do_eval_once=do_eval_once)
|
|
34
|
+
self.content = self.__value.original_value
|
|
35
|
+
|
|
36
|
+
def __eq__(self, other):
|
|
37
|
+
self._verify_valid_compared_object(other)
|
|
38
|
+
if isinstance(other, ValueTableCell):
|
|
39
|
+
return (self.value == other.value)
|
|
40
|
+
else:
|
|
41
|
+
return (self.value == other.content)
|
|
42
|
+
|
|
43
|
+
def __lt__(self, other):
|
|
44
|
+
self._verify_valid_compared_object(other)
|
|
45
|
+
if isinstance(other, ValueTableCell):
|
|
46
|
+
return (self.value < other.value)
|
|
47
|
+
else:
|
|
48
|
+
return (self.value < other.content)
|
|
49
|
+
|
|
50
|
+
@TableCell.string_content.getter # @UndefinedVariable
|
|
51
|
+
def string_content(self):
|
|
52
|
+
return self.__value.string_value
|
|
53
|
+
|
|
54
|
+
@property
|
|
55
|
+
def content_type(self):
|
|
56
|
+
return self.__value.original_value_type
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def value_type(self):
|
|
60
|
+
return self.__value.value_type
|
|
61
|
+
|
|
62
|
+
@property
|
|
63
|
+
def value(self):
|
|
64
|
+
return self.__value.value
|
|
65
|
+
|
|
66
|
+
@value.setter
|
|
67
|
+
def value(self, value):
|
|
68
|
+
self.__value = Value(original_value=None, value=value, do_eval_once=self.__value.do_eval_once)
|
|
69
|
+
self.content = self.__value.original_value
|
|
70
|
+
|
|
71
|
+
def get_value(self, raise_if_undefined=False):
|
|
72
|
+
return self.__value.get_value(raise_if_undefined=raise_if_undefined)
|
|
73
|
+
|
|
74
|
+
def represent(self, indent = 0, do_evaluation = False):
|
|
75
|
+
return self.__value.represent(indent, do_evaluation)
|
|
76
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
#################################################
|
|
3
|
+
# HolAdo (Holistic Automation do)
|
|
4
|
+
#
|
|
5
|
+
# (C) Copyright 2021-2025 by Eric Klumpp
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
8
|
+
#
|
|
9
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
|
+
|
|
11
|
+
# The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
|
|
12
|
+
#################################################
|
|
13
|
+
|
|
14
|
+
import logging
|
|
15
|
+
from holado_value.common.tables.value_table_with_header import ValueTableWithHeader
|
|
16
|
+
from holado_core.common.tables.table_manager import TableManager
|
|
17
|
+
from holado_core.common.tools.tools import Tools
|
|
18
|
+
from holado_value.common.tables.value_table import ValueTable
|
|
19
|
+
from holado_core.common.exceptions.verify_exception import VerifyException
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ValueTableManager(TableManager):
|
|
25
|
+
|
|
26
|
+
@classmethod
|
|
27
|
+
def is_value_table(cls, table):
|
|
28
|
+
return isinstance(table, ValueTable) or isinstance(table, ValueTableWithHeader)
|
|
29
|
+
|
|
30
|
+
@classmethod
|
|
31
|
+
def verify_is_value_table(cls, table, raise_exception=True):
|
|
32
|
+
res = cls.is_value_table(table)
|
|
33
|
+
|
|
34
|
+
if not res and raise_exception:
|
|
35
|
+
raise VerifyException(f"Table is not a ValueTable of ValueTableWithHeader (table type: {type(table)})")
|
|
36
|
+
return res
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def set_object_attributes_according_name_value_table(cls, obj, table):
|
|
40
|
+
if not cls.is_value_table(table):
|
|
41
|
+
super().set_object_attributes_according_name_value_table(obj, table)
|
|
42
|
+
|
|
43
|
+
# Verify table structure
|
|
44
|
+
cls.verify_table_is_name_value_table(table)
|
|
45
|
+
|
|
46
|
+
for row in table.rows:
|
|
47
|
+
setattr(obj, row.get_cell(0).value, row.get_cell(1).value)
|
|
48
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
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_value.common.tables.value_table_cell import ValueTableCell
|
|
16
|
+
from holado_core.common.tables.table_row import TableRow
|
|
17
|
+
import logging
|
|
18
|
+
from holado_core.common.tools.tools import Tools
|
|
19
|
+
from holado.common.handlers.undefined import undefined_value
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ValueTableRow(TableRow):
|
|
25
|
+
def __init__(self, cells=None, cells_content=None, cells_value=None, **kwargs):
|
|
26
|
+
super().__init__(cells=cells, cells_content=cells_content, **kwargs)
|
|
27
|
+
if cells_value is not None:
|
|
28
|
+
self.add_cells_from_values(cells_value, **kwargs)
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def cells_value(self):
|
|
32
|
+
return tuple(c.value for c in self.cells)
|
|
33
|
+
|
|
34
|
+
def _new_cell(self, content, value=undefined_value, do_eval_once=True, **kwargs): # @UnusedVariable
|
|
35
|
+
return ValueTableCell(cell_content=content, cell_value=value, do_eval_once=do_eval_once)
|
|
36
|
+
|
|
37
|
+
def add_cells_from_values(self, cells_value, do_eval_once=True, **kwargs):
|
|
38
|
+
if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
|
|
39
|
+
logger.trace(f"add_cells_from_values({cells_value=})")
|
|
40
|
+
for cell_value in cells_value:
|
|
41
|
+
self.add_cell(value=cell_value, do_eval_once=do_eval_once, **kwargs)
|
|
42
|
+
|
|
43
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
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_with_header import TableWithHeader
|
|
16
|
+
from holado_value.common.tables.value_table_row import ValueTableRow
|
|
17
|
+
import logging
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ValueTableWithHeader(TableWithHeader):
|
|
23
|
+
def __init__(self):
|
|
24
|
+
super().__init__()
|
|
25
|
+
|
|
26
|
+
def _new_row(self, cells=None, cells_content=None, cells_value=None, **kwargs): # @UnusedVariable
|
|
27
|
+
return ValueTableRow(cells=cells, cells_content=cells_content, cells_value=cells_value, **kwargs)
|
|
28
|
+
|
|
@@ -0,0 +1,109 @@
|
|
|
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 int
|
|
15
|
+
import logging
|
|
16
|
+
from datetime import datetime
|
|
17
|
+
import string
|
|
18
|
+
from holado_core.common.exceptions.technical_exception import TechnicalException
|
|
19
|
+
from holado_core.common.tools.tools import Tools
|
|
20
|
+
from holado_python.common.tools.datetime import DateTime
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class UniqueValueManager(object):
|
|
27
|
+
"""
|
|
28
|
+
@summary: Unique value manager.
|
|
29
|
+
An internal counter is used to generate a unique integer at any moment.
|
|
30
|
+
At first use, this counter is initialized with the number of seconds since 01/01/2020, to ensure a minimal uniqueness between sessions.
|
|
31
|
+
|
|
32
|
+
This manager can generate unique integers and unique strings.
|
|
33
|
+
For strings, a unique integer is encoded in a base in range [2, 62] (default: 62).
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
def __init__(self, padding_character='0'):
|
|
37
|
+
self.__last_unique_int = None
|
|
38
|
+
self.__padding_character = padding_character
|
|
39
|
+
|
|
40
|
+
self.__digs = string.digits + string.ascii_uppercase + string.ascii_lowercase
|
|
41
|
+
|
|
42
|
+
def new_integer(self, do_log=True):
|
|
43
|
+
if self.__last_unique_int is None:
|
|
44
|
+
# Compute timestamp as number of seconds since 01/01/2016
|
|
45
|
+
self.__last_unique_int = int((DateTime.now(tz=None) - datetime(2020, 1, 1)).total_seconds()) - 1
|
|
46
|
+
|
|
47
|
+
self.__last_unique_int += 1
|
|
48
|
+
res = self.__last_unique_int
|
|
49
|
+
|
|
50
|
+
if do_log:
|
|
51
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
52
|
+
logger.debug(f"New unique integer: {res}")
|
|
53
|
+
return res
|
|
54
|
+
|
|
55
|
+
def new_hex(self, length=None, truncate_to_length=True, do_log=True):
|
|
56
|
+
res = self.new_string(base=16, padding_length=length, padding_character="0", raise_if_padding_impossible=not truncate_to_length, do_log=False)
|
|
57
|
+
res = res.upper()
|
|
58
|
+
if length is not None and len(res) > length:
|
|
59
|
+
if truncate_to_length:
|
|
60
|
+
res = res[-length:]
|
|
61
|
+
else:
|
|
62
|
+
raise TechnicalException(f"Unique HEX integer ({res}) has length {len(res)} that exceeds expected length {length}")
|
|
63
|
+
|
|
64
|
+
if do_log:
|
|
65
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
66
|
+
logger.debug(f"New unique HEX integer: {res}")
|
|
67
|
+
return res
|
|
68
|
+
|
|
69
|
+
def new_string(self, base=62, padding_length=None, padding_character=None, raise_if_padding_impossible=True, do_log=True):
|
|
70
|
+
if base < 2 or base > 62:
|
|
71
|
+
raise TechnicalException("Base must be in range [2, 62]")
|
|
72
|
+
value = self.new_integer(do_log=False)
|
|
73
|
+
res = self.__encode_int_until_base62(value, base)
|
|
74
|
+
|
|
75
|
+
if padding_length:
|
|
76
|
+
if len(res) > padding_length and raise_if_padding_impossible:
|
|
77
|
+
raise TechnicalException(f"Unique string before padding has length {len(res)}, it is not possible to apply a padding length of {padding_length}")
|
|
78
|
+
if len(res) < padding_length:
|
|
79
|
+
if padding_character is None and self.__padding_character is None:
|
|
80
|
+
raise TechnicalException(f"In order to manage padding, the padding character must be given as parameter to UniqueValueManager.new_string or constructor of UniqueValueManager")
|
|
81
|
+
pc = padding_character if padding_character is not None else self.__padding_character
|
|
82
|
+
res = res.rjust(padding_length, pc)
|
|
83
|
+
|
|
84
|
+
if do_log:
|
|
85
|
+
if Tools.do_log(logger, logging.DEBUG):
|
|
86
|
+
logger.debug(f"New unique string: [{res}]")
|
|
87
|
+
return res
|
|
88
|
+
|
|
89
|
+
def __encode(self, int_value, base):
|
|
90
|
+
# Encode given integer in 36 base
|
|
91
|
+
return self.__encode_int_until_base62(int_value, base)
|
|
92
|
+
|
|
93
|
+
def __encode_int_until_base62(self, x, base):
|
|
94
|
+
if x < 0:
|
|
95
|
+
sign = -1
|
|
96
|
+
elif x == 0:
|
|
97
|
+
return self.__digs[0]
|
|
98
|
+
else:
|
|
99
|
+
sign = 1
|
|
100
|
+
x *= sign
|
|
101
|
+
digits = []
|
|
102
|
+
while x:
|
|
103
|
+
x, ind_digits = divmod(x, base)
|
|
104
|
+
digits.append(self.__digs[ind_digits])
|
|
105
|
+
if sign < 0:
|
|
106
|
+
digits.append('-')
|
|
107
|
+
digits.reverse()
|
|
108
|
+
return ''.join(digits)
|
|
109
|
+
|