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.
Files changed (698) hide show
  1. holado/__init__.py +358 -0
  2. holado/common/__init__.py +25 -0
  3. holado/common/context/__init__.py +25 -0
  4. holado/common/context/context.py +248 -0
  5. holado/common/context/service_manager.py +262 -0
  6. holado/common/context/session_context.py +516 -0
  7. holado/common/handlers/__init__.py +19 -0
  8. holado/common/handlers/enums.py +41 -0
  9. holado/common/handlers/object.py +175 -0
  10. holado/common/handlers/undefined.py +55 -0
  11. holado/common/tools/__init__.py +19 -0
  12. holado/common/tools/gc_manager.py +155 -0
  13. holado/holado_config.py +45 -0
  14. holado-0.13.22.dist-info/METADATA +194 -0
  15. holado-0.13.22.dist-info/RECORD +698 -0
  16. holado-0.13.22.dist-info/WHEEL +4 -0
  17. holado-0.13.22.dist-info/licenses/LICENSE +21 -0
  18. holado_ais/__init__.py +33 -0
  19. holado_ais/ais/MaritimeIdentificationDigits.csv +295 -0
  20. holado_ais/ais/ais_manager.py +151 -0
  21. holado_ais/ais/ais_messages.py +356 -0
  22. holado_ais/ais/ais_payload.py +35 -0
  23. holado_ais/ais/enums.py +37 -0
  24. holado_ais/ais/patch_pyais.py +1174 -0
  25. holado_ais/tests/behave/steps/__init__.py +17 -0
  26. holado_ais/tests/behave/steps/ais/__init__.py +0 -0
  27. holado_ais/tests/behave/steps/ais/ais_manager_steps.py +50 -0
  28. holado_ais/tests/behave/steps/ais/ais_messages_steps.py +237 -0
  29. holado_binary/__init__.py +17 -0
  30. holado_binary/ipc/binary.py +125 -0
  31. holado_binary/ipc/bit_series.py +307 -0
  32. holado_binary/tests/behave/steps/__init__.py +17 -0
  33. holado_binary/tests/behave/steps/ipc/binary_steps.py +57 -0
  34. holado_binary/tests/behave/steps/ipc/bit_series_steps.py +132 -0
  35. holado_context/__init__.py +16 -0
  36. holado_context/tests/behave/steps/__init__.py +16 -0
  37. holado_context/tests/behave/steps/private/__init__.py +16 -0
  38. holado_context/tests/behave/steps/private/common/context_steps.py +68 -0
  39. holado_core/__init__.py +32 -0
  40. holado_core/common/__init__.py +0 -0
  41. holado_core/common/actors/actions.py +97 -0
  42. holado_core/common/actors/actor.py +226 -0
  43. holado_core/common/actors/element_actor.py +32 -0
  44. holado_core/common/actors/find_actor.py +106 -0
  45. holado_core/common/actors/tree_actor.py +32 -0
  46. holado_core/common/actors/verify_actions.py +69 -0
  47. holado_core/common/block/base.py +122 -0
  48. holado_core/common/block/block_manager.py +173 -0
  49. holado_core/common/block/block_method.py +46 -0
  50. holado_core/common/block/block_steps.py +37 -0
  51. holado_core/common/block/function.py +42 -0
  52. holado_core/common/block/scope_function.py +28 -0
  53. holado_core/common/block/scope_manager.py +238 -0
  54. holado_core/common/block/scope_steps.py +141 -0
  55. holado_core/common/criterias/and_criteria.py +61 -0
  56. holado_core/common/criterias/criteria.py +78 -0
  57. holado_core/common/criterias/or_criteria.py +64 -0
  58. holado_core/common/criterias/tools/criteria_context.py +20 -0
  59. holado_core/common/criterias/tools/criteria_parameters.py +18 -0
  60. holado_core/common/drivers/driver.py +153 -0
  61. holado_core/common/drivers/element_driver.py +30 -0
  62. holado_core/common/drivers/element_internal_api.py +239 -0
  63. holado_core/common/drivers/internal_api.py +40 -0
  64. holado_core/common/drivers/tree_driver.py +30 -0
  65. holado_core/common/drivers/tree_internal_api.py +176 -0
  66. holado_core/common/exceptions/__init__.py +0 -0
  67. holado_core/common/exceptions/element_exception.py +28 -0
  68. holado_core/common/exceptions/exceptions.py +24 -0
  69. holado_core/common/exceptions/functional_exception.py +21 -0
  70. holado_core/common/exceptions/holado_exception.py +25 -0
  71. holado_core/common/exceptions/technical_exception.py +27 -0
  72. holado_core/common/exceptions/timeout_exception.py +20 -0
  73. holado_core/common/exceptions/verify_exception.py +20 -0
  74. holado_core/common/finders/after_in_tree_finder.py +87 -0
  75. holado_core/common/finders/element_finder.py +60 -0
  76. holado_core/common/finders/else_finder.py +105 -0
  77. holado_core/common/finders/finder.py +478 -0
  78. holado_core/common/finders/or_finder.py +98 -0
  79. holado_core/common/finders/then_finder.py +157 -0
  80. holado_core/common/finders/tools/enums.py +30 -0
  81. holado_core/common/finders/tools/find_builder.py +118 -0
  82. holado_core/common/finders/tools/find_context.py +405 -0
  83. holado_core/common/finders/tools/find_info.py +27 -0
  84. holado_core/common/finders/tools/find_parameters.py +240 -0
  85. holado_core/common/finders/tools/find_updater.py +95 -0
  86. holado_core/common/finders/tools/finder_info.py +26 -0
  87. holado_core/common/finders/tree_finder.py +146 -0
  88. holado_core/common/handlers/__init__.py +0 -0
  89. holado_core/common/handlers/abstracts/base_redo.py +702 -0
  90. holado_core/common/handlers/abstracts/get_or_create.py +120 -0
  91. holado_core/common/handlers/element_holder.py +122 -0
  92. holado_core/common/handlers/enums.py +23 -0
  93. holado_core/common/handlers/exceptions/redo_exceptions.py +28 -0
  94. holado_core/common/handlers/features/resource_by_name.py +187 -0
  95. holado_core/common/handlers/features/resource_by_type.py +174 -0
  96. holado_core/common/handlers/redo.py +119 -0
  97. holado_core/common/handlers/wait.py +127 -0
  98. holado_core/common/inspectors/element_inspector.py +57 -0
  99. holado_core/common/inspectors/inspector.py +221 -0
  100. holado_core/common/inspectors/tools/inspect_builder.py +169 -0
  101. holado_core/common/inspectors/tools/inspect_context.py +69 -0
  102. holado_core/common/inspectors/tools/inspect_parameters.py +181 -0
  103. holado_core/common/inspectors/tree_inspector.py +73 -0
  104. holado_core/common/resource/persisted_data_manager.py +113 -0
  105. holado_core/common/resource/persisted_method_to_call_manager.py +263 -0
  106. holado_core/common/resource/resource_manager.py +126 -0
  107. holado_core/common/resource/table_data_manager.py +110 -0
  108. holado_core/common/tables/__init__.py +1 -0
  109. holado_core/common/tables/comparators/__init__.py +0 -0
  110. holado_core/common/tables/comparators/boolean_table_cell_comparator.py +25 -0
  111. holado_core/common/tables/comparators/bytes_table_cell_comparator.py +25 -0
  112. holado_core/common/tables/comparators/datetime_table_cell_comparator.py +24 -0
  113. holado_core/common/tables/comparators/float_table_cell_comparator.py +31 -0
  114. holado_core/common/tables/comparators/integer_table_cell_comparator.py +25 -0
  115. holado_core/common/tables/comparators/internal_table_cell_comparator.py +30 -0
  116. holado_core/common/tables/comparators/string_table_cell_comparator.py +24 -0
  117. holado_core/common/tables/comparators/string_table_comparator.py +29 -0
  118. holado_core/common/tables/comparators/string_table_row_comparator.py +29 -0
  119. holado_core/common/tables/comparators/table_cell_comparator.py +40 -0
  120. holado_core/common/tables/comparators/table_comparator.py +209 -0
  121. holado_core/common/tables/comparators/table_comparator_manager.py +60 -0
  122. holado_core/common/tables/comparators/table_row_comparator.py +116 -0
  123. holado_core/common/tables/comparators/table_with_header_comparator.py +68 -0
  124. holado_core/common/tables/converters/__init__.py +0 -0
  125. holado_core/common/tables/converters/table_converter.py +233 -0
  126. holado_core/common/tables/enums.py +23 -0
  127. holado_core/common/tables/table.py +261 -0
  128. holado_core/common/tables/table_cell.py +126 -0
  129. holado_core/common/tables/table_manager.py +365 -0
  130. holado_core/common/tables/table_row.py +169 -0
  131. holado_core/common/tables/table_with_header.py +242 -0
  132. holado_core/common/tools/__init__.py +0 -0
  133. holado_core/common/tools/comparators/comparator.py +151 -0
  134. holado_core/common/tools/comparators/object_comparator.py +21 -0
  135. holado_core/common/tools/converters/converter.py +118 -0
  136. holado_core/common/tools/path_manager.py +238 -0
  137. holado_core/common/tools/string_tools.py +144 -0
  138. holado_core/common/tools/tools.py +197 -0
  139. holado_core/tests/behave/steps/__init__.py +20 -0
  140. holado_core/tests/behave/steps/common/__init__.py +0 -0
  141. holado_core/tests/behave/steps/common/common_steps.py +137 -0
  142. holado_core/tests/behave/steps/common/config_steps.py +42 -0
  143. holado_core/tests/behave/steps/common/resource_steps.py +62 -0
  144. holado_core/tests/behave/steps/common/tables_steps.py +560 -0
  145. holado_core/tools/__init__.py +0 -0
  146. holado_core/tools/abstracts/__init__.py +0 -0
  147. holado_core/tools/abstracts/blocking_command_service.py +64 -0
  148. holado_core/tools/abstracts/service.py +48 -0
  149. holado_crypto/__init__.py +31 -0
  150. holado_crypto/crypto/crypto.py +108 -0
  151. holado_crypto/crypto/key.py +92 -0
  152. holado_crypto/crypto/tcpbin.py +105 -0
  153. holado_crypto/crypto/transport/__init__.py +0 -0
  154. holado_crypto/crypto/transport/crc.py +40 -0
  155. holado_crypto/tests/behave/steps/__init__.py +18 -0
  156. holado_crypto/tests/behave/steps/crypto_steps.py +112 -0
  157. holado_crypto/tests/behave/steps/key_steps.py +82 -0
  158. holado_crypto/tests/behave/steps/tcpbin_steps.py +79 -0
  159. holado_data/__init__.py +31 -0
  160. holado_data/data/generator/base.py +93 -0
  161. holado_data/data/generator/generator_manager.py +27 -0
  162. holado_data/data/generator/python_generator.py +30 -0
  163. holado_data/tests/behave/steps/__init__.py +17 -0
  164. holado_data/tests/behave/steps/data/generator_steps.py +91 -0
  165. holado_data/tests/behave/steps/tools/utils_steps.py +59 -0
  166. holado_db/__init__.py +32 -0
  167. holado_db/tests/behave/steps/__init__.py +18 -0
  168. holado_db/tests/behave/steps/tools/db/db_client_steps.py +134 -0
  169. holado_db/tests/behave/steps/tools/db/postgresql_client_steps.py +59 -0
  170. holado_db/tests/behave/steps/tools/db/sqlite_client_steps.py +57 -0
  171. holado_db/tools/db/clients/base/db_audit.py +94 -0
  172. holado_db/tools/db/clients/base/db_client.py +344 -0
  173. holado_db/tools/db/clients/postgresql/postgresql_audit.py +75 -0
  174. holado_db/tools/db/clients/postgresql/postgresql_client.py +84 -0
  175. holado_db/tools/db/clients/sqlite/sqlite_audit.py +70 -0
  176. holado_db/tools/db/clients/sqlite/sqlite_client.py +60 -0
  177. holado_db/tools/db/db_manager.py +109 -0
  178. holado_db/tools/db/query/base/query_builder.py +138 -0
  179. holado_db/tools/db/query/pypika/pypika_query_builder.py +244 -0
  180. holado_db/tools/db/query/query_manager.py +77 -0
  181. holado_django/__init__.py +31 -0
  182. holado_django/server/HOWTO.txt +27 -0
  183. holado_django/server/django_projects/rest_api/db.sqlite3 +0 -0
  184. holado_django/server/django_projects/rest_api/manage.py +22 -0
  185. holado_django/server/django_projects/rest_api/rest_api/__init__.py +0 -0
  186. holado_django/server/django_projects/rest_api/rest_api/application/__init__.py +0 -0
  187. holado_django/server/django_projects/rest_api/rest_api/application/admin.py +3 -0
  188. holado_django/server/django_projects/rest_api/rest_api/application/apps.py +9 -0
  189. holado_django/server/django_projects/rest_api/rest_api/application/migrations/__init__.py +0 -0
  190. holado_django/server/django_projects/rest_api/rest_api/application/models.py +3 -0
  191. holado_django/server/django_projects/rest_api/rest_api/application/tests.py +3 -0
  192. holado_django/server/django_projects/rest_api/rest_api/application/views.py +6 -0
  193. holado_django/server/django_projects/rest_api/rest_api/asgi.py +16 -0
  194. holado_django/server/django_projects/rest_api/rest_api/settings.py +130 -0
  195. holado_django/server/django_projects/rest_api/rest_api/urls.py +35 -0
  196. holado_django/server/django_projects/rest_api/rest_api/wsgi.py +16 -0
  197. holado_django/server/django_server.py +110 -0
  198. holado_django/server/grpc_django_server.py +57 -0
  199. holado_django/server/patch_djangogrpcframework.py +46 -0
  200. holado_django/tests/behave/steps/__init__.py +16 -0
  201. holado_django/tests/behave/steps/django_server_steps.py +83 -0
  202. holado_docker/__init__.py +25 -0
  203. holado_docker/sdk/docker/container_logs.py +447 -0
  204. holado_docker/sdk/docker/docker_client.py +537 -0
  205. holado_docker/sdk/docker/docker_service.py +71 -0
  206. holado_docker/tests/behave/steps/__init__.py +16 -0
  207. holado_docker/tests/behave/steps/sdk/docker/container_logs_steps.py +47 -0
  208. holado_examples/projects/server_rest/server_rest_example/initialize_holado.py +72 -0
  209. holado_examples/projects/server_rest/server_rest_example/rest_api/db.sqlite3 +0 -0
  210. holado_examples/projects/server_rest/server_rest_example/rest_api/manage.py +22 -0
  211. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/__init__.py +0 -0
  212. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/__init__.py +0 -0
  213. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/admin.py +3 -0
  214. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/apps.py +7 -0
  215. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/migrations/__init__.py +0 -0
  216. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/models.py +3 -0
  217. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/serializers.py +15 -0
  218. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/tests.py +3 -0
  219. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/application/views.py +24 -0
  220. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/asgi.py +16 -0
  221. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/settings.py +130 -0
  222. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/urls.py +31 -0
  223. holado_examples/projects/server_rest/server_rest_example/rest_api/rest_api/wsgi.py +16 -0
  224. holado_examples/projects/server_rest/server_rest_example/rest_server.py +37 -0
  225. holado_examples/scripts/script_custom_initialization.py +16 -0
  226. holado_examples/scripts/script_minimal_initialization.py +23 -0
  227. holado_examples/tests/behave/testing_solution/__main__.py +13 -0
  228. holado_examples/tests/behave/testing_solution/behave_environment.py +35 -0
  229. holado_examples/tests/behave/testing_solution/environment.py +36 -0
  230. holado_examples/tests/behave/testing_solution/features/Configuration/Actions/configure_system.feature +10 -0
  231. holado_examples/tests/behave/testing_solution/features/NonReg/example.feature +26 -0
  232. holado_examples/tests/behave/testing_solution/initialize_holado.py +62 -0
  233. holado_examples/tests/behave/testing_solution/logging.conf +102 -0
  234. holado_examples/tests/behave/testing_solution/requirements.txt +5 -0
  235. holado_examples/tests/behave/testing_solution/run_test.sh +7 -0
  236. holado_examples/tests/behave/testing_solution/run_test_nonreg.sh +6 -0
  237. holado_examples/tests/behave/testing_solution/src/common/tools/path_manager.py +40 -0
  238. holado_examples/tests/behave/testing_solution/src/config/config_manager.py +30 -0
  239. holado_examples/tests/behave/testing_solution/src/context/session_context.py +45 -0
  240. holado_examples/tests/behave/testing_solution/steps/config_steps.py +21 -0
  241. holado_examples/tests/behave/testing_solution/steps/public_steps.py +10 -0
  242. holado_grpc/TODO +8 -0
  243. holado_grpc/__init__.py +40 -0
  244. holado_grpc/api/rpc/TODO.txt +4 -0
  245. holado_grpc/api/rpc/grpc_client.py +210 -0
  246. holado_grpc/api/rpc/grpc_manager.py +81 -0
  247. holado_grpc/ipc/rpc/__init__.py +0 -0
  248. holado_grpc/ipc/rpc/grpc_compiler.py +45 -0
  249. holado_grpc/ipc/rpc/grpc_services.py +165 -0
  250. holado_grpc/tests/behave/steps/__init__.py +16 -0
  251. holado_grpc/tests/behave/steps/api/grpc_client_steps.py +173 -0
  252. holado_grpc/tests/behave/steps/private/__init__.py +16 -0
  253. holado_grpc/tests/behave/steps/private/api/grpc_steps.py +77 -0
  254. holado_helper/__init__.py +35 -0
  255. holado_helper/debug/README.txt +32 -0
  256. holado_helper/debug/memory/memory_profiler.py +106 -0
  257. holado_helper/docker/init_user.sh +24 -0
  258. holado_helper/docker/logging.conf +44 -0
  259. holado_helper/docker/run_holado_test_nonreg_in_docker.sh +120 -0
  260. holado_helper/docker/run_terminal_in_docker.sh +101 -0
  261. holado_helper/holado_module_template/__init__.py +38 -0
  262. holado_helper/holado_module_template/tests/behave/steps/__init__.py +16 -0
  263. holado_helper/holado_module_template/tests/behave/steps/private/__init__.py +16 -0
  264. holado_helper/initialize_holado.py +72 -0
  265. holado_helper/script/action.py +130 -0
  266. holado_helper/script/action_script.py +477 -0
  267. holado_helper/script/any_action_script.py +126 -0
  268. holado_helper/script/behave_action_script.py +99 -0
  269. holado_helper/script/csv_action_script.py +142 -0
  270. holado_helper/script/initialize_script.py +95 -0
  271. holado_helper/script/input_output_script.py +136 -0
  272. holado_helper/script/job.py +75 -0
  273. holado_helper/script/json_action_script.py +104 -0
  274. holado_helper/script/script.py +110 -0
  275. holado_json/__init__.py +16 -0
  276. holado_json/filesystem/json_file.py +94 -0
  277. holado_json/filesystem/stream_json_file.py +117 -0
  278. holado_json/ipc/json.py +146 -0
  279. holado_json/ipc/json_converter.py +69 -0
  280. holado_json/ipc/json_types.py +183 -0
  281. holado_json/tests/behave/steps/__init__.py +16 -0
  282. holado_json/tests/behave/steps/ipc/__init__.py +0 -0
  283. holado_json/tests/behave/steps/ipc/json_steps.py +131 -0
  284. holado_keycloak/__init__.py +16 -0
  285. holado_keycloak/tests/behave/steps/__init__.py +16 -0
  286. holado_keycloak/tests/behave/steps/tools/keycloak_client_steps.py +73 -0
  287. holado_keycloak/tools/keycloak/__init__.py +0 -0
  288. holado_keycloak/tools/keycloak/keycloak_client.py +90 -0
  289. holado_logging/__init__.py +38 -0
  290. holado_logging/common/logging/holado_logger.py +71 -0
  291. holado_logging/common/logging/log_config.py +163 -0
  292. holado_logging/common/logging/log_manager.py +335 -0
  293. holado_multitask/__init__.py +33 -0
  294. holado_multitask/multiprocessing/context/process_context.py +35 -0
  295. holado_multitask/multiprocessing/function_process.py +102 -0
  296. holado_multitask/multiprocessing/periodic_function_process.py +137 -0
  297. holado_multitask/multiprocessing/process.py +213 -0
  298. holado_multitask/multiprocessing/processesmanager.py +137 -0
  299. holado_multitask/multitasking/multitask_manager.py +464 -0
  300. holado_multitask/multithreading/__init__.py +0 -0
  301. holado_multitask/multithreading/context/thread_context.py +86 -0
  302. holado_multitask/multithreading/functionthreaded.py +129 -0
  303. holado_multitask/multithreading/loopfunctionthreaded.py +45 -0
  304. holado_multitask/multithreading/loopthread.py +110 -0
  305. holado_multitask/multithreading/periodicfunctionthreaded.py +135 -0
  306. holado_multitask/multithreading/reflection/inspect.py +47 -0
  307. holado_multitask/multithreading/reflection/sys.py +29 -0
  308. holado_multitask/multithreading/reflection/traceback.py +35 -0
  309. holado_multitask/multithreading/thread.py +203 -0
  310. holado_multitask/multithreading/threadsmanager.py +167 -0
  311. holado_multitask/multithreading/timer.py +51 -0
  312. holado_multitask/tests/behave/steps/__init__.py +17 -0
  313. holado_multitask/tests/behave/steps/multiprocessing_steps.py +138 -0
  314. holado_multitask/tests/behave/steps/multithreading_steps.py +129 -0
  315. holado_protobuf/__init__.py +61 -0
  316. holado_protobuf/ipc/protobuf/__init__.py +0 -0
  317. holado_protobuf/ipc/protobuf/abstracts/type.py +45 -0
  318. holado_protobuf/ipc/protobuf/protobuf_compiler.py +118 -0
  319. holado_protobuf/ipc/protobuf/protobuf_converter.py +153 -0
  320. holado_protobuf/ipc/protobuf/protobuf_messages.py +968 -0
  321. holado_protobuf/ipc/protobuf/protobuf_modifier.py +65 -0
  322. holado_protobuf/ipc/protobuf/types/__init__.py +0 -0
  323. holado_protobuf/ipc/protobuf/types/google/__init__.py +0 -0
  324. holado_protobuf/ipc/protobuf/types/google/protobuf.py +124 -0
  325. holado_protobuf/tests/behave/steps/__init__.py +16 -0
  326. holado_protobuf/tests/behave/steps/ipc/protobuf_steps.py +297 -0
  327. holado_python/__init__.py +36 -0
  328. holado_python/common/enums.py +34 -0
  329. holado_python/common/iterables.py +38 -0
  330. holado_python/common/tools/comparators/boolean_comparator.py +37 -0
  331. holado_python/common/tools/comparators/bytes_comparator.py +48 -0
  332. holado_python/common/tools/comparators/datetime_comparator.py +74 -0
  333. holado_python/common/tools/comparators/float_comparator.py +97 -0
  334. holado_python/common/tools/comparators/integer_comparator.py +37 -0
  335. holado_python/common/tools/comparators/string_comparator.py +99 -0
  336. holado_python/common/tools/comparators/type_comparator.py +31 -0
  337. holado_python/common/tools/datetime.py +341 -0
  338. holado_python/standard_library/csv.py +207 -0
  339. holado_python/standard_library/hashlib.py +110 -0
  340. holado_python/standard_library/multiprocessing.py +62 -0
  341. holado_python/standard_library/queue.py +79 -0
  342. holado_python/standard_library/socket/blocking_socket.py +219 -0
  343. holado_python/standard_library/socket/echo_server.py +29 -0
  344. holado_python/standard_library/socket/message_socket.py +152 -0
  345. holado_python/standard_library/socket/non_blocking_socket.py +172 -0
  346. holado_python/standard_library/socket/socket.py +411 -0
  347. holado_python/standard_library/ssl/resources/certificates/NOTES.txt +5 -0
  348. holado_python/standard_library/ssl/resources/certificates/localhost.crt +19 -0
  349. holado_python/standard_library/ssl/resources/certificates/localhost.key +28 -0
  350. holado_python/standard_library/ssl/ssl.py +131 -0
  351. holado_python/standard_library/typing.py +192 -0
  352. holado_python/tests/behave/steps/__init__.py +27 -0
  353. holado_python/tests/behave/steps/builtins/str_steps.py +45 -0
  354. holado_python/tests/behave/steps/convert_steps.py +59 -0
  355. holado_python/tests/behave/steps/iterable_steps.py +87 -0
  356. holado_python/tests/behave/steps/standard_library/csv_steps.py +134 -0
  357. holado_python/tests/behave/steps/standard_library/datetime_steps.py +163 -0
  358. holado_python/tests/behave/steps/standard_library/hashlib_steps.py +57 -0
  359. holado_python/tests/behave/steps/standard_library/multiprocessing_steps.py +56 -0
  360. holado_python/tests/behave/steps/standard_library/queue_steps.py +358 -0
  361. holado_python/tests/behave/steps/standard_library/socket_steps.py +384 -0
  362. holado_python/tests/behave/steps/standard_library/ssl_steps.py +71 -0
  363. holado_rabbitmq/__init__.py +28 -0
  364. holado_rabbitmq/tests/behave/steps/__init__.py +17 -0
  365. holado_rabbitmq/tests/behave/steps/tools/rabbitmq_client_steps.py +565 -0
  366. holado_rabbitmq/tests/behave/steps/tools/rabbitmq_server_steps.py +64 -0
  367. holado_rabbitmq/tools/rabbitmq/rabbitmq_blocking_client.py +333 -0
  368. holado_rabbitmq/tools/rabbitmq/rabbitmq_client.py +678 -0
  369. holado_rabbitmq/tools/rabbitmq/rabbitmq_manager.py +146 -0
  370. holado_rabbitmq/tools/rabbitmq/rabbitmq_select_client.py +428 -0
  371. holado_rabbitmq/tools/rabbitmq/rabbitmq_server.py +24 -0
  372. holado_redis/__init__.py +17 -0
  373. holado_redis/tests/behave/steps/__init__.py +16 -0
  374. holado_redis/tests/behave/steps/tools/redis_client_steps.py +101 -0
  375. holado_redis/tools/redis/TODO.txt +7 -0
  376. holado_redis/tools/redis/redis_client.py +190 -0
  377. holado_redis/tools/redis/redis_manager.py +38 -0
  378. holado_report/__init__.py +36 -0
  379. holado_report/campaign/campaign_manager.py +348 -0
  380. holado_report/report/analyze/execution_historic_manager.py +96 -0
  381. holado_report/report/analyze/scenario_duration_manager.py +245 -0
  382. holado_report/report/builders/detailed_scenario_report_builder.py +172 -0
  383. holado_report/report/builders/execution_historic_report_builder.py +132 -0
  384. holado_report/report/builders/failure_report_builder.py +150 -0
  385. holado_report/report/builders/report_builder.py +64 -0
  386. holado_report/report/builders/short_scenario_report_builder.py +94 -0
  387. holado_report/report/builders/summary_by_category_report_builder.py +103 -0
  388. holado_report/report/builders/summary_report_builder.py +110 -0
  389. holado_report/report/builders/summary_scenario_by_category_report_builder.py +109 -0
  390. holado_report/report/builders/summary_scenario_report_builder.py +81 -0
  391. holado_report/report/execution_historic.py +144 -0
  392. holado_report/report/report_manager.py +424 -0
  393. holado_report/report/reports/base_report.py +163 -0
  394. holado_report/report/reports/feature_report.py +106 -0
  395. holado_report/report/reports/scenario_report.py +64 -0
  396. holado_rest/__init__.py +32 -0
  397. holado_rest/api/rest/TODO.txt +2 -0
  398. holado_rest/api/rest/rest_client.py +200 -0
  399. holado_rest/api/rest/rest_manager.py +72 -0
  400. holado_rest/tests/behave/steps/__init__.py +16 -0
  401. holado_rest/tests/behave/steps/api/__init__.py +0 -0
  402. holado_rest/tests/behave/steps/api/rest_client_steps.py +181 -0
  403. holado_rest/tests/behave/steps/private/__init__.py +16 -0
  404. holado_rest/tests/behave/steps/private/api/__init__.py +0 -0
  405. holado_rest/tests/behave/steps/private/api/rest_steps.py +75 -0
  406. holado_s3/__init__.py +17 -0
  407. holado_s3/tests/behave/steps/__init__.py +17 -0
  408. holado_s3/tests/behave/steps/private/__init__.py +16 -0
  409. holado_s3/tests/behave/steps/private/tools/s3_steps.py +89 -0
  410. holado_s3/tests/behave/steps/tools/s3_client_steps.py +403 -0
  411. holado_s3/tests/behave/steps/tools/s3_server_steps.py +57 -0
  412. holado_s3/tools/s3/__init__.py +0 -0
  413. holado_s3/tools/s3/boto3_s3_client.py +59 -0
  414. holado_s3/tools/s3/minio_client.py +75 -0
  415. holado_s3/tools/s3/moto_server.py +52 -0
  416. holado_scripting/__init__.py +54 -0
  417. holado_scripting/common/tools/dynamic_text_manager.py +73 -0
  418. holado_scripting/common/tools/evaluate_parameters.py +228 -0
  419. holado_scripting/common/tools/expression_evaluator.py +389 -0
  420. holado_scripting/common/tools/variable_manager.py +354 -0
  421. holado_scripting/tests/behave/steps/__init__.py +22 -0
  422. holado_scripting/tests/behave/steps/common/tools/variable_convert_steps.py +159 -0
  423. holado_scripting/tests/behave/steps/common/tools/variable_new_steps.py +130 -0
  424. holado_scripting/tests/behave/steps/common/tools/variable_steps.py +108 -0
  425. holado_scripting/tests/behave/steps/common/tools/variable_verify_steps.py +160 -0
  426. holado_scripting/tests/behave/steps/scenario/function_steps.py +77 -0
  427. holado_scripting/tests/behave/steps/scenario/if_steps.py +87 -0
  428. holado_scripting/tests/behave/steps/scenario/loop_steps.py +119 -0
  429. holado_scripting/text/base/base_function.py +25 -0
  430. holado_scripting/text/base/base_verify_function.py +25 -0
  431. holado_scripting/text/base/text_inspecter.py +204 -0
  432. holado_scripting/text/interpreter/exceptions/interpreter_exception.py +25 -0
  433. holado_scripting/text/interpreter/functions/function_apply_function.py +60 -0
  434. holado_scripting/text/interpreter/functions/function_cast.py +60 -0
  435. holado_scripting/text/interpreter/functions/function_convert.py +57 -0
  436. holado_scripting/text/interpreter/functions/function_dynamic_value.py +40 -0
  437. holado_scripting/text/interpreter/functions/function_escape_all_bytes.py +35 -0
  438. holado_scripting/text/interpreter/functions/function_exists_variable.py +39 -0
  439. holado_scripting/text/interpreter/functions/function_hex_to_bytes.py +49 -0
  440. holado_scripting/text/interpreter/functions/function_hex_to_int.py +53 -0
  441. holado_scripting/text/interpreter/functions/function_to_base_64.py +41 -0
  442. holado_scripting/text/interpreter/functions/function_to_bytes.py +50 -0
  443. holado_scripting/text/interpreter/functions/function_to_hex.py +42 -0
  444. holado_scripting/text/interpreter/functions/function_to_string.py +50 -0
  445. holado_scripting/text/interpreter/text_interpreter.py +219 -0
  446. holado_scripting/text/verifier/exceptions/verifier_exception.py +21 -0
  447. holado_scripting/text/verifier/functions/verify_function_extract_in.py +35 -0
  448. holado_scripting/text/verifier/functions/verify_function_match_pattern.py +63 -0
  449. holado_scripting/text/verifier/text_verifier.py +103 -0
  450. holado_sftp/__init__.py +16 -0
  451. holado_sftp/tests/behave/steps/__init__.py +17 -0
  452. holado_sftp/tests/behave/steps/private/__init__.py +16 -0
  453. holado_sftp/tests/behave/steps/private/tools/sftp_steps.py +78 -0
  454. holado_sftp/tests/behave/steps/tools/sftp_client_steps.py +94 -0
  455. holado_sftp/tests/behave/steps/tools/sftp_server_steps.py +82 -0
  456. holado_sftp/tools/sftp/__init__.py +0 -0
  457. holado_sftp/tools/sftp/sftp_client.py +103 -0
  458. holado_sftp/tools/sftp/sftp_server.py +39 -0
  459. holado_swagger/__init__.py +31 -0
  460. holado_swagger/swagger_hub/mockserver/mockserver_client.py +82 -0
  461. holado_swagger/swagger_hub/mockserver/mockserver_manager.py +33 -0
  462. holado_swagger/tests/behave/steps/__init__.py +16 -0
  463. holado_swagger/tests/behave/steps/swagger_hub/mockserver_steps.py +74 -0
  464. holado_system/system/command/command.py +247 -0
  465. holado_system/system/command/command_result.py +128 -0
  466. holado_system/system/command/curl_command.py +101 -0
  467. holado_system/system/command/exceptions.py +59 -0
  468. holado_system/system/filesystem/file.py +150 -0
  469. holado_system/system/global_system.py +187 -0
  470. holado_system/tests/behave/steps/__init__.py +18 -0
  471. holado_system/tests/behave/steps/system/commands_steps.py +92 -0
  472. holado_system/tests/behave/steps/system/file_steps.py +231 -0
  473. holado_system/tests/behave/steps/system/system_steps.py +84 -0
  474. holado_test/__init__.py +30 -0
  475. holado_test/behave/__init__.py +0 -0
  476. holado_test/behave/behave.py +400 -0
  477. holado_test/behave/behave_environment.py +169 -0
  478. holado_test/behave/behave_function.py +33 -0
  479. holado_test/behave/behave_manager.py +558 -0
  480. holado_test/behave/independant_runner.py +66 -0
  481. holado_test/behave/scenario/__init__.py +0 -0
  482. holado_test/behave/scenario/behave_step_tools.py +157 -0
  483. holado_test/common/context/feature_context.py +81 -0
  484. holado_test/common/context/scenario_context.py +169 -0
  485. holado_test/common/context/step_context.py +66 -0
  486. holado_test/common/exceptions/undefined_step_exception.py +21 -0
  487. holado_test/scenario/step_tools.py +547 -0
  488. holado_test/scenario/tester_tools.py +57 -0
  489. holado_test/test_config.py +26 -0
  490. holado_test/tests/behave/steps/__init__.py +18 -0
  491. holado_test/tests/behave/steps/scenario/exception_steps.py +87 -0
  492. holado_test/tests/behave/steps/scenario/scenario_steps.py +100 -0
  493. holado_test/tests/behave/steps/scenario/tester_steps.py +65 -0
  494. holado_test/tools/test_server/client/rest/test_server_client.py +150 -0
  495. holado_test/tools/test_server/server/Dockerfile +60 -0
  496. holado_test/tools/test_server/server/core/server_context.py +42 -0
  497. holado_test/tools/test_server/server/core/server_manager.py +41 -0
  498. holado_test/tools/test_server/server/requirements.txt +2 -0
  499. holado_test/tools/test_server/server/rest/README +2 -0
  500. holado_test/tools/test_server/server/rest/api/__init__.py +24 -0
  501. holado_test/tools/test_server/server/rest/api/campaign/__init__.py +32 -0
  502. holado_test/tools/test_server/server/rest/api/campaign/scenario.py +40 -0
  503. holado_test/tools/test_server/server/rest/initialize_holado.py +72 -0
  504. holado_test/tools/test_server/server/rest/logging.conf +51 -0
  505. holado_test/tools/test_server/server/rest/openapi.yaml +57 -0
  506. holado_test/tools/test_server/server/rest/run.py +41 -0
  507. holado_test/tools/test_server/server/run.sh +6 -0
  508. holado_test/tools/test_server/server/run_test_server_in_docker.sh +104 -0
  509. holado_tools/__init__.py +38 -0
  510. holado_tools/scripts/execute_persisted_post_processes/execute_persisted_post_processes.py +36 -0
  511. holado_tools/scripts/execute_persisted_post_processes/execute_persisted_post_processes.sh +6 -0
  512. holado_tools/scripts/execute_persisted_post_processes/initialize_holado.py +62 -0
  513. holado_tools/tests/behave/steps/__init__.py +16 -0
  514. holado_tools/tests/behave/steps/tools/host_controller/client_steps.py +97 -0
  515. holado_tools/tools/host_controller/client/rest/host_controller_client.py +275 -0
  516. holado_tools/tools/host_controller/server/Dockerfile +60 -0
  517. holado_tools/tools/host_controller/server/requirements.txt +2 -0
  518. holado_tools/tools/host_controller/server/rest/README +2 -0
  519. holado_tools/tools/host_controller/server/rest/api/__init__.py +24 -0
  520. holado_tools/tools/host_controller/server/rest/api/config.py +88 -0
  521. holado_tools/tools/host_controller/server/rest/api/docker/__init__.py +66 -0
  522. holado_tools/tools/host_controller/server/rest/api/docker/container.py +144 -0
  523. holado_tools/tools/host_controller/server/rest/api/docker/logs.py +66 -0
  524. holado_tools/tools/host_controller/server/rest/api/os.py +58 -0
  525. holado_tools/tools/host_controller/server/rest/initialize_holado.py +72 -0
  526. holado_tools/tools/host_controller/server/rest/openapi.yaml +561 -0
  527. holado_tools/tools/host_controller/server/rest/run.py +31 -0
  528. holado_tools/tools/host_controller/server/run_host_controller_in_docker.sh +107 -0
  529. holado_tools/tools/host_viewer/client/rest/host_viewer_client.py +190 -0
  530. holado_tools/tools/host_viewer/server/Dockerfile +60 -0
  531. holado_tools/tools/host_viewer/server/requirements.txt +2 -0
  532. holado_tools/tools/host_viewer/server/rest/README +2 -0
  533. holado_tools/tools/host_viewer/server/rest/api/__init__.py +24 -0
  534. holado_tools/tools/host_viewer/server/rest/api/docker/__init__.py +65 -0
  535. holado_tools/tools/host_viewer/server/rest/api/docker/container.py +87 -0
  536. holado_tools/tools/host_viewer/server/rest/api/os.py +58 -0
  537. holado_tools/tools/host_viewer/server/rest/initialize_holado.py +72 -0
  538. holado_tools/tools/host_viewer/server/rest/openapi.yaml +301 -0
  539. holado_tools/tools/host_viewer/server/rest/run.py +31 -0
  540. holado_tools/tools/host_viewer/server/run_host_viewer_in_docker.sh +107 -0
  541. holado_value/__init__.py +24 -0
  542. holado_value/common/tables/comparators/table_2_value_table_cell_comparator.py +196 -0
  543. holado_value/common/tables/comparators/table_2_value_table_comparator.py +27 -0
  544. holado_value/common/tables/comparators/table_2_value_table_row_comparator.py +27 -0
  545. holado_value/common/tables/comparators/table_2_value_table_with_header_comparator.py +27 -0
  546. holado_value/common/tables/converters/value_table_converter.py +267 -0
  547. holado_value/common/tables/value_table.py +29 -0
  548. holado_value/common/tables/value_table_cell.py +76 -0
  549. holado_value/common/tables/value_table_manager.py +48 -0
  550. holado_value/common/tables/value_table_row.py +43 -0
  551. holado_value/common/tables/value_table_with_header.py +28 -0
  552. holado_value/common/tools/unique_value_manager.py +109 -0
  553. holado_value/common/tools/value.py +191 -0
  554. holado_value/common/tools/value_types.py +41 -0
  555. holado_value/tests/behave/steps/__init__.py +16 -0
  556. holado_value/tests/behave/steps/private/__init__.py +16 -0
  557. holado_ws/__init__.py +16 -0
  558. holado_ws/api/ws/TODO.txt +2 -0
  559. holado_ws/tests/behave/steps/__init__.py +16 -0
  560. holado_ws/tests/behave/steps/api/web_service_steps.py +189 -0
  561. holado_xml/__init__.py +38 -0
  562. holado_xml/tests/behave/steps/__init__.py +16 -0
  563. holado_xml/tests/behave/steps/private/__init__.py +16 -0
  564. holado_xml/xml/stream_xml_file.py +181 -0
  565. holado_xml/xml/xml_file.py +97 -0
  566. holado_xml/xml/xml_manager.py +35 -0
  567. holado_yaml/__init__.py +31 -0
  568. holado_yaml/tests/behave/steps/__init__.py +16 -0
  569. holado_yaml/tests/behave/steps/yaml_steps.py +161 -0
  570. holado_yaml/yaml/enums.py +28 -0
  571. holado_yaml/yaml/pyyaml/pyyaml_client.py +72 -0
  572. holado_yaml/yaml/ruamel/ruamel_yaml_client.py +80 -0
  573. holado_yaml/yaml/yaml_client.py +203 -0
  574. holado_yaml/yaml/yaml_manager.py +94 -0
  575. test_holado/Dockerfile_test_holado +82 -0
  576. test_holado/__init__.py +4 -0
  577. test_holado/__main__.py +25 -0
  578. test_holado/build_docker_image_to_test_holado_in_docker.sh +7 -0
  579. test_holado/environment.py +60 -0
  580. test_holado/features/Configuration/Actions/execute_persisted_post_processes.feature +13 -0
  581. test_holado/features/NonReg/api/REST.feature +26 -0
  582. test_holado/features/NonReg/api/gRPC.feature +116 -0
  583. test_holado/features/NonReg/common/multiprocessing/simple.feature +60 -0
  584. test_holado/features/NonReg/common/system/commands.feature +43 -0
  585. test_holado/features/NonReg/common/system/system.feature +20 -0
  586. test_holado/features/NonReg/common/tables/table.feature +245 -0
  587. test_holado/features/NonReg/common/tables/value_table_conversion.feature +29 -0
  588. test_holado/features/NonReg/common/tools/DateTime.feature +88 -0
  589. test_holado/features/NonReg/common/tools/UniqueValueManager.feature +43 -0
  590. test_holado/features/NonReg/holado_ais/ais_message-bitarray_to_nmea.feature +135 -0
  591. test_holado/features/NonReg/holado_ais/ais_message-nmea_raw_to_dict.feature +93 -0
  592. test_holado/features/NonReg/holado_ais/message_types/type-10.feature +38 -0
  593. test_holado/features/NonReg/holado_ais/message_types/type-12.feature +37 -0
  594. test_holado/features/NonReg/holado_ais/message_types/type-14.feature +36 -0
  595. test_holado/features/NonReg/holado_ais/message_types/type-15.feature +36 -0
  596. test_holado/features/NonReg/holado_ais/message_types/type-16.feature +38 -0
  597. test_holado/features/NonReg/holado_ais/message_types/type-17.feature +46 -0
  598. test_holado/features/NonReg/holado_ais/message_types/type-18.feature +37 -0
  599. test_holado/features/NonReg/holado_ais/message_types/type-19.feature +38 -0
  600. test_holado/features/NonReg/holado_ais/message_types/type-1_2_3.feature +42 -0
  601. test_holado/features/NonReg/holado_ais/message_types/type-20.feature +38 -0
  602. test_holado/features/NonReg/holado_ais/message_types/type-21.feature +37 -0
  603. test_holado/features/NonReg/holado_ais/message_types/type-22.feature +84 -0
  604. test_holado/features/NonReg/holado_ais/message_types/type-23.feature +49 -0
  605. test_holado/features/NonReg/holado_ais/message_types/type-24.feature +72 -0
  606. test_holado/features/NonReg/holado_ais/message_types/type-25.feature +143 -0
  607. test_holado/features/NonReg/holado_ais/message_types/type-26.feature +144 -0
  608. test_holado/features/NonReg/holado_ais/message_types/type-27.feature +36 -0
  609. test_holado/features/NonReg/holado_ais/message_types/type-4_11.feature +39 -0
  610. test_holado/features/NonReg/holado_ais/message_types/type-5.feature +33 -0
  611. test_holado/features/NonReg/holado_ais/message_types/type-6.feature +37 -0
  612. test_holado/features/NonReg/holado_ais/message_types/type-7_13.feature +43 -0
  613. test_holado/features/NonReg/holado_ais/message_types/type-8.feature +37 -0
  614. test_holado/features/NonReg/holado_ais/message_types/type-9.feature +37 -0
  615. test_holado/features/NonReg/holado_binary/bit_series.error.feature +33 -0
  616. test_holado/features/NonReg/holado_binary/bit_series.feature +144 -0
  617. test_holado/features/NonReg/holado_protobuf/protobuf.feature +291 -0
  618. test_holado/features/NonReg/holado_python/convert.feature +20 -0
  619. test_holado/features/NonReg/holado_python/iterable.feature +61 -0
  620. test_holado/features/NonReg/holado_python/standard_library/socket/local_echo_server/socket_reset.feature +191 -0
  621. test_holado/features/NonReg/holado_python/standard_library/socket/local_echo_server/socket_with_tls_and_verify.feature +279 -0
  622. test_holado/features/NonReg/holado_python/standard_library/socket/local_echo_server/socket_with_tls_without_verify.feature +299 -0
  623. test_holado/features/NonReg/holado_python/standard_library/socket/local_echo_server/socket_without_tls.feature +163 -0
  624. test_holado/features/NonReg/holado_python/standard_library/socket/tcpbin.com/socket_with_mtls.feature +214 -0
  625. test_holado/features/NonReg/holado_python/standard_library/socket/tcpbin.com/socket_with_tls.feature +184 -0
  626. test_holado/features/NonReg/holado_python/standard_library/socket/tcpbin.com/socket_without_tls.feature +169 -0
  627. test_holado/features/NonReg/holado_scripting/common/tools/dynamic_text_manager.feature +18 -0
  628. test_holado/features/NonReg/holado_scripting/common/tools/expression_evaluator.feature +185 -0
  629. test_holado/features/NonReg/holado_scripting/common/tools/variable_manager.feature +71 -0
  630. test_holado/features/NonReg/holado_scripting/text/interpreter/interpreter.error.feature +21 -0
  631. test_holado/features/NonReg/holado_scripting/text/interpreter/interpreter.feature +120 -0
  632. test_holado/features/NonReg/holado_yaml/yaml.feature +514 -0
  633. test_holado/features/NonReg/ipc/json.feature +20 -0
  634. test_holado/features/NonReg/scenario/scenario.feature +183 -0
  635. test_holado/features/NonReg/test_steps/behave.feature +275 -0
  636. test_holado/features/NonReg/test_steps/common.feature +100 -0
  637. test_holado/features/NonReg/tools/RabbitMQ.feature +445 -0
  638. test_holado/features/NonReg/tools/RabbitMQ_steps.feature +276 -0
  639. test_holado/features/NonReg/tools/S3/boto3_client.feature +73 -0
  640. test_holado/features/NonReg/tools/S3/minio_client.feature +75 -0
  641. test_holado/features/NonReg/tools/db_sqlite3.feature +41 -0
  642. test_holado/features/NonReg/tools/sFTP.feature +25 -0
  643. test_holado/features/Test/logger.feature +28 -0
  644. test_holado/features/Test/test_host_controller.feature +13 -0
  645. test_holado/features/Test/test_parameter.feature +15 -0
  646. test_holado/features/__init__.py +0 -0
  647. test_holado/initialize_holado.py +62 -0
  648. test_holado/logging.conf +53 -0
  649. test_holado/resources/proto/definitions/protobuf/custom_types/field_types.proto +24 -0
  650. test_holado/resources/proto/definitions/protobuf/protobuf.dev/tutorial/addressbook.proto +56 -0
  651. test_holado/resources/proto/generated/protobuf/custom_types/field_types_pb2.py +34 -0
  652. test_holado/resources/proto/generated/protobuf/protobuf/dev/tutorial/addressbook_pb2.py +34 -0
  653. test_holado/resources/scripts/list_tags.sh +2 -0
  654. test_holado/resources/scripts/update_resources_proto_generated.py +70 -0
  655. test_holado/steps/__init__.py +0 -0
  656. test_holado/steps/private_steps.py +20 -0
  657. test_holado/steps/public_steps.py +23 -0
  658. test_holado/test_holado_session_context.py +43 -0
  659. test_holado/tools/connexion/api_rest/openapi.yaml +16 -0
  660. test_holado/tools/connexion/api_rest/run.py +19 -0
  661. test_holado/tools/django/README.txt +3 -0
  662. test_holado/tools/django/api_grpc/api_grpc/__init__.py +0 -0
  663. test_holado/tools/django/api_grpc/api_grpc/api1/__init__.py +0 -0
  664. test_holado/tools/django/api_grpc/api_grpc/api1/admin.py +3 -0
  665. test_holado/tools/django/api_grpc/api_grpc/api1/apps.py +6 -0
  666. test_holado/tools/django/api_grpc/api_grpc/api1/migrations/__init__.py +0 -0
  667. test_holado/tools/django/api_grpc/api_grpc/api1/models.py +3 -0
  668. test_holado/tools/django/api_grpc/api_grpc/api1/proto/__init__.py +0 -0
  669. test_holado/tools/django/api_grpc/api_grpc/api1/proto/account.proto +27 -0
  670. test_holado/tools/django/api_grpc/api_grpc/api1/proto/account_pb2.py +33 -0
  671. test_holado/tools/django/api_grpc/api_grpc/api1/proto/account_pb2_grpc.py +199 -0
  672. test_holado/tools/django/api_grpc/api_grpc/api1/serializers.py +12 -0
  673. test_holado/tools/django/api_grpc/api_grpc/api1/services.py +11 -0
  674. test_holado/tools/django/api_grpc/api_grpc/api1/tests.py +3 -0
  675. test_holado/tools/django/api_grpc/api_grpc/api1/views.py +3 -0
  676. test_holado/tools/django/api_grpc/api_grpc/asgi.py +16 -0
  677. test_holado/tools/django/api_grpc/api_grpc/settings.py +126 -0
  678. test_holado/tools/django/api_grpc/api_grpc/urls.py +27 -0
  679. test_holado/tools/django/api_grpc/api_grpc/wsgi.py +16 -0
  680. test_holado/tools/django/api_grpc/db.sqlite3 +0 -0
  681. test_holado/tools/django/api_grpc/manage.py +29 -0
  682. test_holado/tools/django/api_grpc/manual_test_commands.txt +25 -0
  683. test_holado/tools/django/api_grpc/patch_djangogrpcframework.py +42 -0
  684. test_holado/tools/django/api_rest/api_rest/__init__.py +0 -0
  685. test_holado/tools/django/api_rest/api_rest/api1/__init__.py +0 -0
  686. test_holado/tools/django/api_rest/api_rest/api1/admin.py +3 -0
  687. test_holado/tools/django/api_rest/api_rest/api1/apps.py +6 -0
  688. test_holado/tools/django/api_rest/api_rest/api1/migrations/__init__.py +0 -0
  689. test_holado/tools/django/api_rest/api_rest/api1/models.py +3 -0
  690. test_holado/tools/django/api_rest/api_rest/api1/serializers.py +15 -0
  691. test_holado/tools/django/api_rest/api_rest/api1/tests.py +3 -0
  692. test_holado/tools/django/api_rest/api_rest/api1/views.py +24 -0
  693. test_holado/tools/django/api_rest/api_rest/asgi.py +16 -0
  694. test_holado/tools/django/api_rest/api_rest/settings.py +133 -0
  695. test_holado/tools/django/api_rest/api_rest/urls.py +32 -0
  696. test_holado/tools/django/api_rest/api_rest/wsgi.py +16 -0
  697. test_holado/tools/django/api_rest/db.sqlite3 +0 -0
  698. test_holado/tools/django/api_rest/manage.py +22 -0
