arpakitlib 1.7.256__py3-none-any.whl → 1.8.0__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 (281) hide show
  1. arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/README.md +1 -1
  2. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/admin1/add_admin_in_app.py +6 -12
  3. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/admin1/admin_auth.py +2 -6
  4. arpakitlib/_arpakit_project_template_v1/admin1/model_view.py +95 -0
  5. arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/alembic/env.py +3 -3
  6. arpakitlib/_arpakit_project_template_v1/api/asgi.py +3 -0
  7. arpakitlib/_arpakit_project_template_v1/api/auth.py +244 -0
  8. arpakitlib/_arpakit_project_template_v1/api/const.py +18 -0
  9. arpakitlib/_arpakit_project_template_v1/api/create_api_app.py +72 -0
  10. arpakitlib/_arpakit_project_template_v1/api/event.py +69 -0
  11. arpakitlib/_arpakit_project_template_v1/api/exception.py +39 -0
  12. arpakitlib/_arpakit_project_template_v1/api/exception_handler.py +297 -0
  13. arpakitlib/_arpakit_project_template_v1/api/openapi_ui.py +28 -0
  14. arpakitlib/_arpakit_project_template_v1/api/response.py +27 -0
  15. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/api/router/main_router.py +3 -2
  16. arpakitlib/_arpakit_project_template_v1/api/router/v1/arpakitlib_.py +27 -0
  17. arpakitlib/_arpakit_project_template_v1/api/router/v1/check_auth.py +30 -0
  18. arpakitlib/_arpakit_project_template_v1/api/router/v1/get_errors_info.py +24 -0
  19. arpakitlib/_arpakit_project_template_v1/api/router/v1/healthcheck.py +21 -0
  20. arpakitlib/_arpakit_project_template_v1/api/router/v1/main_router.py +54 -0
  21. arpakitlib/_arpakit_project_template_v1/api/router/v1/now_utc_datetime.py +21 -0
  22. arpakitlib/_arpakit_project_template_v1/api/router/v1/raise_fake_error.py +21 -0
  23. arpakitlib/_arpakit_project_template_v1/api/schema/base_schema.py +26 -0
  24. arpakitlib/_arpakit_project_template_v1/api/schema/common/in_.py +5 -0
  25. arpakitlib/_arpakit_project_template_v1/api/schema/common/out.py +60 -0
  26. arpakitlib/_arpakit_project_template_v1/api/schema/v1/in_.py +5 -0
  27. arpakitlib/_arpakit_project_template_v1/api/schema/v1/out.py +53 -0
  28. arpakitlib/_arpakit_project_template_v1/api/transmitted_api_data.py +66 -0
  29. arpakitlib/_arpakit_project_template_v1/arpakitlib_project_template.json +3 -0
  30. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/business_service/hello_world.py +1 -1
  31. arpakitlib/_arpakit_project_template_v1/business_service/remove_operations.py +51 -0
  32. arpakitlib/_arpakit_project_template_v1/command/alembic_history.sh +2 -0
  33. arpakitlib/_arpakit_project_template_v1/command/alembic_revision_autogenerate.sh +2 -0
  34. arpakitlib/{_arpakit_project_template/manage/json_beautify.py → _arpakit_project_template_v1/command/beautify_json.py} +2 -2
  35. arpakitlib/{_arpakit_project_template/src/core/_check_logging.py → _arpakit_project_template_v1/command/check_logging.py} +3 -3
  36. arpakitlib/_arpakit_project_template_v1/command/check_sqlalchemy_db.py +11 -0
  37. arpakitlib/_arpakit_project_template_v1/command/drop_json_db.py +13 -0
  38. arpakitlib/_arpakit_project_template_v1/command/drop_sqlalchemy_db.py +14 -0
  39. arpakitlib/{_arpakit_project_template/src/core/_generate_settings_env_example.py → _arpakit_project_template_v1/command/generate_settings_env_example.py} +4 -4
  40. arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/hello_world.py +2 -2
  41. arpakitlib/_arpakit_project_template_v1/command/init_json_db.py +11 -0
  42. arpakitlib/_arpakit_project_template_v1/command/init_sqlalchemy_db.py +11 -0
  43. arpakitlib/_arpakit_project_template_v1/command/reinit_json_db.py +13 -0
  44. arpakitlib/_arpakit_project_template_v1/command/reinit_sqlalchemy_db.py +13 -0
  45. arpakitlib/_arpakit_project_template_v1/command/remove_operations.py +13 -0
  46. arpakitlib/_arpakit_project_template_v1/command/remove_story_logs.py +16 -0
  47. arpakitlib/_arpakit_project_template_v1/command/rm_all_records_in_json_db.py +13 -0
  48. arpakitlib/{_arpakit_project_template/src/core/_show_settings.py → _arpakit_project_template_v1/command/show_settings.py} +3 -3
  49. arpakitlib/{_arpakit_project_template/src/api/_start_api_with_reload.py → _arpakit_project_template_v1/command/start_api_with_reload.py} +5 -5
  50. arpakitlib/{_arpakit_project_template/src/api/_start_api_without_reload.py → _arpakit_project_template_v1/command/start_api_without_reload.py} +5 -5
  51. arpakitlib/_arpakit_project_template_v1/command/start_async_operation_executor_worker.py +14 -0
  52. arpakitlib/_arpakit_project_template_v1/command/start_async_scheduled_operation_creator_worker.py +14 -0
  53. arpakitlib/_arpakit_project_template_v1/command/start_sync_operation_executor_worker.py +15 -0
  54. arpakitlib/_arpakit_project_template_v1/command/start_sync_operation_executor_workers.py +22 -0
  55. arpakitlib/_arpakit_project_template_v1/command/start_sync_scheduled_operation_creator_worker.py +12 -0
  56. arpakitlib/_arpakit_project_template_v1/core/cache_file_storage_in_dir.py +21 -0
  57. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/core/const.py +2 -9
  58. arpakitlib/_arpakit_project_template_v1/core/dump_file_storage_in_dir.py +21 -0
  59. arpakitlib/_arpakit_project_template_v1/core/media_file_storage_in_dir.py +21 -0
  60. arpakitlib/_arpakit_project_template_v1/core/settings.py +193 -0
  61. arpakitlib/_arpakit_project_template_v1/core/util.py +29 -0
  62. arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/example.env +10 -5
  63. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/json_db/util.py +2 -2
  64. arpakitlib/_arpakit_project_template_v1/operation_execution/operation_executor_worker.py +256 -0
  65. arpakitlib/_arpakit_project_template_v1/operation_execution/scheduled_operation_creator_worker.py +106 -0
  66. arpakitlib/_arpakit_project_template_v1/operation_execution/scheduled_operations.py +49 -0
  67. arpakitlib/_arpakit_project_template_v1/operation_execution/util.py +29 -0
  68. arpakitlib/_arpakit_project_template_v1/resource/static/openapi-favicon.png +0 -0
  69. arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/index.html +19 -0
  70. arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui-bundle.js +2 -0
  71. arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui-es-bundle-core.js +1 -1
  72. arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui-es-bundle-core.js.map +1 -0
  73. arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui-es-bundle.js +2 -0
  74. arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui-standalone-preset.js +2 -0
  75. arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui.js +1 -1
  76. arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui.js.map +1 -0
  77. arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_1.py +14 -0
  78. arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_2.py +14 -0
  79. arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_3.py +14 -0
  80. arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_4.py +14 -0
  81. arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_5.py +14 -0
  82. arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_6.py +14 -0
  83. arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_7.py +14 -0
  84. arpakitlib/{_arpakit_project_template/src/sqlalchemy_db/util.py → _arpakit_project_template_v1/sqlalchemy_db/sqlalchemy_db.py} +3 -11
  85. arpakitlib/_arpakit_project_template_v1/sqlalchemy_db/sqlalchemy_model.py +129 -0
  86. arpakitlib/_arpakit_project_template_v1/sqlalchemy_db/util.py +28 -0
  87. arpakitlib/{_arpakit_project_template/src/sandbox/sandbox_3.py → _arpakit_project_template_v1/test_data/make_test_data_1.py} +8 -3
  88. arpakitlib/{_arpakit_project_template/src/sandbox/sandbox_4.py → _arpakit_project_template_v1/test_data/make_test_data_2.py} +8 -3
  89. arpakitlib/{_arpakit_project_template/src/sandbox/sandbox_1.py → _arpakit_project_template_v1/test_data/make_test_data_3.py} +8 -3
  90. arpakitlib/{_arpakit_project_template/src/sandbox/sandbox_2.py → _arpakit_project_template_v1/test_data/make_test_data_4.py} +8 -3
  91. arpakitlib/_arpakit_project_template_v1/test_data/make_test_data_5.py +22 -0
  92. arpakitlib/_arpakit_project_template_v1/tg_bot/blank/blank.py +5 -0
  93. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/blank/util.py +1 -1
  94. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/const.py +6 -3
  95. arpakitlib/_arpakit_project_template_v1/tg_bot/event.py +51 -0
  96. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/filter/not_prod_mode.py +1 -1
  97. arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/filter/prod_mode.py +1 -1
  98. arpakitlib/_arpakit_project_template_v1/tg_bot/middleware/init_user.py +24 -0
  99. arpakitlib/_arpakit_project_template_v1/tg_bot/middleware/middleware.py +12 -0
  100. arpakitlib/_arpakit_project_template_v1/tg_bot/router/arpakitlib_.py +10 -0
  101. arpakitlib/_arpakit_project_template_v1/tg_bot/router/error.py +15 -0
  102. arpakitlib/_arpakit_project_template_v1/tg_bot/router/healthcheck.py +10 -0
  103. arpakitlib/_arpakit_project_template_v1/tg_bot/router/main_router.py +14 -0
  104. arpakitlib/_arpakit_project_template_v1/tg_bot/start_tg_bot.py +34 -0
  105. arpakitlib/_arpakit_project_template_v1/tg_bot/tg_bot.py +24 -0
  106. arpakitlib/_arpakit_project_template_v1/tg_bot/tg_bot_dispatcher.py +19 -0
  107. arpakitlib/_arpakit_project_template_v1/tg_bot/transmitted_tg_data.py +58 -0
  108. arpakitlib/_arpakit_project_template_v1/util/read_arpakitlib_project_template_file.py +17 -0
  109. arpakitlib/ar_aiogram_util.py +41 -52
  110. arpakitlib/ar_arpakit_project_template_util.py +8 -11
  111. arpakitlib/ar_arpakitlib_cli_util.py +14 -5
  112. arpakitlib/ar_base_worker_util.py +35 -17
  113. arpakitlib/ar_class_util.py +11 -0
  114. arpakitlib/ar_func_util.py +19 -29
  115. arpakitlib/ar_http_request_util.py +10 -2
  116. arpakitlib/ar_need_type_util.py +3 -0
  117. arpakitlib/ar_rat_func_util.py +1 -1
  118. arpakitlib/ar_retry_func_util.py +4 -4
  119. arpakitlib/ar_schedule_uust_api_client_util.py +1 -1
  120. arpakitlib/ar_settings_util.py +3 -204
  121. arpakitlib/ar_sqladmin_util.py +7 -102
  122. arpakitlib/ar_sqlalchemy_util.py +65 -13
  123. arpakitlib/ar_type_util.py +0 -2
  124. {arpakitlib-1.7.256.dist-info → arpakitlib-1.8.0.dist-info}/METADATA +7 -6
  125. arpakitlib-1.8.0.dist-info/RECORD +251 -0
  126. {arpakitlib-1.7.256.dist-info → arpakitlib-1.8.0.dist-info}/WHEEL +1 -1
  127. arpakitlib/_arpakit_project_template/ARPAKITLIB +0 -1
  128. arpakitlib/_arpakit_project_template/manage/docker_ps.sh +0 -2
  129. arpakitlib/_arpakit_project_template/manage/git_branch.sh +0 -2
  130. arpakitlib/_arpakit_project_template/manage/poetry_add_plugin_export.sh +0 -2
  131. arpakitlib/_arpakit_project_template/manage/poetry_config_virtualenvs_in_project_true.sh +0 -2
  132. arpakitlib/_arpakit_project_template/manage/poetry_self_add_plugin_export.sh +0 -2
  133. arpakitlib/_arpakit_project_template/src/admin1/model_view.py +0 -1
  134. arpakitlib/_arpakit_project_template/src/api/asgi.py +0 -3
  135. arpakitlib/_arpakit_project_template/src/api/auth.py +0 -53
  136. arpakitlib/_arpakit_project_template/src/api/const.py +0 -13
  137. arpakitlib/_arpakit_project_template/src/api/create_api_app.py +0 -43
  138. arpakitlib/_arpakit_project_template/src/api/create_handle_exception_.py +0 -59
  139. arpakitlib/_arpakit_project_template/src/api/event.py +0 -83
  140. arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py +0 -27
  141. arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py +0 -15
  142. arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py +0 -1
  143. arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py +0 -1
  144. arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py +0 -7
  145. arpakitlib/_arpakit_project_template/src/api/util.py +0 -44
  146. arpakitlib/_arpakit_project_template/src/core/settings.py +0 -21
  147. arpakitlib/_arpakit_project_template/src/core/util.py +0 -61
  148. arpakitlib/_arpakit_project_template/src/json_db/_drop_json_db.py +0 -13
  149. arpakitlib/_arpakit_project_template/src/json_db/_init_json_db.py +0 -11
  150. arpakitlib/_arpakit_project_template/src/json_db/_reinit_json_db.py +0 -13
  151. arpakitlib/_arpakit_project_template/src/json_db/_rm_all_records_in_json_db.py +0 -13
  152. arpakitlib/_arpakit_project_template/src/just_script/example.py +0 -16
  153. arpakitlib/_arpakit_project_template/src/operation_execution/_start_operation_executor_worker.py +0 -17
  154. arpakitlib/_arpakit_project_template/src/operation_execution/_start_scheduled_operation_creator_worker.py +0 -17
  155. arpakitlib/_arpakit_project_template/src/operation_execution/const.py +0 -9
  156. arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py +0 -16
  157. arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py +0 -29
  158. arpakitlib/_arpakit_project_template/src/operation_execution/util.py +0 -1
  159. arpakitlib/_arpakit_project_template/src/sandbox/sandbox_5.py +0 -17
  160. arpakitlib/_arpakit_project_template/src/sandbox/sandbox_6.py +0 -17
  161. arpakitlib/_arpakit_project_template/src/sandbox/sandbox_7.py +0 -17
  162. arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_check_conn_sqlalchemy_db.py +0 -11
  163. arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_drop_sqlalchemy_db.py +0 -13
  164. arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_init_sqlalchemy_db.py +0 -11
  165. arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_reinit_sqlalchemy_db.py +0 -13
  166. arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_remove_operations.py +0 -15
  167. arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_remove_story_logs.py +0 -16
  168. arpakitlib/_arpakit_project_template/src/sqlalchemy_db/sqlalchemy_model.py +0 -13
  169. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py +0 -8
  170. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py +0 -8
  171. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py +0 -8
  172. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py +0 -8
  173. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py +0 -8
  174. arpakitlib/_arpakit_project_template/src/tg_bot/blank/blank.py +0 -10
  175. arpakitlib/_arpakit_project_template/src/tg_bot/event.py +0 -39
  176. arpakitlib/_arpakit_project_template/src/tg_bot/handler/cmd_healthcheck.py +0 -0
  177. arpakitlib/_arpakit_project_template/src/tg_bot/router/error.py +0 -3
  178. arpakitlib/_arpakit_project_template/src/tg_bot/router/router.py +0 -7
  179. arpakitlib/_arpakit_project_template/src/tg_bot/start_tg_bot.py +0 -11
  180. arpakitlib/_arpakit_project_template/src/tg_bot/transmitted_tg_data.py +0 -6
  181. arpakitlib/_arpakit_project_template/src/tg_bot/util.py +0 -44
  182. arpakitlib/ar_api_key_util.py +0 -21
  183. arpakitlib/ar_fastapi_static/healthcheck +0 -1
  184. arpakitlib/ar_fastapi_static/swagger-ui/index.html +0 -19
  185. arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-bundle.js +0 -2
  186. arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -1
  187. arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle.js +0 -2
  188. arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-standalone-preset.js +0 -2
  189. arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js.map +0 -1
  190. arpakitlib/ar_fastapi_util.py +0 -862
  191. arpakitlib/ar_operation_execution_util.py +0 -504
  192. arpakitlib/ar_sqlalchemy_model_util.py +0 -183
  193. arpakitlib-1.7.256.dist-info/RECORD +0 -236
  194. /arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/.gitignore +0 -0
  195. /arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/.python-version +0 -0
  196. /arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/LICENSE +0 -0
  197. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/additional_model}/__init__.py +0 -0
  198. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/additional_model/additional_model.py +0 -0
  199. /arpakitlib/{_arpakit_project_template/manage/note → _arpakit_project_template_v1/admin1}/__init__.py +0 -0
  200. /arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/alembic/README +0 -0
  201. /arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/alembic/script.py.mako +0 -0
  202. /arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/alembic.ini +0 -0
  203. /arpakitlib/{_arpakit_project_template/resource → _arpakit_project_template_v1/api}/__init__.py +0 -0
  204. /arpakitlib/{_arpakit_project_template/resource/static → _arpakit_project_template_v1/api/router}/__init__.py +0 -0
  205. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1/api/router/v1}/__init__.py +0 -0
  206. /arpakitlib/{_arpakit_project_template/src/additional_model → _arpakit_project_template_v1/api/schema}/__init__.py +0 -0
  207. /arpakitlib/{_arpakit_project_template/src/admin1 → _arpakit_project_template_v1/api/schema/common}/__init__.py +0 -0
  208. /arpakitlib/{_arpakit_project_template/src/api → _arpakit_project_template_v1/api/schema/v1}/__init__.py +0 -0
  209. /arpakitlib/{_arpakit_project_template/manage/note/note_1.txt → _arpakit_project_template_v1/api/util.py} +0 -0
  210. /arpakitlib/{_arpakit_project_template/src/api/router → _arpakit_project_template_v1/business_service}/__init__.py +0 -0
  211. /arpakitlib/{_arpakit_project_template/src/api/router/v1 → _arpakit_project_template_v1/command}/__init__.py +0 -0
  212. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/alembic_upgrade_head .sh +0 -0
  213. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/docker_ps_a.sh +0 -0
  214. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/docker_rm_postgres.sh +0 -0
  215. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/docker_run_postgres.sh +0 -0
  216. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/docker_start_postgres.sh +0 -0
  217. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/docker_stop_postgres.sh +0 -0
  218. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/git_commit.sh +0 -0
  219. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/git_push_arpakit_company_github_1.sh +0 -0
  220. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/git_push_arpakit_company_gitlab_1.sh +0 -0
  221. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/git_push_arpakit_github_1.sh +0 -0
  222. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/git_push_arpakit_gitlab_1.sh +0 -0
  223. /arpakitlib/{_arpakit_project_template/manage/git_remote_v.sh → _arpakit_project_template_v1/command/git_remote.sh} +0 -0
  224. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/git_set_arpakit_company_origin.sh +0 -0
  225. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/git_set_arpakit_origin.sh +0 -0
  226. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/git_status.sh +0 -0
  227. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_check.sh +0 -0
  228. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_clear_cache.sh +0 -0
  229. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_config.sh +0 -0
  230. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_install.sh +0 -0
  231. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_lock.sh +0 -0
  232. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_remove_and_add_arpakitlib.sh +0 -0
  233. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_show.sh +0 -0
  234. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_show_arpakitlib.sh +0 -0
  235. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_update.sh +0 -0
  236. /arpakitlib/{_arpakit_project_template/manage → _arpakit_project_template_v1/command}/poetry_update_arpakitlib.sh +0 -0
  237. /arpakitlib/{_arpakit_project_template/src/api/schema → _arpakit_project_template_v1/core}/__init__.py +0 -0
  238. /arpakitlib/{_arpakit_project_template/src/api/schema/v1 → _arpakit_project_template_v1/json_db}/__init__.py +0 -0
  239. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/json_db/json_db.py +0 -0
  240. /arpakitlib/{_arpakit_project_template/src/business_service → _arpakit_project_template_v1/note}/__init__.py +0 -0
  241. /arpakitlib/{_arpakit_project_template/manage/note/note_2.txt → _arpakit_project_template_v1/note/note_1.txt} +0 -0
  242. /arpakitlib/{_arpakit_project_template/manage/note/note_3.txt → _arpakit_project_template_v1/note/note_2.txt} +0 -0
  243. /arpakitlib/{_arpakit_project_template/manage/note/note_4.txt → _arpakit_project_template_v1/note/note_3.txt} +0 -0
  244. /arpakitlib/{_arpakit_project_template/manage/note/note_5.txt → _arpakit_project_template_v1/note/note_4.txt} +0 -0
  245. /arpakitlib/{_arpakit_project_template/src/core/__init__.py → _arpakit_project_template_v1/note/note_5.txt} +0 -0
  246. /arpakitlib/{_arpakit_project_template/src/json_db → _arpakit_project_template_v1/operation_execution}/__init__.py +0 -0
  247. /arpakitlib/{_arpakit_project_template/src/just_script/__init__.py → _arpakit_project_template_v1/operation_execution/const.py} +0 -0
  248. /arpakitlib/{_arpakit_project_template/src/operation_execution → _arpakit_project_template_v1/resource}/__init__.py +0 -0
  249. /arpakitlib/{_arpakit_project_template/src/sandbox → _arpakit_project_template_v1/resource/static}/__init__.py +0 -0
  250. /arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/resource/static/healthcheck +0 -0
  251. /arpakitlib/{_arpakit_project_template → _arpakit_project_template_v1}/resource/static/helloworld +0 -0
  252. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/redoc/redoc.standalone.js +0 -0
  253. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/favicon-16x16.png +0 -0
  254. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/favicon-32x32.png +0 -0
  255. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/index.css +0 -0
  256. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/oauth2-redirect.html +0 -0
  257. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/swagger-initializer.js +0 -0
  258. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui-bundle.js.map +0 -0
  259. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
  260. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
  261. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui.css +0 -0
  262. /arpakitlib/{ar_fastapi_static → _arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui.css.map +0 -0
  263. /arpakitlib/{_arpakit_project_template/src/sqlalchemy_db → _arpakit_project_template_v1/sandbox}/__init__.py +0 -0
  264. /arpakitlib/{_arpakit_project_template/src/test_data → _arpakit_project_template_v1/sqlalchemy_db}/__init__.py +0 -0
  265. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/sqlalchemy_db/const.py +0 -0
  266. /arpakitlib/{_arpakit_project_template/src/tg_bot → _arpakit_project_template_v1/test_data}/__init__.py +0 -0
  267. /arpakitlib/{_arpakit_project_template/src/tg_bot/blank → _arpakit_project_template_v1/tg_bot}/__init__.py +0 -0
  268. /arpakitlib/{_arpakit_project_template/src/tg_bot/filter → _arpakit_project_template_v1/tg_bot/blank}/__init__.py +0 -0
  269. /arpakitlib/{_arpakit_project_template/src/tg_bot/handler → _arpakit_project_template_v1/tg_bot/filter}/__init__.py +0 -0
  270. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/kb/__init__.py +0 -0
  271. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/kb/inline_/__init__.py +0 -0
  272. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/kb/inline_/callback.py +0 -0
  273. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/kb/inline_/common.py +0 -0
  274. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/kb/static_/__init__.py +0 -0
  275. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/kb/static_/common.py +0 -0
  276. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/middleware/__init__.py +0 -0
  277. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/tg_bot/router/__init__.py +0 -0
  278. /arpakitlib/{_arpakit_project_template/src/tg_bot/handler/cmd_arpakitlib.py → _arpakit_project_template_v1/tg_bot/util.py} +0 -0
  279. /arpakitlib/{_arpakit_project_template/src → _arpakit_project_template_v1}/util/__init__.py +0 -0
  280. {arpakitlib-1.7.256.dist-info → arpakitlib-1.8.0.dist-info}/LICENSE +0 -0
  281. {arpakitlib-1.7.256.dist-info → arpakitlib-1.8.0.dist-info}/entry_points.txt +0 -0
@@ -27,11 +27,11 @@ async def async_retry_func(
27
27
  while True:
28
28
  try:
29
29
  return await async_func(*async_func_args, **async_func_kwargs)
30
- except Exception:
30
+ except Exception as exception:
31
31
  tries += 1
32
32
  if not endlessly and tries >= max_tries:
33
33
  if raise_if_exception:
34
- raise
34
+ raise exception
35
35
  return None
36
36
  if timeout_after_exception:
37
37
  await async_safe_sleep(timeout_after_exception.total_seconds())
@@ -54,11 +54,11 @@ def sync_retry_func(
54
54
  while True:
55
55
  try:
56
56
  return sync_func(*sync_func_args, **sync_func_kwargs)
57
- except Exception:
57
+ except Exception as exception:
58
58
  tries += 1
59
59
  if not endlessly and tries >= max_tries:
60
60
  if raise_if_exception:
61
- raise
61
+ raise exception
62
62
  return None
63
63
  if timeout_after_exception:
64
64
  sync_safe_sleep(timeout_after_exception.total_seconds())
@@ -189,7 +189,7 @@ class ScheduleUUSTAPIClient:
189
189
  try:
190
190
  await self.check_conn()
191
191
  except Exception as e:
192
- self._logger.error(f"connection is bad", exc_info=e)
192
+ self._logger.error(f"connection is bad, {e}")
193
193
  return False
194
194
  return True
195
195
 
@@ -1,17 +1,10 @@
1
1
  # arpakit
2
- import os
3
2
  from typing import Union, Any
4
3
 
5
- import pytz
6
- from pydantic import ConfigDict, field_validator, model_validator
4
+ from pydantic import ConfigDict, model_validator
7
5
  from pydantic_core import PydanticUndefined
8
- from pydantic_core.core_schema import ValidationInfo
9
6
  from pydantic_settings import BaseSettings
10
7
 
11
- from arpakitlib.ar_enumeration_util import Enumeration
12
- from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str
13
- from arpakitlib.ar_sqlalchemy_util import generate_sqlalchemy_url
14
-
15
8
  _ARPAKIT_LIB_MODULE_VERSION = "3.0"
16
9
 
17
10
 
@@ -25,12 +18,7 @@ def generate_env_example(settings_class: Union[BaseSettings, type[BaseSettings]]
25
18
  return res
26
19
 
27
20
 
28
- class ModeTypes(Enumeration):
29
- not_prod: str = "not_prod"
30
- prod: str = "prod"
31
-
32
-
33
- class BaseSettings2(BaseSettings):
21
+ class SimpleSettings(BaseSettings):
34
22
  model_config = ConfigDict(extra="ignore")
35
23
 
36
24
  @model_validator(mode="before")
@@ -53,197 +41,8 @@ class BaseSettings2(BaseSettings):
53
41
  return env_example
54
42
 
55
43
 
56
- class SimpleSettings(BaseSettings2):
57
- mode_type: str = ModeTypes.not_prod
58
-
59
- @field_validator("mode_type")
60
- @classmethod
61
- def validate_mode_type(cls, v: str):
62
- ModeTypes.parse_and_validate_values(v.lower().strip())
63
- return v
64
-
65
- @property
66
- def is_mode_type_not_prod(self) -> bool:
67
- return self.mode_type == ModeTypes.not_prod
68
-
69
- def raise_if_mode_type_not_prod(self):
70
- if self.is_mode_type_not_prod:
71
- raise ValueError(f"mode type = {self.mode_type}")
72
-
73
- @property
74
- def is_mode_type_prod(self) -> bool:
75
- return self.mode_type == ModeTypes.prod
76
-
77
- def raise_if_mode_type_prod(self):
78
- if self.is_mode_type_prod:
79
- raise ValueError(f"mode type = {self.mode_type}")
80
-
81
-
82
- class AdvancedSettings(SimpleSettings):
83
- project_name: str | None = None
84
-
85
- @field_validator("project_name", mode="after")
86
- def validate_project_name(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> str | None:
87
- if isinstance(v, str):
88
- return v.strip()
89
- return v
90
-
91
- sqlalchemy_db_user: str | None = None
92
-
93
- sqlalchemy_db_password: str | None = None
94
-
95
- sqlalchemy_db_host: str | None = None
96
-
97
- sqlalchemy_db_port: int | None = None
98
-
99
- sqlalchemy_db_database: str | None = None
100
-
101
- sqlalchemy_sync_db_url: str | None = None
102
-
103
- @field_validator("sqlalchemy_sync_db_url", mode="after")
104
- def validate_sqlalchemy_sync_db_url(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> str | None:
105
- if v is not None:
106
- return v
107
-
108
- return generate_sqlalchemy_url(
109
- base="postgresql",
110
- user=validation_info.data.get("sqlalchemy_db_user"),
111
- password=validation_info.data.get("sqlalchemy_db_password"),
112
- host=validation_info.data.get("sqlalchemy_db_host"),
113
- port=validation_info.data.get("sqlalchemy_db_port"),
114
- database=validation_info.data.get("sqlalchemy_db_database")
115
- )
116
-
117
- sqlalchemy_async_db_url: str | None = None
118
-
119
- @field_validator("sqlalchemy_async_db_url", mode="after")
120
- def validate_sqlalchemy_async_db_url(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> str | None:
121
- if v is not None:
122
- return v
123
-
124
- return generate_sqlalchemy_url(
125
- base="postgresql",
126
- user=validation_info.data.get("sqlalchemy_db_user"),
127
- password=validation_info.data.get("sqlalchemy_db_password"),
128
- host=validation_info.data.get("sqlalchemy_db_host"),
129
- port=validation_info.data.get("sqlalchemy_db_port"),
130
- database=validation_info.data.get("sqlalchemy_db_database")
131
- )
132
-
133
- @property
134
- def is_any_sql_db_url_set(self) -> bool:
135
- if self.sqlalchemy_sync_db_url is not None:
136
- return True
137
- if self.sqlalchemy_async_db_url is not None:
138
- return True
139
- return False
140
-
141
- sqlalchemy_db_echo: bool = False
142
-
143
- api_port: int | None = None
144
-
145
- @field_validator("api_port", mode="before")
146
- def validate_api_port(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> int | None:
147
- if isinstance(v, str):
148
- if v.isdigit():
149
- return int(v)
150
- return None
151
-
152
- api_init_sqlalchemy_db: bool = False
153
-
154
- api_init_json_db: bool = False
155
-
156
- api_logging__api_func_before_in_handle_exception: bool = True
157
-
158
- api_story_log__api_func_before_in_handle_exception: bool = False
159
-
160
- api_correct_api_key: str | None = "test"
161
-
162
- api_correct_token: str | None = "test"
163
-
164
- api_enable_admin1: bool = False
165
-
166
- api_start_operation_executor_worker: bool = False
167
-
168
- api_start_scheduled_operation_creator_worker: bool = False
169
-
170
- admin1_secret_key: str | None = "85a9583cb91c4de7a78d7eb1e5306a04418c9c43014c447ea8ec8dd5deb4cf71"
171
-
172
- tg_bot_token: str | None = None
173
-
174
- tg_bot_proxy_url: str | None = None
175
-
176
- tg_bot_init_sqlalchemy_db: bool = False
177
-
178
- tg_bot_init_json_db: bool = False
179
-
180
- var_dirpath: str | None = None
181
-
182
- log_filepath: str | None = None
183
-
184
- @field_validator("log_filepath", mode="after")
185
- def validate_log_filepath(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> str | None:
186
- if v is not None:
187
- return v
188
- var_dirpath = validation_info.data.get("var_dirpath")
189
- if var_dirpath is None:
190
- return None
191
- return os.path.join(var_dirpath, "story.log")
192
-
193
- cache_dirpath: str | None = None
194
-
195
- @field_validator("cache_dirpath", mode="after")
196
- def validate_cache_dirpath(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> str | None:
197
- if v is not None:
198
- return v
199
- var_dirpath = validation_info.data.get("var_dirpath")
200
- if var_dirpath is None:
201
- return None
202
- return os.path.join(var_dirpath, "cache")
203
-
204
- media_dirpath: str | None = None
205
-
206
- @field_validator("media_dirpath", mode="after")
207
- def validate_media_dirpath(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> str | None:
208
- if v is not None:
209
- return v
210
- var_dirpath = validation_info.data.get("var_dirpath")
211
- if var_dirpath is None:
212
- return None
213
- return os.path.join(var_dirpath, "media")
214
-
215
- dump_dirpath: str | None = None
216
-
217
- @field_validator("dump_dirpath", mode="after")
218
- def validate_dump_dirpath(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> str | None:
219
- if v is not None:
220
- return v
221
- var_dirpath = validation_info.data.get("var_dirpath")
222
- if var_dirpath is None:
223
- return None
224
- return os.path.join(var_dirpath, "dump")
225
-
226
- local_timezone: str | None = None
227
-
228
- @property
229
- def local_timezone_as_pytz(self) -> Any:
230
- return pytz.timezone(self.local_timezone)
231
-
232
- json_db_dirpath: str | None = None
233
-
234
- @field_validator("json_db_dirpath", mode="after")
235
- def validate_json_db_dirpath(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> str | None:
236
- if v is not None:
237
- return v
238
- var_dirpath = validation_info.data.get("var_dirpath")
239
- if var_dirpath is None:
240
- return None
241
- project_name = validation_info.data.get("project_name")
242
- return os.path.join(var_dirpath, f"{project_name}_json_db")
243
-
244
-
245
44
  def __example():
246
- print(safely_transfer_obj_to_json_str(AdvancedSettings(var_dirpath="./var").model_dump(mode="json")))
45
+ pass
247
46
 
248
47
 
249
48
  if __name__ == '__main__':
@@ -1,105 +1,10 @@
1
- # arpakit
2
- from sqladmin import ModelView
3
- from sqladmin.models import ModelViewMeta
4
-
5
- from arpakitlib.ar_class_util import CollectingSubclassesMeta
6
- from arpakitlib.ar_sqlalchemy_model_util import OperationDBM, StoryLogDBM
7
-
8
- _ARPAKIT_LIB_MODULE_VERSION = "3.0"
9
-
10
-
11
- def create_combined_meta(*metas):
12
- """
13
- Создает объединённый метакласс для устранения конфликтов.
14
- """
15
-
16
- class CombinedMeta(*metas):
17
- pass
18
-
19
- return CombinedMeta
20
-
1
+ from __future__ import annotations
21
2
 
22
- class SimpleModelView(ModelView, metaclass=create_combined_meta(CollectingSubclassesMeta, ModelViewMeta)):
23
- can_create = True
24
- can_edit = True
25
- can_delete = True
26
- can_view_details = True
27
- can_export = True
28
- page_size = 50
29
- page_size_options = [25, 50, 100, 200]
30
- save_as = True
31
- save_as_continue = True
32
- export_types = ["xlsx", "csv", "json"]
33
-
34
-
35
- class OperationMV(SimpleModelView, model=OperationDBM):
36
- name = "Operation"
37
- name_plural = "Operations"
38
- column_list = [
39
- OperationDBM.id,
40
- OperationDBM.long_id,
41
- OperationDBM.creation_dt,
42
- OperationDBM.status,
43
- OperationDBM.type,
44
- OperationDBM.execution_start_dt,
45
- OperationDBM.execution_finish_dt,
46
- OperationDBM.input_data,
47
- OperationDBM.output_data,
48
- OperationDBM.error_data
49
- ]
50
- form_columns = [
51
- OperationDBM.status,
52
- OperationDBM.type,
53
- OperationDBM.execution_start_dt,
54
- OperationDBM.execution_finish_dt,
55
- OperationDBM.input_data,
56
- OperationDBM.output_data,
57
- OperationDBM.error_data
58
- ]
59
- column_default_sort = [
60
- (OperationDBM.creation_dt, True)
61
- ]
62
- column_searchable_list = [
63
- OperationDBM.id,
64
- OperationDBM.long_id,
65
- OperationDBM.status,
66
- OperationDBM.type,
67
- ]
68
-
69
-
70
- class StoryLogMV(SimpleModelView, model=StoryLogDBM):
71
- name = "StoryLog"
72
- name_plural = "StoryLogs"
73
- column_list = [
74
- StoryLogDBM.id,
75
- StoryLogDBM.long_id,
76
- StoryLogDBM.creation_dt,
77
- StoryLogDBM.level,
78
- StoryLogDBM.title,
79
- StoryLogDBM.data
80
- ]
81
- form_columns = [
82
- StoryLogDBM.level,
83
- StoryLogDBM.title,
84
- StoryLogDBM.data
85
- ]
86
- column_default_sort = [
87
- (StoryLogDBM.creation_dt, True)
88
- ]
89
- column_searchable_list = [
90
- StoryLogDBM.id,
91
- StoryLogDBM.long_id,
92
- StoryLogDBM.level,
93
- StoryLogDBM.title,
94
- StoryLogDBM.data
95
- ]
96
-
97
-
98
- def __example():
99
- print(len(SimpleModelView.all_subclasses))
100
- for model_view in SimpleModelView.all_subclasses:
101
- print(model_view)
3
+ from sqladmin import ModelView
102
4
 
103
5
 
104
- if __name__ == '__main__':
105
- __example()
6
+ def get_string_info_from_model_view(class_: type[ModelView]):
7
+ res = f"Model Views: {len(class_.__subclasses__())}"
8
+ for i, cls in enumerate(class_.__subclasses__()):
9
+ res += f"\n{i + 1}. {cls.__name__}"
10
+ return res
@@ -12,18 +12,11 @@ from sqlalchemy.orm import sessionmaker, DeclarativeBase
12
12
  from sqlalchemy.orm.session import Session
13
13
 
14
14
  from arpakitlib.ar_datetime_util import now_utc_dt
15
- from arpakitlib.ar_sqlalchemy_model_util import BaseDBM
15
+ from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str
16
16
 
17
17
  _ARPAKIT_LIB_MODULE_VERSION = "3.0"
18
18
 
19
19
 
20
- def get_string_info_from_declarative_base(class_: type[DeclarativeBase]):
21
- res = f"Models: {len(class_.__subclasses__())}"
22
- for i, cls in enumerate(class_.__subclasses__()):
23
- res += f"\n{i + 1}. {cls.__name__}"
24
- return res
25
-
26
-
27
20
  def generate_sqlalchemy_url(
28
21
  *,
29
22
  base: str = "postgresql",
@@ -62,6 +55,57 @@ def generate_sqlalchemy_url(
62
55
  return f"{base}://{auth_part}{host_part}{database_part}{query_part}"
63
56
 
64
57
 
58
+ class BaseDBM(DeclarativeBase):
59
+ __abstract__ = True
60
+ _bus_data: dict[str, Any] | None = None
61
+
62
+ @property
63
+ def bus_data(self) -> dict[str, Any]:
64
+ if self._bus_data is None:
65
+ self._bus_data = {}
66
+ return self._bus_data
67
+
68
+ def simple_dict(self, *, include_sd_properties: bool = True) -> dict[str, Any]:
69
+ res = {}
70
+
71
+ for c in inspect(self).mapper.column_attrs:
72
+ value = getattr(self, c.key)
73
+ if isinstance(value, BaseDBM):
74
+ res[c.key] = value.simple_dict(include_sd_properties=include_sd_properties)
75
+ elif isinstance(value, list):
76
+ res[c.key] = [
77
+ item.simple_dict(include_sd_properties=include_sd_properties)
78
+ if isinstance(item, BaseDBM) else item
79
+ for item in value
80
+ ]
81
+ else:
82
+ res[c.key] = value
83
+
84
+ if include_sd_properties:
85
+ for attr_name in dir(self):
86
+ if attr_name.startswith("sdp_") and isinstance(getattr(type(self), attr_name, None), property):
87
+ prop_name = attr_name.removeprefix("sdp_")
88
+ value = getattr(self, attr_name)
89
+ if isinstance(value, BaseDBM):
90
+ res[prop_name] = value.simple_dict(include_sd_properties=include_sd_properties)
91
+ elif isinstance(value, list):
92
+ res[prop_name] = [
93
+ item.simple_dict(include_sd_properties=include_sd_properties)
94
+ if isinstance(item, BaseDBM) else item
95
+ for item in value
96
+ ]
97
+ else:
98
+ res[prop_name] = value
99
+
100
+ return res
101
+
102
+ def simple_dict_with_sd_properties(self) -> dict[str, Any]:
103
+ return self.simple_dict(include_sd_properties=True)
104
+
105
+ def simple_json(self, *, include_sd_properties: bool = True) -> str:
106
+ return safely_transfer_obj_to_json_str(self.simple_dict(include_sd_properties=include_sd_properties))
107
+
108
+
65
109
  class SQLAlchemyDb:
66
110
  def __init__(
67
111
  self,
@@ -72,7 +116,7 @@ class SQLAlchemyDb:
72
116
  base_dbm: type[BaseDBM] | None = None,
73
117
  db_models: list[Any] | None = None,
74
118
  ):
75
- self._logger = logging.getLogger()
119
+ self._logger = logging.getLogger(self.__class__.__name__)
76
120
 
77
121
  self.db_url = sync_db_url
78
122
  if self.db_url is not None:
@@ -101,6 +145,7 @@ class SQLAlchemyDb:
101
145
  self.func_new_async_session_counter = 0
102
146
 
103
147
  self.base_dbm = base_dbm
148
+ self.db_models = db_models
104
149
 
105
150
  def is_table_exists(self, table_name: str) -> bool:
106
151
  with self.engine.connect() as connection:
@@ -112,7 +157,7 @@ class SQLAlchemyDb:
112
157
  connection.execute(text("DROP TABLE IF EXISTS celery_tasksetmeta CASCADE;"))
113
158
  connection.execute(text("DROP TABLE IF EXISTS celery_taskmeta CASCADE;"))
114
159
  connection.commit()
115
- self._logger.info("celery tables were dropped")
160
+ self._logger.info("celery tables were dropped")
116
161
 
117
162
  def remove_celery_tables_data(self):
118
163
  if not self.is_table_exists("celery_tasksetmeta"):
@@ -122,14 +167,14 @@ class SQLAlchemyDb:
122
167
  connection.execute(text("DELETE FROM celery_tasksetmeta;"))
123
168
  connection.execute(text("DELETE FROM celery_taskmeta;"))
124
169
  connection.commit()
125
- self._logger.info("celery tables data were removed")
170
+ self._logger.info("celery tables data were removed")
126
171
 
127
172
  def drop_alembic_tables(self):
128
173
  with self.engine.connect() as connection:
129
174
  connection.execute(text("DROP TABLE IF EXISTS alembic_version CASCADE;"))
130
175
  connection.execute(text("DROP TABLE IF EXISTS alembic_version CASCADE;"))
131
176
  connection.commit()
132
- self._logger.info("alembic_version tables were dropped")
177
+ self._logger.info("alembic_version tables were dropped")
133
178
 
134
179
  def remove_alembic_tables_data(self):
135
180
  if not self.is_table_exists("alembic_version"):
@@ -138,7 +183,7 @@ class SQLAlchemyDb:
138
183
  with self.engine.connect() as connection:
139
184
  connection.execute(text("DELETE FROM alembic_version;"))
140
185
  connection.commit()
141
- self._logger.info("alembic tables data were removed")
186
+ self._logger.info("alembic tables data were removed")
142
187
 
143
188
  def init(self):
144
189
  self.base_dbm.metadata.create_all(bind=self.engine, checkfirst=True)
@@ -191,6 +236,13 @@ class SQLAlchemyDb:
191
236
  return now_utc_dt()
192
237
 
193
238
 
239
+ def get_string_info_from_declarative_base(class_: type[DeclarativeBase]):
240
+ res = f"Db Models: {len(class_.__subclasses__())}"
241
+ for i, cls in enumerate(class_.__subclasses__()):
242
+ res += f"\n{i + 1}. {cls.__name__}"
243
+ return res
244
+
245
+
194
246
  def __example():
195
247
  pass
196
248
 
@@ -151,8 +151,6 @@ def __example():
151
151
  except TypeError as e:
152
152
  print(e)
153
153
 
154
- print(get_setted_elements_as_dict_from_dict({"afs": "ASfa", "asfasf": NotSet}))
155
-
156
154
 
157
155
  if __name__ == '__main__':
158
156
  __example()
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.7.256
3
+ Version: 1.8.0
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
7
- Author: arpakit
8
- Author-email: arpakit@gmail.com
7
+ Author: arpakit_support
8
+ Author-email: support@arpakit.com
9
9
  Requires-Python: >=3.12.4,<4.0
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Intended Audience :: Developers
@@ -55,6 +55,7 @@ Requires-Dist: uvicorn (>=0.34.0,<0.35.0)
55
55
  Project-URL: Documentation, https://github.com/ARPAKIT-Company/arpakitlib
56
56
  Project-URL: Homepage, https://github.com/ARPAKIT-Company/arpakitlib
57
57
  Project-URL: Repository, https://github.com/ARPAKIT-Company/arpakitlib
58
+ Project-URL: arpakit_company_site, https://arpakit.com/
58
59
  Project-URL: telegram_channel, https://t.me/arpakitlib
59
60
  Description-Content-Type: text/markdown
60
61
 
@@ -85,11 +86,11 @@ poetry add arpakitlib
85
86
  pip install arpakitlib
86
87
  ```
87
88
 
88
- ### Init template
89
+ ### arpakitlib command
89
90
 
90
91
  ```
91
- # poetry run arpakitlib -c help
92
- poetry run arpakitlib -c init_arpakit_project_template -project_dirpath ./ -overwrite_if_exists true -project_name ... -sql_db_port ... (optional) -api_port ... (optional) -ignore_paths_startswith ... (optional) -only_paths_startswith ...(optional)
92
+ poetry run arpakitlib -c help
93
+ poetry run arpakitlib -c init_arpakit_project_template -version 1 -project_dirpath ./ -overwrite_if_exists True
93
94
  ```
94
95
 
95
96
  ---