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
holado/__init__.py ADDED
@@ -0,0 +1,358 @@
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
+ import os
17
+ import importlib
18
+ import logging
19
+ import copy
20
+ from holado.common.handlers.undefined import default_value
21
+ from holado.common.tools.gc_manager import GcManager
22
+
23
+ try:
24
+ import behave
25
+ with_behave = True
26
+ except:
27
+ with_behave = False
28
+
29
+ logger = None
30
+ __initialized = False
31
+
32
+
33
+ def is_in_steps_catalog():
34
+ from holado_core.common.tools.converters.converter import Converter
35
+ return Converter.to_boolean(os.getenv("HOLADO_STEPS_CATALOG", False))
36
+
37
+
38
+ def __initialize_holado_loggers():
39
+ global logger
40
+ logger = logging.getLogger(__name__)
41
+
42
+ import holado.common
43
+ holado.common.initialize_loggers()
44
+
45
+
46
+
47
+ def _initialize_logging(use_holado_logger=True, logging_config_file_path=None, log_level=None, log_time_in_utc=None, log_on_console=False, log_in_file=True):
48
+ # print_imported_modules("[initialize]")
49
+ import holado_logging
50
+ # print_imported_modules("[after import holado_logging]")
51
+
52
+ # Configure logging module
53
+ holado_logging.configure(use_holado_logger=use_holado_logger, logging_config_file_path=logging_config_file_path,
54
+ log_level=log_level, log_time_in_utc=log_time_in_utc, log_on_console=log_on_console, log_in_file=log_in_file)
55
+ # print_imported_modules("[after import holado_logging]")
56
+
57
+ # Initialize holado loggers
58
+ __initialize_holado_loggers()
59
+
60
+ # Create session context
61
+ from holado.common.context.session_context import SessionContext
62
+ if SessionContext.has_instance():
63
+ from holado_core.common.exceptions.technical_exception import TechnicalException
64
+ raise TechnicalException(f"Session context was initialized to early (before logging configuration)")
65
+ SessionContext.instance()
66
+
67
+ # Initialize log manager and register it in session context
68
+ holado_logging.initialize_and_register()
69
+
70
+ # Set whole logging configuration
71
+ SessionContext.instance().log_manager.set_config()
72
+
73
+ def change_logging_config(log_level=None, log_on_console=False, log_in_file=True):
74
+ from holado.common.context.session_context import SessionContext
75
+ SessionContext.instance().log_manager.set_level(log_level, do_set_config=False)
76
+ SessionContext.instance().log_manager.on_console = log_on_console
77
+ SessionContext.instance().log_manager.in_file = log_in_file
78
+ SessionContext.instance().log_manager.set_config()
79
+
80
+
81
+ def initialize_minimal():
82
+ # initialize(TSessionContext=None, use_holado_logger=False, logging_config_file_path=None,
83
+ # log_level=None, log_on_console=True, log_in_file=False,
84
+ # session_kwargs={'with_session_path':False},
85
+ # garbage_collector_periodicity=None)
86
+ initialize(TSessionContext=None, use_holado_logger=True, logging_config_file_path=None,
87
+ log_level=None, log_time_in_utc=None, log_on_console=True, log_in_file=False,
88
+ garbage_collector_periodicity=None)
89
+
90
+ def initialize(TSessionContext=None, use_holado_logger=True, logging_config_file_path=None,
91
+ log_level=None, log_time_in_utc=None, log_on_console=False, log_in_file=True,
92
+ config_kwargs=None, session_kwargs=None, garbage_collector_periodicity=default_value):
93
+ global __initialized
94
+ if __initialized:
95
+ from holado_core.common.exceptions.technical_exception import TechnicalException
96
+ raise TechnicalException(f"HolAdo was already initialized")
97
+
98
+ from holado_core.common.tools.tools import Tools
99
+
100
+ if session_kwargs is None:
101
+ session_kwargs = {}
102
+ with_session_path = session_kwargs.get("with_session_path", True)
103
+
104
+ # Reset session context before initializing logging
105
+ # Note: Session context must not be created before logging initialization
106
+ from holado.common.context.session_context import SessionContext
107
+ SessionContext._reset_instance()
108
+ if TSessionContext is not None:
109
+ if isinstance(TSessionContext, str):
110
+ module_name, class_type = TSessionContext.rsplit('.', maxsplit=1)
111
+ module = importlib.import_module(module_name)
112
+ TSessionContext = getattr(module, class_type)
113
+
114
+ SessionContext.TSessionContext = TSessionContext
115
+
116
+ # Initialize logging
117
+ _initialize_logging(use_holado_logger=use_holado_logger, logging_config_file_path=logging_config_file_path,
118
+ log_level=log_level, log_time_in_utc=log_time_in_utc, log_on_console=log_on_console, log_in_file=log_in_file and with_session_path)
119
+ if Tools.do_log(logger, logging.DEBUG):
120
+ logger.debug("Configured logging")
121
+
122
+ # Import modules
123
+ if Tools.do_log(logger, logging.DEBUG):
124
+ logger.debug("Importing HolAdo modules")
125
+ _import_modules(get_holado_module_names())
126
+
127
+ # Update config with given kwargs
128
+ # Note: it is made after modules import to enable override modules specific config parameters
129
+ _update_config(config_kwargs)
130
+
131
+ # Initialize session context
132
+ _initialize_session_context(session_kwargs)
133
+
134
+ # Initialize garbage collector
135
+ if garbage_collector_periodicity is not None:
136
+ GcManager.collect_periodically(garbage_collector_periodicity)
137
+ logger.debug(f"Garbage collector is disabled, and collects are automatically done in a dedicated thread (periodicity: {GcManager.get_collect_periodicity()} s)")
138
+
139
+ if with_behave:
140
+ # Register default behave parameter types
141
+ #TODO: make step tools a service
142
+ from holado_test.behave.scenario.behave_step_tools import BehaveStepTools
143
+ BehaveStepTools.register_default_types()
144
+
145
+ __initialized = True
146
+
147
+ def initialize_for_script(TSessionContext=None, use_holado_logger=True, logging_config_file_path=None,
148
+ log_level=logging.WARNING, log_time_in_utc=None, log_on_console=True, log_in_file=False,
149
+ config_kwargs=None, session_kwargs=None, garbage_collector_periodicity=None):
150
+ if session_kwargs is None:
151
+ session_kwargs={'with_session_path':log_in_file, 'raise_if_not_exist':False}
152
+
153
+ initialize(TSessionContext=TSessionContext, use_holado_logger=use_holado_logger, logging_config_file_path=logging_config_file_path,
154
+ log_level=log_level, log_time_in_utc=log_time_in_utc, log_on_console=log_on_console, log_in_file=log_in_file,
155
+ config_kwargs=config_kwargs, session_kwargs=session_kwargs,
156
+ garbage_collector_periodicity=garbage_collector_periodicity )
157
+
158
+
159
+ def _update_config(config_kwargs):
160
+ from holado.holado_config import Config
161
+
162
+ if config_kwargs is not None:
163
+ for name, value in config_kwargs.items():
164
+ if hasattr(Config, name):
165
+ setattr(Config, name, value)
166
+ else:
167
+ from holado_core.common.exceptions.technical_exception import TechnicalException
168
+ from holado_python.standard_library.typing import Typing
169
+ raise TechnicalException(f"Parameter '{name}' is not configurable, it doesn't exist. Available configurable parameters: {Typing.get_object_attributes(Config)}")
170
+
171
+ def _initialize_session_context(session_kwargs=None):
172
+ from holado_core.common.tools.tools import Tools
173
+
174
+ if Tools.do_log(logger, logging.DEBUG):
175
+ logger.debug("Initializing SessionContext")
176
+ from holado.common.context.session_context import SessionContext
177
+
178
+ SessionContext.instance().configure(session_kwargs)
179
+ SessionContext.instance().new_session(session_kwargs)
180
+ SessionContext.instance().initialize(session_kwargs)
181
+ if Tools.do_log(logger, logging.DEBUG):
182
+ logger.debug("Initialized SessionContext")
183
+
184
+ def _is_in_holado_package(here=None):
185
+ if here is None:
186
+ here = os.path.abspath(os.path.dirname(__file__))
187
+ return 'site-packages' in here
188
+
189
+ def get_holado_path():
190
+ here = os.path.abspath(os.path.dirname(__file__))
191
+ if _is_in_holado_package(here):
192
+ from holado_core.common.exceptions.technical_exception import TechnicalException
193
+ raise TechnicalException(f"When using installed 'holado' package, the project HolAdo is not available")
194
+ else:
195
+ return os.path.normpath(os.path.join(here, "..", ".."))
196
+
197
+ def get_holado_src_path():
198
+ here = os.path.abspath(os.path.dirname(__file__))
199
+ return os.path.normpath(os.path.join(here, ".."))
200
+
201
+ def get_holado_module_names():
202
+ lp = sorted(os.listdir(get_holado_src_path()))
203
+ return [name for name in lp if name.startswith("holado_") and name not in ['holado_logging']]
204
+
205
+ def _import_modules(module_names):
206
+ from holado_core.common.tools.tools import Tools
207
+
208
+ imported_modules = __import_modules(module_names)
209
+ __configure_modules(imported_modules)
210
+ remaining_imported_modules = __register_modules_with_dependencies(imported_modules)
211
+
212
+ # Register modules with cross dependencies
213
+ if remaining_imported_modules:
214
+ if Tools.do_log(logger, logging.DEBUG):
215
+ logger.debug(f"Registering modules with cross dependencies: {list(remaining_imported_modules.keys())}...")
216
+ for module_name in remaining_imported_modules:
217
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
218
+ logger.trace(f"Registering HolAdo module '{module_name}'...")
219
+ remaining_imported_modules[module_name].register()
220
+ if Tools.do_log(logger, logging.DEBUG):
221
+ logger.debug(f"Registered HolAdo module '{module_name}'")
222
+
223
+ def __import_modules(module_names):
224
+ from holado_core.common.tools.tools import Tools
225
+
226
+ if Tools.do_log(logger, logging.DEBUG):
227
+ logger.debug(f"Importing HolAdo modules: {module_names}")
228
+
229
+ res = {}
230
+ for module_name in module_names:
231
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
232
+ logger.trace(f"Importing HolAdo module '{module_name}'...")
233
+ try:
234
+ module = importlib.import_module(module_name)
235
+ except Exception as exc:
236
+ if Tools.do_log(logger, logging.DEBUG):
237
+ logger.debug(f"Failed to import HolAdo module '{module_name}':\n{Tools.represent_exception(exc)}")
238
+ if "No module named" not in str(exc):
239
+ logger.warning(f"Failed to import HolAdo module '{module_name}': {str(exc)} (see debug logs for more details)")
240
+ else:
241
+ if Tools.do_log(logger, logging.DEBUG):
242
+ logger.debug(f"Imported HolAdo module '{module_name}'")
243
+ res[module_name] = module
244
+ return res
245
+
246
+ def __configure_modules(imported_modules):
247
+ from holado_core.common.tools.tools import Tools
248
+
249
+ if Tools.do_log(logger, logging.DEBUG):
250
+ logger.debug(f"Configuring imported HolAdo modules: {sorted(imported_modules.keys())}")
251
+
252
+ imported_module_names = list(imported_modules.keys())
253
+ for module_name in imported_module_names:
254
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
255
+ logger.trace(f"Configuring HolAdo module '{module_name}'...")
256
+ module = imported_modules[module_name]
257
+ if hasattr(module, 'configure_module'):
258
+ module.configure_module()
259
+ if Tools.do_log(logger, logging.DEBUG):
260
+ logger.debug(f"Configured HolAdo module '{module_name}'")
261
+ else:
262
+ if Tools.do_log(logger, logging.DEBUG):
263
+ logger.debug(f"Nothing to configure for HolAdo module '{module_name}'")
264
+
265
+ def __register_modules_with_dependencies(imported_modules):
266
+ from holado_core.common.tools.tools import Tools
267
+
268
+ if Tools.do_log(logger, logging.DEBUG):
269
+ logger.debug(f"Registering imported HolAdo modules: {sorted(imported_modules.keys())}")
270
+
271
+ registered_modules = set()
272
+ remaining_imported_modules = copy.copy(imported_modules)
273
+ has_new_registered = True
274
+ while has_new_registered:
275
+ has_new_registered = False
276
+ imported_module_names = list(remaining_imported_modules.keys())
277
+ for module_name in imported_module_names:
278
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
279
+ logger.trace(f"Registering HolAdo module '{module_name}'...")
280
+ module = remaining_imported_modules[module_name]
281
+ module_dependencies = set(module.dependencies()) if hasattr(module, 'dependencies') and module.dependencies() is not None else None
282
+ if module_dependencies is None or registered_modules.issuperset(module_dependencies):
283
+ if hasattr(module, 'register'):
284
+ module.register()
285
+ if Tools.do_log(logger, logging.DEBUG):
286
+ logger.debug(f"Registered HolAdo module '{module_name}'")
287
+ else:
288
+ if Tools.do_log(logger, logging.DEBUG):
289
+ logger.debug(f"Nothing to register for HolAdo module '{module_name}'")
290
+ del remaining_imported_modules[module_name]
291
+ registered_modules.add(module_name)
292
+ has_new_registered = True
293
+ else:
294
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
295
+ logger.trace(f"Pending registration of HolAdo module '{module_name}' due to dependencies: {module_dependencies.difference(registered_modules)}")
296
+ return remaining_imported_modules
297
+
298
+ def import_steps():
299
+ from holado_core.common.exceptions.technical_exception import TechnicalException
300
+ from holado_core.common.tools.tools import Tools
301
+
302
+ lp = sorted(os.listdir(get_holado_src_path()))
303
+ for module_name in lp:
304
+ if module_name.startswith("holado_"):
305
+ if with_behave:
306
+ module_steps_package = f"{module_name}.tests.behave.steps"
307
+ else:
308
+ raise TechnicalException(f"'behave' is needed for steps")
309
+ try:
310
+ importlib.import_module(module_steps_package)
311
+ except Exception as exc:
312
+ if "No module named" in str(exc):
313
+ if Tools.do_log(logger, logging.DEBUG):
314
+ logger.debug(f"No steps in HolAdo module '{module_name}'")
315
+ # logger.warning(f"No steps in HolAdo module '{module_name}'")
316
+ else:
317
+ raise TechnicalException(f"Failed to import steps of HolAdo module '{module_name}'") from exc
318
+ else:
319
+ if Tools.do_log(logger, logging.DEBUG):
320
+ logger.debug(f"Imported steps of HolAdo module '{module_name}'")
321
+
322
+ def import_private_steps():
323
+ from holado_core.common.tools.tools import Tools
324
+
325
+ lp = sorted(os.listdir(get_holado_src_path()))
326
+ for module_name in lp:
327
+ if module_name.startswith("holado_"):
328
+ if with_behave:
329
+ module_steps_package = f"{module_name}.tests.behave.steps.private"
330
+ else:
331
+ from holado_core.common.exceptions.technical_exception import TechnicalException
332
+ raise TechnicalException(f"'behave' is needed for steps")
333
+ try:
334
+ importlib.import_module(module_steps_package)
335
+ except:
336
+ pass
337
+ else:
338
+ if Tools.do_log(logger, logging.DEBUG):
339
+ logger.debug(f"Imported private steps of HolAdo module '{module_name}'")
340
+
341
+ def print_imported_modules(prefix):
342
+ import sys
343
+ import types
344
+
345
+ sys_modules = [v.__name__ for _,v in sys.modules.items() if isinstance(v, types.ModuleType)]
346
+ print(f"{prefix} sys modules: {sys_modules}")
347
+
348
+ # globals_modules = [v.__name__ for _,v in globals().items() if isinstance(v, types.ModuleType)]
349
+ # print(f"{prefix} globals modules: {globals_modules}")
350
+
351
+
352
+
353
+ # Process minimal initialization of HolAdo
354
+ # Note: Currently, initialization can be done only once, thus minimal initialization is commented.
355
+ # As a consequence, the call of an initialize method is mandatory
356
+ # initialize_minimal()
357
+
358
+
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ #################################################
4
+ # HolAdo (Holistic Automation do)
5
+ #
6
+ # (C) Copyright 2021-2025 by Eric Klumpp
7
+ #
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11
+
12
+ # The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
13
+ #################################################
14
+
15
+
16
+ def initialize_loggers():
17
+ import holado.common.context
18
+ holado.common.context.initialize_loggers()
19
+
20
+ import holado.common.handlers
21
+ holado.common.handlers.initialize_loggers()
22
+
23
+ import holado.common.tools
24
+ holado.common.tools.initialize_loggers()
25
+
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ #################################################
4
+ # HolAdo (Holistic Automation do)
5
+ #
6
+ # (C) Copyright 2021-2025 by Eric Klumpp
7
+ #
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11
+
12
+ # The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
13
+ #################################################
14
+
15
+
16
+ def initialize_loggers():
17
+ import holado.common.context.context
18
+ holado.common.context.context.initialize_logger()
19
+
20
+ import holado.common.context.service_manager
21
+ holado.common.context.service_manager.initialize_logger()
22
+
23
+ import holado.common.context.session_context
24
+ holado.common.context.session_context.initialize_logger()
25
+
@@ -0,0 +1,248 @@
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.common.handlers.object import DeleteableObject, Object
16
+
17
+ logger = None
18
+
19
+ def initialize_logger():
20
+ global logger
21
+ logger = logging.getLogger(__name__)
22
+
23
+
24
+ class Context(DeleteableObject):
25
+ """
26
+ @summary: Mother class for any context class
27
+ """
28
+
29
+ def __init__(self, name, with_post_process=False, persisted_kwargs=None):
30
+ super().__init__(name)
31
+ self.on_delete_call_gc_collect = True
32
+
33
+ self.__objects = {}
34
+ self.__on_delete_objects = []
35
+
36
+ # Post process management
37
+ if with_post_process:
38
+ self.__persisted_kwargs = persisted_kwargs if persisted_kwargs is not None else {}
39
+ self.__persisted_method_to_call_manager_inst = None
40
+ self.__post_process_funcs = []
41
+
42
+ @property
43
+ def __with_post_process(self):
44
+ return hasattr(self, '_Context__persisted_method_to_call_manager_inst')
45
+
46
+ def __verify_is_with_post_process(self):
47
+ if not self.__with_post_process:
48
+ from holado_core.common.exceptions.technical_exception import TechnicalException
49
+ raise TechnicalException(f"[{self.name}] This context doesn't manage post process")
50
+
51
+ @property
52
+ def __persisted_method_to_call_manager(self):
53
+ self.__verify_is_with_post_process()
54
+
55
+ if self.__persisted_method_to_call_manager_inst is None:
56
+ from holado.common.context.session_context import SessionContext
57
+ from holado_core.common.resource.persisted_method_to_call_manager import PersistedMethodToCallManager
58
+ self.__persisted_method_to_call_manager_inst = PersistedMethodToCallManager(scope_name=self.name, **self.__persisted_kwargs)
59
+ self.__persisted_method_to_call_manager_inst.initialize(SessionContext.instance().resource_manager, SessionContext.instance().expression_evaluator)
60
+ self.__persisted_method_to_call_manager_inst.ensure_persistent_db_exists()
61
+ return self.__persisted_method_to_call_manager_inst
62
+
63
+ def get_context_name(self):
64
+ return Object.name(self)
65
+
66
+ def _delete_object(self):
67
+ # Remove all objects
68
+ self.remove_all_objects()
69
+
70
+ def remove_all_objects(self):
71
+ from holado_core.common.exceptions.functional_exception import FunctionalException
72
+ from holado_core.common.exceptions.technical_exception import TechnicalException
73
+ from holado_core.common.tools.tools import Tools
74
+ from holado_python.standard_library.typing import Typing
75
+
76
+ keys = set(self.__objects.keys())
77
+ if Tools.do_log(logger, logging.DEBUG):
78
+ logger.debug(f"[{self.name}] Removing {len(keys)} objects: {keys}")
79
+ for index, key in enumerate(keys):
80
+ if Tools.do_log(logger, logging.DEBUG):
81
+ logger.debug(f"[{self.name}] Removing object {index+1}/{len(keys)}: '{key}' (type: {Typing.get_object_class_fullname(self.get_object(key))})")
82
+ try:
83
+ self.remove_object(key)
84
+ except FunctionalException as exc:
85
+ raise TechnicalException() from exc
86
+ if Tools.do_log(logger, logging.DEBUG):
87
+ logger.debug(f"[{self.name}] Finished to remove {len(keys)} objects: {keys}")
88
+
89
+ def remove_object(self, name):
90
+ if not self.has_object(name):
91
+ from holado_core.common.exceptions.technical_exception import TechnicalException
92
+ raise TechnicalException("Context doesn't contain object '{}'".format(name))
93
+ self._remove(name, True)
94
+
95
+ def _remove(self, name, remove_from_lifetime_manager):
96
+ from holado_core.common.tools.tools import Tools
97
+ from holado_python.standard_library.typing import Typing
98
+
99
+ obj = self.get_object(name)
100
+ if Tools.do_log(logger, logging.DEBUG):
101
+ logger.debug(f"[{self.name}] Removing object '{name}' (type: {Typing.get_object_class_fullname(obj)})")
102
+ if name in self.__on_delete_objects:
103
+ if isinstance(obj, DeleteableObject):
104
+ if Tools.do_log(logger, logging.TRACE): # @UndefinedVariable
105
+ logger.trace(f"[{self.name}] Deleting object '{name}'")
106
+ try:
107
+ obj.delete_object()
108
+ except Exception:
109
+ logger.exception(f"[{self.name}] Catched exception while deleting object '{name}'")
110
+ else:
111
+ if Tools.do_log(logger, logging.DEBUG):
112
+ logger.debug(f"[{self.name}] Deleted object '{name}'")
113
+ self.__on_delete_objects.remove(name)
114
+
115
+ if self.has_object(name):
116
+ del self.__objects[name]
117
+ # if remove_from_lifetime_manager:
118
+ # from holado.common.context.session_context import SessionContext
119
+ # SessionContext.instance().get_object_lifetime_manager().remove_object_lifetime(name, self)
120
+
121
+ def set_object(self, name, obj, raise_if_already_set = True):
122
+ from holado_core.common.exceptions.functional_exception import FunctionalException
123
+ from holado_core.common.exceptions.technical_exception import TechnicalException
124
+
125
+ if obj is None:
126
+ if self.has_object(name):
127
+ try:
128
+ self.remove_object(name)
129
+ except FunctionalException as e:
130
+ raise TechnicalException() from e
131
+ else:
132
+ if raise_if_already_set and self.has_object(name):
133
+ raise TechnicalException(f"[{self.name}] Context already contains object '{name}'")
134
+ self._put(name, obj)
135
+
136
+ def _put(self, name, obj):
137
+ self.__objects[name] = obj
138
+ self.__on_delete_objects.append(name)
139
+
140
+ def get_object(self, name):
141
+ if not self.has_object(name):
142
+ from holado_core.common.exceptions.technical_exception import TechnicalException
143
+ raise TechnicalException(f"[{self.name}] Context doesn't contain object '{name}'")
144
+ return self.__objects[name]
145
+
146
+ def has_object(self, name):
147
+ return name in self.__objects
148
+
149
+ def get_object_name(self, obj):
150
+ for name, value in self.__objects.items():
151
+ if value is obj:
152
+ return name
153
+ return None
154
+
155
+ def remove_lifetimed_object(self, object_id):
156
+ self._remove(object_id, False)
157
+
158
+ def get_or_create_initilizable_object_by_class(self, object_class):
159
+ raise NotImplementedError()
160
+
161
+ def get_or_create_object_by_class(self, object_class):
162
+ raise NotImplementedError()
163
+
164
+ def get_object_getter_eval_string(self, obj, raise_not_found=True):
165
+ from holado_python.standard_library.typing import Typing
166
+
167
+ name = self.get_object_name(obj)
168
+ if name is not None:
169
+ return f"{Typing.get_object_class_fullname(self)}.instance().get_object('{name}')"
170
+
171
+ if raise_not_found:
172
+ from holado_core.common.exceptions.element_exception import ElementNotFoundException
173
+ raise ElementNotFoundException(f"[{self.name}] Failed to find object of id {id(obj)}")
174
+ else:
175
+ return None
176
+
177
+
178
+
179
+ ### Post process management
180
+
181
+ def add_post_process(self, func):
182
+ self.__verify_is_with_post_process()
183
+
184
+ success = self.__persist_function(func)
185
+ if not success:
186
+ logger.debug(f"[{self.name}] Add post process in memory, persistence in DB has failed (post process function: {func})")
187
+ self.__post_process_funcs.append(func)
188
+
189
+ def __persist_function(self, func):
190
+ from holado.common.context.session_context import SessionContext
191
+ from holado_core.common.exceptions.technical_exception import TechnicalException
192
+ from holado_core.common.tools.tools import Tools
193
+ from holado_python.standard_library.typing import Typing
194
+
195
+ try:
196
+ if Typing.is_function(func._target):
197
+ func_qualname = Typing.get_function_fullname(func._target)
198
+ self.__persisted_method_to_call_manager.add_function_to_call(
199
+ func_qualname, args_list=func._args, kwargs_dict=func._kwargs,
200
+ use="post_process", use_index=None)
201
+ return True
202
+ elif Typing.is_method(func._target):
203
+ meth_func = Typing.get_method_function(func._target)
204
+ func_qualname = Typing.get_function_fullname(meth_func)
205
+ meth_obj = Typing.get_method_object_instance(func._target)
206
+ self_getter_eval_str = SessionContext.instance().get_object_getter_eval_string(meth_obj, raise_not_found=False)
207
+ if self_getter_eval_str is not None:
208
+ self.__persisted_method_to_call_manager.add_method_to_call(
209
+ func_qualname, self_getter_eval_str, args_list=func._args, kwargs_dict=func._kwargs,
210
+ use="post_process", use_index=None)
211
+ return True
212
+ else:
213
+ raise TechnicalException(f"[{self.name}] Unmanaged target type '{Typing.get_object_class_fullname(func._target)}'")
214
+ except TechnicalException as exc:
215
+ raise exc
216
+ except Exception as exc:
217
+ logger.warning(f"[{self.name}] Failed to persist function {func}: {Tools.represent_exception(exc)}")
218
+ return False
219
+
220
+ def do_post_processes(self):
221
+ self.__verify_is_with_post_process()
222
+
223
+ # First call functions that were not persisted
224
+ for func in self.__post_process_funcs:
225
+ try:
226
+ func.run()
227
+ except Exception as exc:
228
+ # logger.error(f"Error while post processing [{func}]: {exc}")
229
+ logger.exception(f"[{self.name}] Error while post processing [{func}]: {exc}")
230
+
231
+ # Call persisted functions and methods
232
+ try:
233
+ self.do_persisted_post_processes()
234
+ except Exception as exc:
235
+ logger.exception(f"[{self.name}] Error while scenario post processing persisted methods: {exc}")
236
+
237
+ def do_persisted_post_processes(self):
238
+ """Call functions and methods persisted by a previous context instance
239
+ Note: This is useful especially when a context was deleted (like on process kill) before post processes could be performed
240
+ """
241
+ self.__verify_is_with_post_process()
242
+
243
+ self.__persisted_method_to_call_manager.call_functions_and_methods(use="post_process")
244
+
245
+ def get_number_of_persisted_post_processes_to_perform(self):
246
+ return self.__persisted_method_to_call_manager.get_number_of_functions_and_method_to_call()
247
+
248
+