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,547 @@
1
+
2
+ #################################################
3
+ # HolAdo (Holistic Automation do)
4
+ #
5
+ # (C) Copyright 2021-2025 by Eric Klumpp
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8
+ #
9
+ # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
10
+
11
+ # The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
12
+ #################################################
13
+
14
+ from holado.common.context.session_context import SessionContext
15
+ import logging
16
+ import re
17
+ from holado_core.common.exceptions.functional_exception import FunctionalException
18
+ from holado_scripting.common.tools.variable_manager import VariableManager
19
+ from holado_core.common.tools.tools import Tools
20
+ from holado_value.common.tables.value_table import ValueTable
21
+ from holado_value.common.tables.value_table_with_header import ValueTableWithHeader
22
+ from holado_core.common.tables.table_with_header import TableWithHeader
23
+ from holado_value.common.tables.converters.value_table_converter import ValueTableConverter
24
+ from holado_core.common.tables.table import Table
25
+ from holado_core.common.tables.table_row import TableRow
26
+ from holado_core.common.tables.table_cell import TableCell
27
+ from holado_value.common.tables.value_table_row import ValueTableRow
28
+ from holado_value.common.tables.value_table_cell import ValueTableCell
29
+ from holado_value.common.tools.value_types import ValueTypes
30
+ from holado_value.common.tables.comparators.table_2_value_table_with_header_comparator import Table2ValueTable_WithHeaderComparator
31
+ from holado_value.common.tables.comparators.table_2_value_table_comparator import Table2ValueTable_Comparator
32
+ from holado_core.common.tables.table_manager import TableManager
33
+ from holado_scripting.common.tools.evaluate_parameters import EvaluateParameters
34
+ from holado_core.common.exceptions.technical_exception import TechnicalException
35
+ from holado.holado_config import Config
36
+ from holado_python.standard_library.typing import Typing
37
+ from holado_value.common.tables.value_table_manager import ValueTableManager
38
+
39
+ logger = logging.getLogger(__name__)
40
+
41
+
42
+
43
+ class SRE(object):
44
+ """
45
+ Step RegExp
46
+ All registered step parameter types are added in this class as public attributes,
47
+ with type name as attribute name, and pattern as associated value
48
+ """
49
+
50
+ @staticmethod
51
+ def all_as_dict():
52
+ return Typing.get_object_attribute_values_by_name(SRE)
53
+
54
+
55
+ #TODO: make it a service in SessionContext
56
+ class StepTools(object):
57
+
58
+ __registered_types = {}
59
+
60
+ @staticmethod
61
+ def _get_scenario_context():
62
+ return SessionContext.instance().get_scenario_context()
63
+
64
+ @staticmethod
65
+ def _get_expression_evaluator():
66
+ return StepTools._get_scenario_context().get_expression_evaluator()
67
+
68
+ @staticmethod
69
+ def _get_text_interpreter():
70
+ return StepTools._get_scenario_context().get_text_interpreter()
71
+
72
+ @staticmethod
73
+ def _get_variable_manager() -> VariableManager:
74
+ return StepTools._get_scenario_context().get_variable_manager()
75
+
76
+ @staticmethod
77
+ def unescape_string(text):
78
+ #res = bytes(text, "utf-8").decode("unicode_escape")
79
+ res = text.encode('latin-1').decode('unicode-escape')
80
+
81
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
82
+ logger.trace("unescaping string [{}] -> [{}]".format(text, res))
83
+ return res
84
+
85
+ @staticmethod
86
+ def extract_string_value(text_param):
87
+ return StepTools._get_expression_evaluator().extract_string_value(text_param)
88
+
89
+ @staticmethod
90
+ def evaluate_string_parameter(text_param, do_interpret=True, log_level=logging.DEBUG):
91
+ eval_params = EvaluateParameters.default().with_interpret(do_interpret).with_eval(False).with_result_type(str)
92
+ _, res = StepTools._get_expression_evaluator().evaluate_expression(text_param, eval_params=eval_params, log_level=Tools.do_log_level(log_level, logging.TRACE)) # @UndefinedVariable
93
+ if Tools.do_log_if_objects_are_different(logger, log_level, text_param, res):
94
+ logger.log(log_level, "evaluate_string_parameter: [{}] -> [{}]".format(text_param, res))
95
+ return res
96
+
97
+ @staticmethod
98
+ def evaluate_variable_name(text_param, log_level=logging.DEBUG):
99
+ if text_param is None:
100
+ return None
101
+
102
+ eval_params = EvaluateParameters.default_without_eval(False).with_result_type(str)
103
+ res = StepTools._get_text_interpreter().interpret(text_param, eval_params=eval_params, log_level=Tools.do_log_level(log_level, logging.TRACE)) # @UndefinedVariable
104
+ if Tools.do_log_if_objects_are_different(logger, log_level, text_param, res):
105
+ logger.log(log_level, f"evaluate_variable_name: [{text_param}] -> [{res}] (type: {Typing.get_object_class_fullname(res)})")
106
+ return res
107
+
108
+ @staticmethod
109
+ def evaluate_variable_value(text_param, log_level=logging.DEBUG):
110
+ if text_param is None:
111
+ return None
112
+
113
+ eval_params = EvaluateParameters.default_without_eval(False)
114
+ _, res = StepTools._get_expression_evaluator().evaluate_expression(text_param, eval_params=eval_params, log_level=Tools.do_log_level(log_level, logging.TRACE)) # @UndefinedVariable
115
+ if Tools.do_log_if_objects_are_different(logger, log_level, text_param, res):
116
+ logger.log(log_level, f"evaluate_variable_name: [{text_param}] -> [{res}] (type: {Typing.get_object_class_fullname(res)})")
117
+ return res
118
+
119
+ @staticmethod
120
+ def evaluate_scenario_parameter(text_param, log_level=logging.DEBUG):
121
+ if text_param is None:
122
+ return None
123
+
124
+ eval_params = EvaluateParameters.default().with_raise_on_eval_error(False)
125
+ _, res = StepTools._get_expression_evaluator().evaluate_expression(text_param, eval_params=eval_params, log_level=Tools.do_log_level(log_level, logging.TRACE)) # @UndefinedVariable
126
+ if Tools.do_log_if_objects_are_different(logger, log_level, text_param, res):
127
+ logger.log(log_level, f"evaluate_scenario_parameter: [{text_param}] -> [{res}] (type: {Typing.get_object_class_fullname(res)})")
128
+ return res
129
+
130
+ @staticmethod
131
+ def evaluate_list_scenario_parameter(text_param, param_name, log_level=logging.DEBUG):
132
+ res = StepTools.evaluate_scenario_parameter(text_param, log_level=log_level)
133
+ if isinstance(res, str):
134
+ regex = re.compile(r"^\s*\[(.*)\]\s*$")
135
+ m = regex.match(res)
136
+ if m:
137
+ param_names = m.group(1).split(',')
138
+ res = [StepTools.evaluate_scenario_parameter(pn.strip()) for pn in param_names]
139
+ else:
140
+ raise FunctionalException(f"Parameter '{param_name}' must be specified in a list format (ex: \"['Name1', 'Name2',...]\")")
141
+ if Tools.do_log_if_objects_are_different(logger, log_level, text_param, res):
142
+ logger.log(log_level, f"evaluate_list_scenario_parameter for parameter '{param_name}': {text_param} -> {res}")
143
+ return res
144
+
145
+ @classmethod
146
+ def replace_variable_names(cls, text, log_level=logging.DEBUG):
147
+ res = text
148
+ if res is None:
149
+ return None
150
+
151
+ pattern_var = re.compile(SRE.VariableName)
152
+ pos = 0
153
+ m = pattern_var.search(res, pos)
154
+ while m:
155
+ var_name = cls._get_variable_manager().evaluate_variable_name(m.group())
156
+ if cls._get_variable_manager().exists_variable(var_name):
157
+ res = res[:m.start()] + var_name + res[m.end():]
158
+ pos = m.start() + len(var_name)
159
+ else:
160
+ pos = m.end()
161
+ m = pattern_var.search(res, pos)
162
+
163
+ if res != text:
164
+ if Tools.do_log(logger, log_level):
165
+ logger.log(log_level, f"replace_variable_names: [{text}] -> [{res}]")
166
+ return res
167
+
168
+ @classmethod
169
+ def get_step_multiline_text(cls, *args, **kwargs):
170
+ """
171
+ Get the step multiline text interpreted.
172
+ Note: parameter context can be the step context or the step object.
173
+ """
174
+ raise NotImplementedError
175
+
176
+
177
+ @classmethod
178
+ def get_step_table(cls, *args, **kwargs):
179
+ """
180
+ Get the step table interpreted.
181
+ Note: parameter context can be the step context or the step object.
182
+ """
183
+ raise NotImplementedError
184
+
185
+
186
+ @classmethod
187
+ def convert_step_table_2_value_table(cls, table, do_eval_once=True):
188
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
189
+ logger.trace(f"Converting step table to scenario table (step table = {table})")
190
+
191
+ res = ValueTable()
192
+
193
+ # Set body
194
+ previous_row = None
195
+ for row in cls._get_table_rows(table):
196
+ srow = cls._convert_step_table_row_2_value_table_row(row, previous_row, do_eval_once=do_eval_once)
197
+ res.add_row(row=srow)
198
+ previous_row = srow
199
+
200
+ # Manage one cell table referencing a variable containing a table
201
+ res = cls._extract_inner_table_if_present(res, do_eval_once=do_eval_once)
202
+
203
+ if Tools.do_log(logger, logging.DEBUG):
204
+ logger.debug(f"Converting step table to scenario table (step table = {table}) => {res}")
205
+ return res
206
+
207
+ @classmethod
208
+ def convert_step_table_2_value_table_with_header(cls, table, do_eval_once=True) -> ValueTableWithHeader :
209
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
210
+ logger.trace(f"Converting step table to scenario table with header (step table = {table})")
211
+ if table is None:
212
+ raise FunctionalException("This step needs a table")
213
+
214
+ res = ValueTableWithHeader()
215
+
216
+ # Set header
217
+ res.header = cls._convert_step_table_header_2_table_header(cls._get_table_header(table))
218
+
219
+ # Set body
220
+ previous_row = None
221
+ for row in cls._get_table_rows(table):
222
+ srow = cls._convert_step_table_row_2_value_table_row(row, previous_row, do_eval_once=do_eval_once)
223
+ res.add_row(row=srow)
224
+ previous_row = srow
225
+
226
+ # Manage one cell table referencing a variable containing a table
227
+ res = cls._extract_inner_table_if_present(res, do_eval_once=do_eval_once)
228
+
229
+ if Tools.do_log(logger, logging.DEBUG):
230
+ logger.debug(f"Converting step table to scenario table with header (step table = {table}) => {res}")
231
+ return res
232
+
233
+ @classmethod
234
+ def _extract_inner_table_if_present(cls, table, do_eval_once=True):
235
+ res = table
236
+ if isinstance(table, TableWithHeader):
237
+ if res.nb_columns == 1 and res.nb_rows == 0:
238
+ cell_content = res.header.get_cell(0).content
239
+ if cls._get_variable_manager().exists_variable(variable_name=cell_content):
240
+ value = cls._get_variable_manager().get_variable_value(cell_content)
241
+ if ValueTableManager.is_value_table(value):
242
+ res = value
243
+ elif isinstance(value, TableWithHeader):
244
+ res = ValueTableConverter.convert_table_2_value_table(value, do_eval_once=do_eval_once)
245
+ elif isinstance(value, Table):
246
+ raise FunctionalException(f"The table in variable '{cell_content}' is expected to be with header")
247
+ elif isinstance(table, Table):
248
+ if res.nb_columns == 1 and res.nb_rows == 1:
249
+ value = res.get_row(0).get_cell(0).value
250
+ if ValueTableManager.is_value_table(value):
251
+ res = value
252
+ elif isinstance(value, Table):
253
+ res = ValueTableConverter.convert_table_2_value_table(value, do_eval_once=do_eval_once)
254
+
255
+ if res != table and Tools.do_log(logger, logging.DEBUG):
256
+ logger.debug(f"Extracted inner table: {table} => {res}")
257
+ return res
258
+
259
+ @classmethod
260
+ def _convert_step_table_header_2_table_header(cls, header):
261
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
262
+ logger.trace("Converting step table header to table header")
263
+
264
+ res = TableRow()
265
+
266
+ for hcell in header:
267
+ cell = TableCell(hcell)
268
+
269
+ # TODO: manage merged header cells
270
+
271
+ res.add_cell(cell=cell)
272
+
273
+ return res
274
+
275
+ @classmethod
276
+ def _convert_step_table_row_2_value_table_row(cls, row, previous_row, do_eval_once=True): # @UnusedVariable
277
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
278
+ logger.trace("Converting behave table row to scenario table row")
279
+
280
+ res = ValueTableRow()
281
+
282
+ for cell in row:
283
+ scell = ValueTableCell(cell, do_eval_once=do_eval_once)
284
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
285
+ logger.trace("Converting cell [{}] -> scenario table cell (content=[{}] ; value_type='{}')".format(cell, scell.content, scell.value_type.name))
286
+
287
+ # TODO: manage merged cells
288
+
289
+ res.add_cell(cell=scell)
290
+
291
+ return res
292
+
293
+
294
+ @classmethod
295
+ def has_table_header(cls, table):
296
+ """
297
+ Return True if scenario table has a header (for HolAdo framework).
298
+ For HolAdo framework, table header names are all texts without quotes.
299
+ """
300
+ internal_header = cls._get_table_header(table)
301
+ if internal_header is None:
302
+ return False
303
+
304
+ for cell in internal_header:
305
+ scell = ValueTableCell(cell)
306
+ if not scell.content_type == ValueTypes.Symbol:
307
+ return False
308
+
309
+ return True
310
+
311
+ @classmethod
312
+ def _has_table_header(cls, table):
313
+ """Return True if scenario table has a header (for internal tool interpreting scenario text)."""
314
+ return cls._get_table_header(table) is not None
315
+
316
+ @classmethod
317
+ def _is_scenario_step_table(cls, table):
318
+ """Return if a table is a scenario step table."""
319
+ raise NotImplementedError()
320
+
321
+ @classmethod
322
+ def _get_table_header(cls, table):
323
+ """Return iterable object on scenario table header (for internal tool interpreting scenario text)."""
324
+ raise NotImplementedError()
325
+
326
+ @classmethod
327
+ def _get_table_rows(cls, table):
328
+ """Return iterable object on scenario table rows (for internal tool interpreting scenario text)."""
329
+ raise NotImplementedError()
330
+
331
+ @classmethod
332
+ def represent_step_table(cls, table, indent=0):
333
+ res_list = []
334
+
335
+ header = cls._get_table_header(table)
336
+ if header:
337
+ res_list.append("| " + " | ".join(header) + " |")
338
+
339
+ for row in cls._get_table_rows(table):
340
+ res_list.append("| " + " | ".join(row) + " |")
341
+
342
+ return Tools.indent_string(indent, "\n".join(res_list))
343
+
344
+
345
+ @classmethod
346
+ def then_table_is(cls, table_obtained, table_expected, raise_exception=True):
347
+ is_with_header = TableManager.is_table_with_header(table_obtained)
348
+ if cls._is_scenario_step_table(table_expected):
349
+ if is_with_header:
350
+ table_expected = cls.convert_step_table_2_value_table_with_header(table_expected)
351
+ else:
352
+ table_expected = cls.convert_step_table_2_value_table(table_expected)
353
+
354
+ if is_with_header:
355
+ comparator = Table2ValueTable_WithHeaderComparator()
356
+ else:
357
+ comparator = Table2ValueTable_Comparator()
358
+ try:
359
+ return comparator.equals(table_obtained, table_expected, is_obtained_vs_expected=True, raise_exception=raise_exception)
360
+ except FunctionalException as exc:
361
+ raise FunctionalException(f"Tables are different (obtained = table 1 ; expected = table 2):\n{Tools.indent_string(4, exc.message)}") from exc
362
+
363
+ @classmethod
364
+ def then_table_contains(cls, table_obtained, table_expected, raise_exception=True):
365
+ is_with_header = TableManager.is_table_with_header(table_obtained)
366
+ if cls._is_scenario_step_table(table_expected):
367
+ if is_with_header:
368
+ table_expected = cls.convert_step_table_2_value_table_with_header(table_expected)
369
+ else:
370
+ table_expected = cls.convert_step_table_2_value_table(table_expected)
371
+
372
+ if is_with_header:
373
+ comparator = Table2ValueTable_WithHeaderComparator()
374
+ else:
375
+ comparator = Table2ValueTable_Comparator()
376
+
377
+ try:
378
+ return comparator.contains_rows(table_obtained, table_expected, is_obtained_vs_expected=True, raise_exception=raise_exception)
379
+ except FunctionalException as exc:
380
+ raise FunctionalException(f"Obtained table doesn't contain expected table (obtained = table 1 ; expected = table 2):\n{Tools.indent_string(4, exc.message)}") from exc
381
+
382
+ @classmethod
383
+ def then_table_doesnt_contain(cls, table_obtained, table_expected, raise_exception=True):
384
+ is_with_header = TableManager.is_table_with_header(table_obtained)
385
+ if cls._is_scenario_step_table(table_expected):
386
+ if is_with_header:
387
+ table_expected = cls.convert_step_table_2_value_table_with_header(table_expected)
388
+ else:
389
+ table_expected = cls.convert_step_table_2_value_table(table_expected)
390
+
391
+ if is_with_header:
392
+ comparator = Table2ValueTable_WithHeaderComparator()
393
+ else:
394
+ comparator = Table2ValueTable_Comparator()
395
+
396
+ try:
397
+ return comparator.doesnt_contain_rows(table_obtained, table_expected, is_obtained_vs_expected=True, raise_exception=raise_exception)
398
+ except FunctionalException as exc:
399
+ raise FunctionalException(f"Obtained table contains at least a row of expected table (obtained = table 1 ; expected = table 2):\n{Tools.indent_string(4, exc.message)}") from exc
400
+
401
+ @classmethod
402
+ def format_step(cls, step_str, keyword=None, table=None, text=None):
403
+ step_str = step_str.strip()
404
+
405
+ if keyword is not None:
406
+ res = f"{keyword} {step_str}"
407
+ else:
408
+ res = step_str
409
+
410
+ if table is not None:
411
+ if isinstance(table, Table):
412
+ rendered_table = table.represent(indent=4)
413
+ else:
414
+ raise TechnicalException(f"Unmanaged table of type '{Typing.get_object_class_fullname(table)}'")
415
+ res = u"{res}\n{table}".format(res=res, table=rendered_table)
416
+ elif text is not None:
417
+ rendered_text = text.replace(u'"""', u'\\"\\"\\"')
418
+ rendered_text = Tools.indent_string(4, u'"""\n' + rendered_text + '\n"""\n')
419
+ res = u"{res}\n{text}".format(res=res, text=rendered_text)
420
+
421
+ return res
422
+
423
+ @classmethod
424
+ def format_steps_with(cls, steps, format_with_list):
425
+ res = steps
426
+ for form in format_with_list:
427
+ _, form_eval = cls._get_expression_evaluator().evaluate_expression(form, log_level=logging.TRACE) # @UndefinedVariable
428
+ if form_eval == form:
429
+ raise FunctionalException(f"Not able to evaluation expression [{form}]. Is missing its initialization ?")
430
+ res = res.replace(f"${{{form}}}", str(form_eval))
431
+ return res
432
+
433
+ @classmethod
434
+ def format_steps_as_parameter(cls, steps, indent):
435
+ return "\n" + Tools.indent_string(indent, steps+'\n')
436
+
437
+ @classmethod
438
+ def register_type(cls, type_name, pattern, eval_func, **eval_func_kwargs):
439
+ # Register type in behave
440
+ def func(text):
441
+ return eval_func(text, **eval_func_kwargs)
442
+ func.pattern = pattern
443
+
444
+ # Add type in SRE class
445
+ setattr(SRE, type_name, pattern)
446
+
447
+ # Store type as registered
448
+ new_type = {'pattern':pattern, 'function':func}
449
+ if type_name in cls.__registered_types:
450
+ logger.warning(f"Overriding step parameter type '{type_name}': {cls.__registered_types[type_name]['pattern']} -> {new_type['pattern']}")
451
+ import traceback
452
+ logging.warning("".join(traceback.format_list(traceback.extract_stack())))
453
+ cls.__registered_types[type_name] = new_type
454
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
455
+ logger.trace(f"Registered step parameter type '{type_name}'")
456
+
457
+ @classmethod
458
+ def get_registered_type_names(cls):
459
+ return list(cls.__registered_types)
460
+
461
+ @classmethod
462
+ def get_registered_type_pattern(cls, type_name):
463
+ if type_name not in cls.__registered_types:
464
+ raise TechnicalException(f"Type '{type_name}' is not registered")
465
+ return cls.__registered_types[type_name]['pattern']
466
+
467
+ @classmethod
468
+ def get_registered_type_function(cls, type_name):
469
+ if type_name not in cls.__registered_types:
470
+ raise TechnicalException(f"Type '{type_name}' is not registered")
471
+ return cls.__registered_types[type_name]['function']
472
+
473
+ @classmethod
474
+ def register_default_types(cls):
475
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
476
+ logger.trace(f"Registering step parameter types...")
477
+ ##### Old implementation:
478
+ # __step_regex = {
479
+ # 'variable name': r"[\w${}]+",
480
+ # 'variable expression': r"(?:(?! = | by )[^=])+",
481
+ # 'any parameter': r"(?:[^' ]+|.*)",
482
+ # 'float parameter': r"(?:[^' ]+|\d+(?:\.\d*)?)",
483
+ # 'int parameter': r"(?:[^' ]+|\d+)",
484
+ # 'str parameter': r"(?:[^' ]+|'[^']*'(?:%|#)?)",
485
+ # 'str parameter with quotes': r"(?:[^' ]+|'.*'(?:%|#)?)",
486
+ # }
487
+
488
+ regex_suffix = f"(?:{Config.DYNAMIC_SYMBOL}|{Config.THREAD_DYNAMIC_SYMBOL}|{Config.UNIQUE_SYMBOL})?"
489
+ regex_suffix_chars = f"{Config.DYNAMIC_SYMBOL}{Config.THREAD_DYNAMIC_SYMBOL}{Config.UNIQUE_SYMBOL}"
490
+
491
+ # Variable types
492
+ cls.register_type('VariableName',
493
+ r"[\w$\{{\}}]+{suffix}".format(suffix=regex_suffix),
494
+ StepTools.evaluate_variable_name)
495
+ # cls.register_type('VariableExpression', r"(?:(?! = | by )[^=])+", StepTools.evaluate_variable_name)
496
+ cls.register_type('VariableExpression',
497
+ r"[\w\-\+$\{{\}}\[\]\(\)\.:,'{suffix_chars}]+".format(suffix_chars=regex_suffix_chars),
498
+ StepTools.evaluate_variable_name)
499
+ cls.register_type('Variable',
500
+ cls.get_registered_type_pattern('VariableExpression'),
501
+ StepTools.evaluate_variable_name)
502
+
503
+ cls.register_type('Any',
504
+ r".*",
505
+ StepTools.evaluate_scenario_parameter)
506
+ cls.register_type('AnyLazy',
507
+ r".*?",
508
+ StepTools.evaluate_scenario_parameter)
509
+ cls.register_type('Float',
510
+ r"{Variable}|(?:-)?\d+(?:\.\d*)?".format(Variable=cls.get_registered_type_pattern('Variable')),
511
+ StepTools.evaluate_scenario_parameter)
512
+ cls.register_type('Int',
513
+ r"{Variable}|(?:-)?\d+".format(Variable=cls.get_registered_type_pattern('Variable')),
514
+ StepTools.evaluate_scenario_parameter)
515
+ cls.register_type('Boolean',
516
+ r"{Variable}|True|False".format(Variable=cls.get_registered_type_pattern('Variable')),
517
+ StepTools.evaluate_scenario_parameter)
518
+
519
+ # String types
520
+ cls.register_type('Bytes',
521
+ r"{Variable}|b'[^']*'".format(Variable=cls.get_registered_type_pattern('Variable')),
522
+ StepTools.evaluate_scenario_parameter)
523
+ cls.register_type('Str',
524
+ r"{Variable}|r?'[^']*'{suffix}".format(Variable=cls.get_registered_type_pattern('Variable'), suffix=regex_suffix),
525
+ StepTools.evaluate_scenario_parameter)
526
+ cls.register_type('RawStr',
527
+ r"{Variable}|'.*'{suffix}".format(Variable=cls.get_registered_type_pattern('Variable'), suffix=regex_suffix),
528
+ StepTools.evaluate_string_parameter)
529
+ cls.register_type('AnyStr',
530
+ r"{Variable}|'.*'{suffix}".format(Variable=cls.get_registered_type_pattern('Variable'), suffix=regex_suffix),
531
+ StepTools.evaluate_scenario_parameter)
532
+ cls.register_type('Code',
533
+ r"[^ ]+",
534
+ StepTools.evaluate_scenario_parameter)
535
+
536
+ # Generic types
537
+ cls.register_type('Enum',
538
+ r"{Variable}|\w+".format(Variable=cls.get_registered_type_pattern('Variable')),
539
+ StepTools.evaluate_scenario_parameter)
540
+ cls.register_type('Dict',
541
+ r"{Variable}|\{{.*\}}".format(Variable=cls.get_registered_type_pattern('Variable')),
542
+ StepTools.evaluate_scenario_parameter)
543
+ cls.register_type('List',
544
+ r"{Variable}|\[.*\]".format(Variable=cls.get_registered_type_pattern('Variable')),
545
+ StepTools.evaluate_list_scenario_parameter)
546
+
547
+
@@ -0,0 +1,57 @@
1
+
2
+ #################################################
3
+ # HolAdo (Holistic Automation do)
4
+ #
5
+ # (C) Copyright 2021-2025 by Eric Klumpp
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8
+ #
9
+ # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
10
+
11
+ # The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
12
+ #################################################
13
+
14
+ from holado.common.context.session_context import SessionContext
15
+ import logging
16
+ from holado_core.common.tables.table import Table
17
+ from holado_core.common.tools.tools import Tools
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+
23
+ class TesterTools(object):
24
+
25
+ __logger_is_configured = False
26
+
27
+ @classmethod
28
+ def __configure_logger(cls):
29
+ if not cls.__logger_is_configured:
30
+ if cls.__get_report_manager().has_report_path:
31
+ file_path = cls.__get_report_manager().get_path("logs", "tester.log")
32
+ SessionContext.instance().log_manager.add_file_handler(file_path, logger)
33
+ __logger_is_configured = True
34
+
35
+ @classmethod
36
+ def __get_report_manager(cls):
37
+ return SessionContext.instance().report_manager
38
+
39
+ @classmethod
40
+ def log(cls, msg, unlimited=False):
41
+ cls.__configure_logger()
42
+
43
+ if unlimited:
44
+ logger.print(msg, msg_size_limit=-1)
45
+ else:
46
+ # logger.info(msg)
47
+ logger.print(msg)
48
+
49
+ @classmethod
50
+ def represent(cls, obj):
51
+ if isinstance(obj, Table):
52
+ res = obj.represent()
53
+ else:
54
+ # res = str(obj)
55
+ res = Tools.represent_object(obj)
56
+ return res
57
+
@@ -0,0 +1,26 @@
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
+ class TestConfig():
16
+ """Config of holado_test"""
17
+
18
+ wait_on_step_failure_s = 0
19
+ # wait_on_step_failure_s = 600
20
+
21
+ # Profiling configuration
22
+ # Note: many profiling methods are implemented and can be activated on demand with following booleans
23
+ profile_memory_in_features = False
24
+ profile_memory_in_scenarios = False
25
+
26
+
@@ -0,0 +1,18 @@
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 .scenario.exception_steps import *
17
+ from .scenario.scenario_steps import *
18
+ from .scenario.tester_steps import *