@@ -0,0 +1,354 @@
1
+
2
+ #################################################
3
+ # HolAdo (Holistic Automation do)
4
+ #
5
+ # (C) Copyright 2021-2025 by Eric Klumpp
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8
+ #
9
+ # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
10
+
11
+ # The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
12
+ #################################################
13
+
14
+ import logging
15
+ from holado_core.common.exceptions.functional_exception import FunctionalException
16
+ import re
17
+ from holado.common.handlers.object import Object, DeleteableObject
18
+ from holado_core.common.tools.tools import Tools
19
+ from holado.holado_config import Config
20
+ from contextlib import contextmanager
21
+ from typing import NamedTuple
22
+ import threading
23
+ from holado.common.tools.gc_manager import GcManager
24
+ from holado_python.standard_library.typing import Typing
25
+ from holado.common.context.session_context import SessionContext
26
+
27
+ logger = logging.getLogger(__name__)
28
+ # logger_update = logging.getLogger(__name__ + ".update")
29
+
30
+
31
+ class VariableManager(DeleteableObject):
32
+ """
33
+ Manage variables as couples of (name, value).
34
+
35
+ Variable names can contain any character except: ".", "["
36
+ Variable names can end by any dynamic suffix symbol, the symbol will be replaced by the associated suffix.
37
+ """
38
+
39
+ def __init__(self, parent=None):
40
+ super().__init__("variable manager")
41
+
42
+ self.__parent = parent
43
+ self.__dynamic_text_manager = None
44
+ self.__unique_value_manager = None
45
+ self.__variables = {}
46
+
47
+ # Manage temporary variables
48
+ self.__temporary_variables_lock = threading.Lock()
49
+ self.__temporary_variables = {}
50
+
51
+ # Manage variable update log file
52
+ self.__variable_update_log_file_path = None
53
+ self.__is_entered_in_variable_update_log_file = False
54
+ self.__logger_update = logging.getLogger(__name__ + f".update.{id(self)}")
55
+
56
+ def initialize(self, dynamic_text_manager, unique_value_manager, variable_update_log_file_path=None):
57
+ """ Initialize variable manager
58
+ @param dynamic_text_manager Dynamic text manager instance to use
59
+ @param unique_value_manager Unique value manager instance to use
60
+ @param variable_update_log_filename If defined, log all variable updates in given file in addition to normal logs
61
+ """
62
+ self.__dynamic_text_manager = dynamic_text_manager
63
+ self.__unique_value_manager = unique_value_manager
64
+
65
+ # Manage variable update log file
66
+ self.__variable_update_log_file_path = variable_update_log_file_path
67
+
68
+ @property
69
+ def parent(self):
70
+ return self.__parent
71
+
72
+ def _delete_object(self):
73
+ # Delete all variables
74
+ names = set(self.__variables.keys())
75
+ if Tools.do_log(logger, logging.DEBUG):
76
+ logger.debug(f"Removing {len(names)} variables: {names}")
77
+ for index, name in enumerate(names):
78
+ if name in self.__variables:
79
+ value = self.__variables[name]
80
+ if Tools.do_log(logger, logging.DEBUG):
81
+ logger.debug(f"Removing variable {index+1}/{len(names)}: '{name}' (type: {Typing.get_object_class_fullname(value)})")
82
+ self.unregister_variable(name, through_parent=False, delete_value=True)
83
+ if Tools.do_log(logger, logging.DEBUG):
84
+ logger.debug(f"Finished to remove {len(names)} variables: {names}")
85
+
86
+ # # Clear variables
87
+ # self.__variables.clear()
88
+
89
+ # Leave variable update log file
90
+ self.__leave_variable_update_log_file()
91
+
92
+ def __enter_variable_update_log_file(self):
93
+ if self.__variable_update_log_file_path is not None and not self.__is_entered_in_variable_update_log_file:
94
+ SessionContext.instance().log_manager.enter_log_file_for_logger(self.__logger_update, self.__variable_update_log_file_path, use_format_short=True)
95
+ self.__is_entered_in_variable_update_log_file = True
96
+
97
+ def __leave_variable_update_log_file(self):
98
+ if self.__variable_update_log_file_path is not None and self.__is_entered_in_variable_update_log_file:
99
+ SessionContext.instance().log_manager.leave_log_file_for_logger(self.__logger_update)
100
+ self.__is_entered_in_variable_update_log_file = False
101
+
102
+ @contextmanager
103
+ def temporary_variables(self):
104
+ from holado_multitask.multitasking.multitask_manager import MultitaskManager
105
+
106
+ uid = MultitaskManager.get_thread_uid()
107
+ with self.__temporary_variables_lock:
108
+ if uid not in self.__temporary_variables:
109
+ self.__temporary_variables[uid] = NamedTuple("TempVars", counter=int, variable_names=list)
110
+ self.__temporary_variables[uid].counter = 0
111
+ self.__temporary_variables[uid].variable_names = set()
112
+ self.__temporary_variables[uid].counter += 1
113
+
114
+ try:
115
+ yield None
116
+ finally:
117
+ with self.__temporary_variables_lock:
118
+ self.__temporary_variables[uid].counter -= 1
119
+ if self.__temporary_variables[uid].counter == 0:
120
+ logger.info(f"Unregistering temporary variables: {self.__temporary_variables[uid].variable_names}")
121
+ for var_name in self.__temporary_variables[uid].variable_names:
122
+ if self.exists_variable(var_name, through_parent=False):
123
+ self.unregister_variable(var_name, through_parent=False, delete_value=True)
124
+ del self.__temporary_variables[uid]
125
+ GcManager.collect()
126
+
127
+
128
+ def new_local_variable_name(self, sub_name=None):
129
+ if sub_name is not None:
130
+ return f"__VAR_{sub_name}_{self.__unique_value_manager.new_string(do_log=False)}__"
131
+ else:
132
+ return f"__VAR{self.__unique_value_manager.new_string(do_log=False)}__"
133
+
134
+ def new_variable_name(self):
135
+ res = None
136
+ while True:
137
+ res = self.new_local_variable_name()
138
+ if not self.exists_variable(variable_name=res):
139
+ break
140
+ return res
141
+
142
+ def evaluate_variable_name(self, var_name):
143
+ if var_name.endswith(Config.DYNAMIC_SYMBOL):
144
+ return self.__dynamic_text_manager.get(var_name[:-1])
145
+ elif var_name.endswith(Config.THREAD_DYNAMIC_SYMBOL):
146
+ from holado_multitask.multitasking.multitask_manager import MultitaskManager
147
+ return self.__dynamic_text_manager.get(var_name[:-1], scope=MultitaskManager.get_thread_id())
148
+ elif var_name.endswith(Config.UNIQUE_SYMBOL):
149
+ return var_name[:-1] + self.__unique_value_manager.new_string(padding_length=Config.unique_string_padding_length)
150
+ else:
151
+ return var_name
152
+
153
+ def register_variable(self, variable_name, value, accept_expression=True, log_level=logging.INFO):
154
+ from holado_multitask.multitasking.multitask_manager import MultitaskManager
155
+
156
+ self.__enter_variable_update_log_file()
157
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
158
+ logger.trace(f"Setting variable: {variable_name}=[{value}] (type: {Typing.get_object_class_fullname(value)})...")
159
+
160
+ names = variable_name.rsplit('.', 1)
161
+ if accept_expression and len(names) > 1:
162
+ if not self.exists_variable(expression=names[0]):
163
+ self.register_variable(names[0], Object())
164
+ var = self.get_value(names[0], through_patent=False)
165
+ setattr(var, names[1], value)
166
+ if Tools.do_log(self.__logger_update, log_level):
167
+ self.__logger_update.log(log_level, f"Set variable expression: {variable_name}=[{value}] (type: {Typing.get_object_class_fullname(value)})")
168
+ else:
169
+ var_name = self.evaluate_variable_name(variable_name)
170
+ self.__variables[var_name] = value
171
+ if Tools.do_log(self.__logger_update, log_level):
172
+ self.__logger_update.log(log_level, f"Set variable: {var_name}=[{value}] (type: {Typing.get_object_class_fullname(value)})")
173
+
174
+ # Manage temporary variables
175
+ uid = MultitaskManager.get_thread_uid()
176
+ with self.__temporary_variables_lock:
177
+ if uid in self.__temporary_variables:
178
+ self.__temporary_variables[uid].variable_names.add(var_name)
179
+
180
+ def unregister_variable(self, variable_name, through_parent=False, delete_value=False):
181
+ self.__enter_variable_update_log_file()
182
+
183
+ var_name = self.evaluate_variable_name(variable_name)
184
+ if self.exists_variable(var_name, through_parent=False):
185
+ value = self.__variables[var_name]
186
+ if Tools.do_log(logger, logging.DEBUG):
187
+ logger.debug(f"Unregistering variable '{var_name}' (type: {Typing.get_object_class_fullname(value)})")
188
+
189
+ if delete_value and isinstance(value, DeleteableObject):
190
+ try:
191
+ value.delete_object()
192
+ except Exception:
193
+ logger.exception(f"Catched exception while deleting object '{var_name}' (type: {Typing.get_object_class_fullname(value)})")
194
+ else:
195
+ if Tools.do_log(self.__logger_update, logging.DEBUG):
196
+ self.__logger_update.debug(f"Deleted variable '{var_name}' (type: {Typing.get_object_class_fullname(value)})")
197
+
198
+ del self.__variables[var_name]
199
+ elif through_parent and self.parent:
200
+ return self.parent.unregister_variable(variable_name, through_parent=through_parent, delete_value=delete_value)
201
+ else:
202
+ raise FunctionalException(f"Variable '{var_name}' has not been found. Missing initialisation ?")
203
+
204
+ def pop_variable(self, variable_name):
205
+ res = self.get_variable_value(variable_name, through_parent=False)
206
+ self.unregister_variable(variable_name, through_parent=False, delete_value=False)
207
+ return res
208
+
209
+ def get_variable_value(self, variable_name, attributes = [], through_parent=True):
210
+ # Get variable value
211
+ var_name = self.evaluate_variable_name(variable_name)
212
+ if self.exists_variable(var_name, through_parent=False):
213
+ res = self.__variables[var_name]
214
+ elif through_parent and self.parent:
215
+ return self.parent.get_variable_value(variable_name, attributes)
216
+ else:
217
+ raise FunctionalException("Variable '{}' has not been found. Missing initialisation ?".format(variable_name))
218
+
219
+ # If needed, call attributes
220
+ for attr in attributes:
221
+ res = getattr(res, attr)
222
+
223
+ return res
224
+
225
+ def get_value(self, expression, through_patent=True):
226
+ res = None
227
+
228
+ if self.is_variable_expression(expression, through_parent=through_patent):
229
+ try:
230
+ res = self.eval_variable_expression(expression, through_parent=through_patent)
231
+ except (SyntaxError, NameError):
232
+ raise FunctionalException("Expression '{}' is not evaluable. Is an initialization missing ?".format(expression))
233
+ else:
234
+ res = self.get_variable_value(expression, through_parent=through_patent)
235
+
236
+ return res
237
+
238
+ def set_value(self, expression, value, through_parent=True):
239
+ if self.is_variable_expression(expression, through_parent=through_parent):
240
+ try:
241
+ self.exec_set_variable_expression(expression, value, through_parent=through_parent)
242
+ except (SyntaxError, NameError):
243
+ raise FunctionalException("Expression '{}' is not evaluable. Is an initialization missing ?".format(expression))
244
+ else:
245
+ self.register_variable(expression, value)
246
+
247
+ def exists_variable(self, variable_name=None, expression=None, through_parent=True):
248
+ if expression is not None:
249
+ expression = expression.strip()
250
+ m_operator = re.search("[.[]", expression)
251
+ if m_operator:
252
+ # Return directly False if found operator is not an operator
253
+ # EKL: Why this check is done ???
254
+ if m_operator.group(0) not in ['.', '[']:
255
+ return False
256
+ # Begin by looking for variable existance
257
+ variable_name = expression[:m_operator.start()]
258
+ else:
259
+ variable_name = expression
260
+
261
+ var_name = self.evaluate_variable_name(variable_name)
262
+ res = var_name in self.__variables
263
+
264
+ # For expression, look if sub variable exist
265
+ if res and expression is not None and variable_name != expression:
266
+ try:
267
+ _ = self.eval_variable_expression(expression, through_parent=False)
268
+ except:
269
+ res = False
270
+ else:
271
+ res = True
272
+
273
+ if not res and through_parent and self.parent:
274
+ if expression is not None:
275
+ res = self.parent.exists_variable(expression=expression)
276
+ else:
277
+ res = self.parent.exists_variable(variable_name=variable_name)
278
+ return res
279
+
280
+ def is_variable_expression(self, expression, through_parent=True):
281
+ try:
282
+ var_name, expr_rest = self.__extract_expression_name(expression)
283
+ return len(var_name) > 0 and self.exists_variable(var_name, through_parent=through_parent) and len(expr_rest) > 0
284
+ except SyntaxError:
285
+ return False
286
+
287
+ def eval_variable_expression(self, expression, through_parent=True):
288
+ var_name, expr_rest = self.__extract_expression_name(expression)
289
+ var_value = self.get_variable_value(var_name, through_parent=through_parent)
290
+ new_var_name = self.new_local_variable_name(sub_name=self.__regular_variable_name(var_name))
291
+ locals()[new_var_name] = var_value
292
+
293
+ new_expr = f"{new_var_name}{expr_rest}"
294
+ try:
295
+ return eval(new_expr)
296
+ except Exception as exc:
297
+ try:
298
+ var_repr = Tools.represent_object(var_value)
299
+ except:
300
+ var_repr = str(var_value)
301
+ Tools.raise_same_exception_type(exc, f"{exc}\nVariable '{var_name}': {var_repr}", add_from=True)
302
+
303
+ def exec_set_variable_expression(self, expression, value, through_parent=True, log_level=logging.INFO):
304
+ self.__enter_variable_update_log_file()
305
+
306
+ var_name, expr_rest = self.__extract_expression_name(expression)
307
+ var_value = self.get_variable_value(var_name, through_parent=through_parent)
308
+ new_var_name = self.new_local_variable_name(sub_name=self.__regular_variable_name(var_name))
309
+ locals()[new_var_name] = var_value
310
+
311
+ new_var_value = self.new_local_variable_name(sub_name='value')
312
+ locals()[new_var_value] = value
313
+
314
+ new_expr = f"{new_var_name}{expr_rest}={new_var_value}"
315
+ try:
316
+ exec(new_expr)
317
+ except Exception as exc:
318
+ try:
319
+ var_repr = Tools.represent_object(var_value)
320
+ except:
321
+ var_repr = str(var_value)
322
+ # Tools.raise_same_exception_type(exc, f"{exc}\nVariable '{var_name}': {var_repr}", add_from=True)
323
+ raise FunctionalException(f"Failed to set value in variable expression (by exec): {expression}=[{value}] (type: {Typing.get_object_class_fullname(value)})\nVariable '{var_name}': {var_repr}") from exc
324
+ else:
325
+ if Tools.do_log(self.__logger_update, log_level):
326
+ self.__logger_update.log(log_level, f"Set value in variable expression (by exec): {expression}=[{value}] (type: {Typing.get_object_class_fullname(value)})")
327
+
328
+ def __regular_variable_name(self, name):
329
+ return "".join([c if re.match(r'\w', c) else '_' for c in name])
330
+
331
+ # def set_variable_expression(self, expression, value):
332
+ # var_name, expr_rest = self.__extract_expression_name(expression)
333
+ # if len(expr_rest) == 0:
334
+ # self.register_variable(expression, value)
335
+ # else:
336
+ # var_value = self.get_variable_value(var_name)
337
+ #
338
+ # while len(expr_rest) > 0:
339
+ #
340
+
341
+
342
+ def __extract_expression_name(self, expression):
343
+ regex_name = re.compile("^([^.[]+)(.*)")
344
+ m = regex_name.match(expression)
345
+ if not m:
346
+ raise SyntaxError(f"Expression [{expression}] is not a variable expression")
347
+ var_name, expr_rest = m.group(1), m.group(2)
348
+ var_name = self.evaluate_variable_name(var_name)
349
+ return var_name, expr_rest
350
+
351
+
352
+
353
+
354
+
@@ -0,0 +1,22 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ #################################################
4
+ # HolAdo (Holistic Automation do)
5
+ #
6
+ # (C) Copyright 2021-2025 by Eric Klumpp
7
+ #
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11
+
12
+ # The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
13
+ #################################################
14
+
15
+
16
+ from .common.tools.variable_convert_steps import *
17
+ from .common.tools.variable_new_steps import *
18
+ from .common.tools.variable_steps import *
19
+ from .common.tools.variable_verify_steps import *
20
+ from .scenario.function_steps import *
21
+ from .scenario.if_steps import *
22
+ from .scenario.loop_steps import *
@@ -0,0 +1,159 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ #################################################
4
+ # HolAdo (Holistic Automation do)
5
+ #
6
+ # (C) Copyright 2021-2025 by Eric Klumpp
7
+ #
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11
+
12
+ # The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
13
+ #################################################
14
+
15
+
16
+ from holado_test.scenario.step_tools import StepTools
17
+ from holado.common.context.session_context import SessionContext
18
+ from holado_test.behave.behave import * # @UnusedWildImport
19
+ from holado_core.common.exceptions.functional_exception import FunctionalException
20
+ from holado_core.common.exceptions.technical_exception import TechnicalException
21
+ import base64
22
+ import codecs
23
+ import logging
24
+ from holado_core.common.tables.table import Table
25
+ from holado_value.common.tables.value_table_with_header import ValueTableWithHeader
26
+ from holado_value.common.tables.value_table import ValueTable
27
+ from holado_core.common.tools.tools import Tools
28
+ from holado_python.standard_library.typing import Typing
29
+ from holado_value.common.tables.value_table_manager import ValueTableManager
30
+
31
+ logger = logging.getLogger(__name__)
32
+
33
+
34
+ def __get_scenario_context():
35
+ return SessionContext.instance().get_scenario_context()
36
+
37
+ def __get_text_interpreter():
38
+ return __get_scenario_context().get_text_interpreter()
39
+
40
+ def __get_unique_value_manager():
41
+ return SessionContext.instance().unique_value_manager
42
+
43
+ def __get_variable_manager():
44
+ return __get_scenario_context().get_variable_manager()
45
+
46
+
47
+
48
+
49
+
50
+ @Given(r"(?P<var_name>{Variable}) = convert list (?P<list_var_name>{Variable}) to list of object attribute (?P<attribute_name>{Str})")
51
+ def step_impl(context, var_name, list_var_name, attribute_name): # @DuplicatedSignature
52
+ var_name = StepTools.evaluate_variable_name(var_name)
53
+ attr_name = StepTools.evaluate_scenario_parameter(attribute_name)
54
+ list_obj = StepTools.evaluate_variable_value(list_var_name)
55
+
56
+ res = []
57
+ for index, obj in enumerate(list_obj):
58
+ if hasattr(obj, attr_name):
59
+ attr_val = getattr(obj, attr_name)
60
+ if Tools.do_log(logger, logging.DEBUG):
61
+ logger.debug(f"Result list - add attribute value [{attr_val}] (type: {Typing.get_object_class_fullname(attr_val)} ; dir: {dir(attr_val)})")
62
+ res.append(attr_val)
63
+ else:
64
+ raise FunctionalException(f"In list, object of index {index} hasn't attribute '{attr_name}'")
65
+
66
+ __get_variable_manager().register_variable(var_name, res)
67
+
68
+ @Step(r"(?P<var_name>{Variable}) = convert object value (?P<object_value>{Str}) to string")
69
+ def step_impl(context, var_name, object_value):
70
+ var_name = StepTools.evaluate_variable_name(var_name)
71
+ object_value = StepTools.evaluate_variable_value(object_value)
72
+ if isinstance(object_value, bytes):
73
+ res = object_value.decode('utf-8')
74
+ else:
75
+ res = str(object_value)
76
+ __get_variable_manager().register_variable(var_name, res)
77
+
78
+ @Step(r"(?P<var_name>{Variable}) = convert object value (?P<object_value>{Str}) to integer")
79
+ def step_impl(context, var_name, object_value):
80
+ var_name = StepTools.evaluate_variable_name(var_name)
81
+ object_value = StepTools.evaluate_variable_value(object_value)
82
+ __get_variable_manager().register_variable(var_name, int(object_value))
83
+
84
+ @Step(r"(?P<var_name>{Variable}) = convert object value (?P<object_value>{Str}) to list")
85
+ def step_impl(context, var_name, object_value):
86
+ var_name = StepTools.evaluate_variable_name(var_name)
87
+ object_value = StepTools.evaluate_variable_value(object_value)
88
+
89
+ if isinstance(object_value, Table):
90
+ table = object_value
91
+ if table.nb_columns > 1 and table.nb_rows > 1:
92
+ raise FunctionalException(f"Table must have only one column or only one row (table has {table.nb_columns} and {table.nb_rows})")
93
+
94
+ if table.nb_columns > 1 and table.nb_rows == 1:
95
+ row = table.get_row(0)
96
+ elif table.nb_rows > 1 and table.nb_columns == 1:
97
+ row = table.get_column(0)
98
+ else:
99
+ row = None
100
+
101
+ if row is not None:
102
+ if ValueTableManager.is_value_table(table):
103
+ res = [c.value for c in row]
104
+ else:
105
+ res = [c.content for c in row]
106
+ else:
107
+ res = []
108
+ else:
109
+ res = list(object_value)
110
+
111
+ __get_variable_manager().register_variable(var_name, res)
112
+
113
+ @Step(r"(?P<var_name>{Variable}) = convert object value (?P<object_value>{Str}) to dict")
114
+ def step_impl(context, var_name, object_value):
115
+ var_name = StepTools.evaluate_variable_name(var_name)
116
+ object_value = StepTools.evaluate_variable_value(object_value)
117
+ __get_variable_manager().register_variable(var_name, dict(object_value))
118
+
119
+ @Step(r"(?P<var_name>{Variable}) = convert object value (?P<object_value>{Str}) to base 64")
120
+ def step_impl(context, var_name, object_value):
121
+ var_name = StepTools.evaluate_variable_name(var_name)
122
+ object_value = StepTools.evaluate_variable_value(object_value)
123
+ if isinstance(object_value, bytes):
124
+ value_bytes = object_value
125
+ elif isinstance(object_value, str):
126
+ value_bytes = object_value.encode('utf-8')
127
+ else:
128
+ raise TechnicalException(f"Unexpected object value type {Typing.get_object_class_fullname(object_value)} (allowed types: string, bytes)")
129
+ res = base64.b64encode(value_bytes)
130
+ __get_variable_manager().register_variable(var_name, res)
131
+
132
+ @Step(r"(?P<var_name>{Variable}) = convert hex string (?P<object_value>{Str}) to bytes")
133
+ def step_impl(context, var_name, object_value):
134
+ var_name = StepTools.evaluate_variable_name(var_name)
135
+ object_value = StepTools.evaluate_scenario_parameter(object_value)
136
+ if isinstance(object_value, str):
137
+ res = codecs.decode(object_value, 'hex_codec')
138
+ else:
139
+ raise TechnicalException(f"Unexpected value type {Typing.get_object_class_fullname(object_value)}")
140
+ __get_variable_manager().register_variable(var_name, res)
141
+
142
+ @Step(r"(?P<var_name>{Variable}) = convert hex string (?P<object_value>{Str}) to base 64")
143
+ def step_impl(context, var_name, object_value):
144
+ var_name = StepTools.evaluate_variable_name(var_name)
145
+ execute_steps(u"""
146
+ {keyword} __{var_name}_BYTES__ = convert hex string {object_value} to bytes
147
+ {keyword} {var_name} = convert object value __{var_name}_BYTES__ to base 64
148
+ """.format(keyword=context.step.keyword, var_name=var_name, object_value=object_value))
149
+
150
+
151
+ @Step(r"(?P<var_name>{Variable}) = convert base 64 (?P<value>{Str}) to bytes")
152
+ def step_impl(context, var_name, value):
153
+ var_name = StepTools.evaluate_variable_name(var_name)
154
+ value = StepTools.evaluate_scenario_parameter(value)
155
+ if not isinstance(value, str):
156
+ raise TechnicalException(f"Unexpected value type {Typing.get_object_class_fullname(value)} (allowed types: string)")
157
+ res = base64.b64decode(value)
158
+ __get_variable_manager().register_variable(var_name, res)
159
+
@@ -0,0 +1,130 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ #################################################
4
+ # HolAdo (Holistic Automation do)
5
+ #
6
+ # (C) Copyright 2021-2025 by Eric Klumpp
7
+ #
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11
+
12
+ # The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
13
+ #################################################
14
+
15
+
16
+ from holado_value.common.tables.value_table_manager import ValueTableManager
17
+ from holado_test.scenario.step_tools import StepTools
18
+ from holado.common.context.session_context import SessionContext
19
+ from holado_test.behave.behave import * # @UnusedWildImport
20
+ import logging
21
+ from holado_core.common.exceptions.functional_exception import FunctionalException
22
+ from holado_test.behave.scenario.behave_step_tools import BehaveStepTools
23
+ from holado_value.common.tables.converters.value_table_converter import ValueTableConverter
24
+ from holado_python.standard_library.typing import Typing
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+
29
+ def __get_scenario_context():
30
+ return SessionContext.instance().get_scenario_context()
31
+
32
+ def __get_text_interpreter():
33
+ return __get_scenario_context().get_text_interpreter()
34
+
35
+ def __get_unique_value_manager():
36
+ return SessionContext.instance().unique_value_manager
37
+
38
+ def __get_variable_manager():
39
+ return __get_scenario_context().get_variable_manager()
40
+
41
+
42
+
43
+
44
+ @Given(r"(?P<var_name>{Variable}) = new (?P<type_name>{Str}) with attributes")
45
+ def step_impl(context, var_name, type_name):
46
+ var_name = StepTools.evaluate_variable_name(var_name)
47
+ type_name = StepTools.evaluate_string_parameter(type_name)
48
+ table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
49
+
50
+ # Get class type
51
+ class_ = Typing.get_class_for_type_name(type_name)
52
+
53
+ # Create object
54
+ obj = class_()
55
+ ValueTableManager.set_object_attributes_according_name_value_table(obj, table)
56
+
57
+ # Store in variable
58
+ __get_variable_manager().register_variable(var_name, obj)
59
+
60
+ @Given(r"(?P<var_name>{Variable}) = new (?P<type_name>{Str}) with constructor parameters")
61
+ def step_impl(context, var_name, type_name): # @DuplicatedSignature
62
+ var_name = StepTools.evaluate_variable_name(var_name)
63
+ type_name = StepTools.evaluate_string_parameter(type_name)
64
+
65
+ # Get class type
66
+ class_ = Typing.get_class_for_type_name(type_name)
67
+
68
+ # Create object
69
+ table = BehaveStepTools.convert_step_table_2_value_table_with_header(context.table)
70
+ unnamed_parameters, named_parameters = ValueTableConverter.convert_name_value_table_2_list_and_dict(table)
71
+ logger.info("creating new '{}' with parameters {} and {}".format(class_, unnamed_parameters, named_parameters))
72
+ obj = class_(*unnamed_parameters, **named_parameters)
73
+
74
+ # Store in variable
75
+ __get_variable_manager().register_variable(var_name, obj)
76
+
77
+ @Given(r"(?P<var_name>{Variable}) = list")
78
+ def step_impl(context, var_name):
79
+ var_name = StepTools.evaluate_variable_name(var_name)
80
+ table = BehaveStepTools.convert_step_table_2_value_table(context.table)
81
+ if table.nb_columns > 1 and table.nb_rows > 1:
82
+ raise FunctionalException("Table must be a single column or a single row")
83
+
84
+ if table.nb_rows > 1:
85
+ res = list(table.get_column(0).cells_value)
86
+ else:
87
+ res = list(table.get_row(0).cells_value)
88
+
89
+ # Store in variable
90
+ __get_variable_manager().register_variable(var_name, res)
91
+
92
+ @Given(r"(?P<var_name>{Variable}) = multiline text")
93
+ def step_impl(context, var_name):
94
+ var_name = StepTools.evaluate_variable_name(var_name)
95
+ res = BehaveStepTools.get_step_multiline_text(context)
96
+ __get_variable_manager().register_variable(var_name, res)
97
+
98
+ @Given(r"(?P<var_name>{Variable}) = new unique integer")
99
+ def step_impl(context, var_name):
100
+ var_name = StepTools.evaluate_variable_name(var_name)
101
+ res = __get_unique_value_manager().new_integer()
102
+ __get_variable_manager().register_variable(var_name, res)
103
+
104
+ @Given(r"(?P<var_name>{Variable}) = new unique HEX integer")
105
+ def step_impl(context, var_name):
106
+ var_name = StepTools.evaluate_variable_name(var_name)
107
+ res = __get_unique_value_manager().new_hex()
108
+ __get_variable_manager().register_variable(var_name, res)
109
+
110
+ @Given(r"(?P<var_name>{Variable}) = new unique HEX integer \(length: (?P<length>{Int})\)")
111
+ def step_impl(context, var_name, length):
112
+ var_name = StepTools.evaluate_variable_name(var_name)
113
+ length = StepTools.evaluate_scenario_parameter(length)
114
+ res = __get_unique_value_manager().new_hex(length=length)
115
+ __get_variable_manager().register_variable(var_name, res)
116
+
117
+ @Given(r"(?P<var_name>{Variable}) = new unique string")
118
+ def step_impl(context, var_name):
119
+ var_name = StepTools.evaluate_variable_name(var_name)
120
+ res = __get_unique_value_manager().new_string()
121
+ __get_variable_manager().register_variable(var_name, res)
122
+
123
+ @Given(r"(?P<var_name>{Variable}) = new unique string \(padding length: (?P<pad_len>{Int})\)")
124
+ def step_impl(context, var_name, pad_len):
125
+ var_name = StepTools.evaluate_variable_name(var_name)
126
+ pad_len = StepTools.evaluate_scenario_parameter(pad_len)
127
+ res = __get_unique_value_manager().new_string(padding_length=pad_len)
128
+ __get_variable_manager().register_variable(var_name, res)
129
+
130
+