arpakitlib 1.8.14__py3-none-any.whl → 1.8.16__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 (307) hide show
  1. arpakitlib/_arpakit_project_template_v_4/arpakitlib_project_template_info.json +3 -0
  2. arpakitlib/_arpakit_project_template_v_4/command/beautify_json.py +10 -0
  3. arpakitlib/_arpakit_project_template_v_4/command/demojize.py +9 -0
  4. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/drop_json_db.py +1 -1
  5. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/drop_sqlalchemy_db.py +1 -1
  6. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/generate_settings_env_example.py +2 -2
  7. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/reinit_json_db.py +1 -1
  8. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/reinit_sqlalchemy_db.py +1 -1
  9. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/remove_operations.py +1 -1
  10. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/remove_story_logs.py +1 -1
  11. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/rm_all_records_in_json_db.py +1 -1
  12. arpakitlib/_arpakit_project_template_v_4/command/set_tg_bot_commands.py +16 -0
  13. arpakitlib/_arpakit_project_template_v_4/command/show_settings.py +10 -0
  14. arpakitlib/_arpakit_project_template_v_4/command/start_sqladmin.py +19 -0
  15. arpakitlib/_arpakit_project_template_v_4/command/start_sqladmin_for_prod.py +19 -0
  16. arpakitlib/_arpakit_project_template_v_4/command/start_sqladmin_with_reload.py +19 -0
  17. arpakitlib/_arpakit_project_template_v_4/command/start_tg_bot_for_prod.py +11 -0
  18. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/example.env +11 -5
  19. arpakitlib/_arpakit_project_template_v_4/project/additional_model/common.py +8 -0
  20. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/auth.py +112 -36
  21. arpakitlib/_arpakit_project_template_v_4/project/api/auth2.py +171 -0
  22. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/create_api_app.py +7 -7
  23. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/event.py +8 -8
  24. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/exception.py +1 -1
  25. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/exception_handler.py +38 -36
  26. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/openapi_ui.py +1 -1
  27. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/response.py +5 -5
  28. arpakitlib/_arpakit_project_template_v_4/project/api/router/admin/get_arpakitlib_project_template_info.py +23 -0
  29. arpakitlib/_arpakit_project_template_v_4/project/api/router/admin/get_auth_data.py +30 -0
  30. arpakitlib/_arpakit_project_template_v_4/project/api/router/admin/main_router.py +3 -0
  31. arpakitlib/{_arpakit_project_template_v_2/project/api/router/general → _arpakit_project_template_v_4/project/api/router/client}/get_errors_info.py +3 -9
  32. arpakitlib/_arpakit_project_template_v_4/project/api/router/client/main_router.py +3 -0
  33. arpakitlib/_arpakit_project_template_v_4/project/api/router/client/now_utc_datetime.py +22 -0
  34. arpakitlib/_arpakit_project_template_v_4/project/api/router/general/healthcheck.py +21 -0
  35. arpakitlib/_arpakit_project_template_v_4/project/api/router/general/main_router.py +10 -0
  36. arpakitlib/_arpakit_project_template_v_4/project/api/router/main_router.py +23 -0
  37. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/admin/common.py +10 -0
  38. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/admin/operation.py +23 -0
  39. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/admin/story_log.py +17 -0
  40. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/client/common.py +10 -0
  41. arpakitlib/{_arpakit_project_template_v_2/project/api/schema/common/out.py → _arpakit_project_template_v_4/project/api/schema/out/common/datetime_.py} +2 -19
  42. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/common/raw_data.py +7 -0
  43. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/common.py +5 -0
  44. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/general/error.py +11 -0
  45. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/general/errors_info_general.py +6 -0
  46. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/general/healthcheck.py +5 -0
  47. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/const.py +2 -2
  48. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/settings.py +43 -39
  49. arpakitlib/_arpakit_project_template_v_4/project/site/router/__init__.py +0 -0
  50. arpakitlib/_arpakit_project_template_v_4/project/sqladmin_/__init__.py +0 -0
  51. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/admin_auth.py +17 -12
  52. arpakitlib/_arpakit_project_template_v_4/project/sqladmin_/asgi.py +3 -0
  53. arpakitlib/_arpakit_project_template_v_4/project/sqladmin_/create_sqladmin_app.py +49 -0
  54. arpakitlib/_arpakit_project_template_v_4/project/sqladmin_/event.py +40 -0
  55. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/model_view/operation.py +1 -1
  56. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/model_view/story_log.py +1 -1
  57. arpakitlib/_arpakit_project_template_v_4/project/sqlalchemy_db_/__init__.py +0 -0
  58. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_model/__init__.py +4 -0
  59. arpakitlib/_arpakit_project_template_v_4/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +44 -0
  60. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_model/common.py +29 -6
  61. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +2 -1
  62. arpakitlib/_arpakit_project_template_v_4/project/sqlalchemy_db_/sqlalchemy_model/user.py +87 -0
  63. arpakitlib/_arpakit_project_template_v_4/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +41 -0
  64. arpakitlib/_arpakit_project_template_v_4/project/test_data/__init__.py +0 -0
  65. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/__init__.py +0 -0
  66. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/__init__.py +0 -0
  67. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/admin.py +45 -0
  68. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/client.py +44 -0
  69. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/common.py +5 -0
  70. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/callback/__init__.py +0 -0
  71. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/callback/admin.py +0 -0
  72. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/callback/client.py +5 -0
  73. arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb/inline_/callback.py → _arpakit_project_template_v_4/project/tg_bot/callback/common.py} +7 -7
  74. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/const.py +22 -6
  75. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/error_handler.py +37 -0
  76. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/event.py +43 -13
  77. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/__init__.py +0 -0
  78. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/is_private_chat.py +12 -0
  79. arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/filter_.py → _arpakit_project_template_v_4/project/tg_bot/filter_/message_text.py} +1 -22
  80. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/not_prod_mode_filter.py +8 -0
  81. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/prod_mode_filter.py +8 -0
  82. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_admin.py +27 -0
  83. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_client.py +27 -0
  84. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/__init__.py +0 -0
  85. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/__init__.py +0 -0
  86. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/admin/__init__.py +0 -0
  87. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/admin/common.py +0 -0
  88. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/client/__init__.py +0 -0
  89. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/client/common.py +0 -0
  90. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/client/hello_world.py +16 -0
  91. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/inline_/common.py +0 -0
  92. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/__init__.py +0 -0
  93. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/admin/__init__.py +0 -0
  94. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/admin/common.py +0 -0
  95. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/client/__init__.py +0 -0
  96. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/client/common.py +0 -0
  97. arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb/static_/common.py → _arpakit_project_template_v_4/project/tg_bot/kb/static_/client/hello_world.py} +3 -3
  98. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/kb/static_/common.py +0 -0
  99. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/middleware/__init__.py +0 -0
  100. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/middleware/common.py +13 -0
  101. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/middleware/init_user.py +84 -0
  102. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/middleware/middleware.py +1 -2
  103. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/__init__.py +0 -0
  104. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/__init__.py +0 -0
  105. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/arpakitlib_project_template_info.py +25 -0
  106. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/main_router.py +15 -0
  107. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/me.py +20 -0
  108. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/raise_fake_error.py +20 -0
  109. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/reinit_sqlalchemy_db.py +27 -0
  110. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/__init__.py +0 -0
  111. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/healthcheck.py +16 -0
  112. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/hello_world.py +44 -0
  113. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/main_router.py +14 -0
  114. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/start.py +33 -0
  115. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/main_router.py +13 -0
  116. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/start_tg_bot.py +2 -2
  117. arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/tg_bot.py +7 -0
  118. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/util/__init__.py +0 -0
  119. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/util/etc.py +0 -0
  120. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/util/set_tg_bot_commands.py +76 -0
  121. arpakitlib/_arpakit_project_template_v_4/project/util/__init__.py +0 -0
  122. arpakitlib/ar_aiogram_util.py +0 -3
  123. arpakitlib/ar_arpakit_schedule_uust_api_client_util.py +1 -65
  124. arpakitlib/ar_json_util.py +43 -12
  125. arpakitlib/ar_sqlalchemy_util.py +2 -2
  126. arpakitlib/ar_ssh_runner_util.py +2 -2
  127. arpakitlib/ar_str_util.py +15 -0
  128. {arpakitlib-1.8.14.dist-info → arpakitlib-1.8.16.dist-info}/METADATA +2 -1
  129. arpakitlib-1.8.16.dist-info/RECORD +330 -0
  130. arpakitlib/_arpakit_project_template_v_2/arpakitlib_project_template_info.json +0 -3
  131. arpakitlib/_arpakit_project_template_v_2/command/beautify_json.py +0 -10
  132. arpakitlib/_arpakit_project_template_v_2/command/show_settings.py +0 -10
  133. arpakitlib/_arpakit_project_template_v_2/project/additional_model/common.py +0 -1
  134. arpakitlib/_arpakit_project_template_v_2/project/api/router/general/get_auth_data.py +0 -31
  135. arpakitlib/_arpakit_project_template_v_2/project/api/router/general/healthcheck.py +0 -26
  136. arpakitlib/_arpakit_project_template_v_2/project/api/router/general/main_router.py +0 -24
  137. arpakitlib/_arpakit_project_template_v_2/project/api/router/general/now_utc_datetime.py +0 -26
  138. arpakitlib/_arpakit_project_template_v_2/project/api/router/main_router.py +0 -11
  139. arpakitlib/_arpakit_project_template_v_2/project/api/schema/common/in_.py +0 -5
  140. arpakitlib/_arpakit_project_template_v_2/project/api/schema/example/in_.py +0 -5
  141. arpakitlib/_arpakit_project_template_v_2/project/api/schema/example/out.py +0 -45
  142. arpakitlib/_arpakit_project_template_v_2/project/api/schema/general/in_.py +0 -5
  143. arpakitlib/_arpakit_project_template_v_2/project/api/schema/general/out.py +0 -14
  144. arpakitlib/_arpakit_project_template_v_2/project/tg_bot/blank/blank.py +0 -24
  145. arpakitlib/_arpakit_project_template_v_2/project/tg_bot/kb/inline_/common.py +0 -15
  146. arpakitlib/_arpakit_project_template_v_2/project/tg_bot/middleware/init_user.py +0 -21
  147. arpakitlib/_arpakit_project_template_v_2/project/tg_bot/router/arpakitlib_project_template_info.py +0 -14
  148. arpakitlib/_arpakit_project_template_v_2/project/tg_bot/router/error.py +0 -16
  149. arpakitlib/_arpakit_project_template_v_2/project/tg_bot/router/healthcheck.py +0 -11
  150. arpakitlib/_arpakit_project_template_v_2/project/tg_bot/router/main_router.py +0 -12
  151. arpakitlib/_arpakit_project_template_v_2/project/tg_bot/util.py +0 -1
  152. arpakitlib-1.8.14.dist-info/RECORD +0 -265
  153. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/.gitignore +0 -0
  154. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/.python-version +0 -0
  155. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/LICENSE +0 -0
  156. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/README.md +0 -0
  157. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic/README +0 -0
  158. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic/env.py +0 -0
  159. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic/script.py.mako +0 -0
  160. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic/versions/__init__.py +0 -0
  161. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/alembic.ini +0 -0
  162. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/__init__.py +0 -0
  163. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/alembic_history.sh +0 -0
  164. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/alembic_revision_autogenerate.sh +0 -0
  165. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/alembic_upgrade_head.sh +0 -0
  166. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/check_logging.py +0 -0
  167. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/check_sqlalchemy_db.py +0 -0
  168. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_ps_a.sh +0 -0
  169. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_rm_postgres.sh +0 -0
  170. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_run_postgres.sh +0 -0
  171. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_start_postgres.sh +0 -0
  172. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/docker_stop_postgres.sh +0 -0
  173. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_commit.sh +0 -0
  174. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_push_arpakit_company_github_1.sh +0 -0
  175. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_push_arpakit_company_gitlab_1.sh +0 -0
  176. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_push_arpakit_github_1.sh +0 -0
  177. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_push_arpakit_gitlab_1.sh +0 -0
  178. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_remote_v.sh +0 -0
  179. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_set_arpakit_company_origin.sh +0 -0
  180. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_set_arpakit_origin.sh +0 -0
  181. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_set_divarteam_origin.sh +0 -0
  182. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/git_status.sh +0 -0
  183. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/hello_world.py +0 -0
  184. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/init_json_db.py +0 -0
  185. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/init_sqlalchemy_db.py +0 -0
  186. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_check.sh +0 -0
  187. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_clear_cache.sh +0 -0
  188. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_config.sh +0 -0
  189. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_install.sh +0 -0
  190. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_lock.sh +0 -0
  191. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_remove_and_add_arpakitlib.sh +0 -0
  192. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_show.sh +0 -0
  193. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_show_arpakitlib.sh +0 -0
  194. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_update.sh +0 -0
  195. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/poetry_update_arpakitlib.sh +0 -0
  196. /arpakitlib/{_arpakit_project_template_v_2/command/start_api_for_not_prod.py → _arpakit_project_template_v_4/command/start_api.py} +0 -0
  197. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/command/start_api_for_prod.py +0 -0
  198. /arpakitlib/{_arpakit_project_template_v_2/command/start_api_with_reload_for_not_prod.py → _arpakit_project_template_v_4/command/start_api_with_reload.py} +0 -0
  199. /arpakitlib/{_arpakit_project_template_v_2/command/start_operation_executor_worker_for_not_prod.py → _arpakit_project_template_v_4/command/start_operation_executor_worker.py} +0 -0
  200. /arpakitlib/{_arpakit_project_template_v_2/command/start_operation_executor_workers_for_not_prod.py → _arpakit_project_template_v_4/command/start_operation_executor_workers.py} +0 -0
  201. /arpakitlib/{_arpakit_project_template_v_2/command/start_scheduled_operation_creator_worker_for_not_prod.py → _arpakit_project_template_v_4/command/start_scheduled_operation_creator_worker.py} +0 -0
  202. /arpakitlib/{_arpakit_project_template_v_2/command/start_tg_bot_for_prod.py → _arpakit_project_template_v_4/command/start_tg_bot.py} +0 -0
  203. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_1.txt +0 -0
  204. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_2.txt +0 -0
  205. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_3.txt +0 -0
  206. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_4.txt +0 -0
  207. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/note/note_5.txt +0 -0
  208. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/__init__.py +0 -0
  209. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/additional_model/__init__.py +0 -0
  210. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/__init__.py +0 -0
  211. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/asgi.py +0 -0
  212. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/const.py +0 -0
  213. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/api/router/__init__.py +0 -0
  214. /arpakitlib/{_arpakit_project_template_v_2/project/api/router/general → _arpakit_project_template_v_4/project/api/router/admin}/__init__.py +0 -0
  215. /arpakitlib/{_arpakit_project_template_v_2/project/api/schema → _arpakit_project_template_v_4/project/api/router/client}/__init__.py +0 -0
  216. /arpakitlib/{_arpakit_project_template_v_2/project/api/schema/common → _arpakit_project_template_v_4/project/api/router/general}/__init__.py +0 -0
  217. /arpakitlib/{_arpakit_project_template_v_2/project/api/schema/example → _arpakit_project_template_v_4/project/api/schema}/__init__.py +0 -0
  218. /arpakitlib/{_arpakit_project_template_v_2/project/api/schema/base_schema.py → _arpakit_project_template_v_4/project/api/schema/common.py} +0 -0
  219. /arpakitlib/{_arpakit_project_template_v_2/project/api/schema/general → _arpakit_project_template_v_4/project/api/schema/in_}/__init__.py +0 -0
  220. /arpakitlib/{_arpakit_project_template_v_2/project/business_service → _arpakit_project_template_v_4/project/api/schema/in_/admin}/__init__.py +0 -0
  221. /arpakitlib/{_arpakit_project_template_v_2/project/api/util.py → _arpakit_project_template_v_4/project/api/schema/in_/admin/common.py} +0 -0
  222. /arpakitlib/{_arpakit_project_template_v_2/project/celery_ → _arpakit_project_template_v_4/project/api/schema/in_/client}/__init__.py +0 -0
  223. /arpakitlib/{_arpakit_project_template_v_2/project/core/__init__.py → _arpakit_project_template_v_4/project/api/schema/in_/client/common.py} +0 -0
  224. /arpakitlib/{_arpakit_project_template_v_2/project/json_db → _arpakit_project_template_v_4/project/api/schema/in_/general}/__init__.py +0 -0
  225. /arpakitlib/{_arpakit_project_template_v_2/project/operation_execution/__init__.py → _arpakit_project_template_v_4/project/api/schema/in_/general/common.py} +0 -0
  226. /arpakitlib/{_arpakit_project_template_v_2/project/resource → _arpakit_project_template_v_4/project/api/schema/out}/__init__.py +0 -0
  227. /arpakitlib/{_arpakit_project_template_v_2/project/sandbox → _arpakit_project_template_v_4/project/api/schema/out/admin}/__init__.py +0 -0
  228. /arpakitlib/{_arpakit_project_template_v_2/project/site → _arpakit_project_template_v_4/project/api/schema/out/client}/__init__.py +0 -0
  229. /arpakitlib/{_arpakit_project_template_v_2/project/site/router → _arpakit_project_template_v_4/project/api/schema/out/common}/__init__.py +0 -0
  230. /arpakitlib/{_arpakit_project_template_v_2/project/sqladmin_ → _arpakit_project_template_v_4/project/api/schema/out/general}/__init__.py +0 -0
  231. /arpakitlib/{_arpakit_project_template_v_2/project/site/consts.py → _arpakit_project_template_v_4/project/api/schema/out/general/common.py} +0 -0
  232. /arpakitlib/{_arpakit_project_template_v_2/project/site/exception_handler.py → _arpakit_project_template_v_4/project/api/util.py} +0 -0
  233. /arpakitlib/{_arpakit_project_template_v_2/project/sqlalchemy_db_ → _arpakit_project_template_v_4/project/business_service}/__init__.py +0 -0
  234. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/business_service/hello_world.py +0 -0
  235. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/business_service/remove_operations.py +0 -0
  236. /arpakitlib/{_arpakit_project_template_v_2/project/test_data → _arpakit_project_template_v_4/project/celery_}/__init__.py +0 -0
  237. /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot → _arpakit_project_template_v_4/project/core}/__init__.py +0 -0
  238. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/cache_file_storage_in_dir.py +0 -0
  239. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/dump_file_storage_in_dir.py +0 -0
  240. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/jinja2_templates.py +0 -0
  241. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/media_file_storage_in_dir.py +0 -0
  242. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/core/util.py +0 -0
  243. /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/blank → _arpakit_project_template_v_4/project/json_db}/__init__.py +0 -0
  244. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/json_db/json_db.py +0 -0
  245. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/more/helloworld +0 -0
  246. /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb → _arpakit_project_template_v_4/project/operation_execution}/__init__.py +0 -0
  247. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/const.py +0 -0
  248. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/operation_executor_worker.py +0 -0
  249. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/scheduled_operation_creator_worker.py +0 -0
  250. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/scheduled_operations.py +0 -0
  251. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/operation_execution/util.py +0 -0
  252. /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb/inline_ → _arpakit_project_template_v_4/project/resource}/__init__.py +0 -0
  253. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/1 +0 -0
  254. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/healthcheck +0 -0
  255. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/helloworld +0 -0
  256. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/openapi-favicon.png +0 -0
  257. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/redoc/redoc.standalone.js +0 -0
  258. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/favicon-16x16.png +0 -0
  259. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/favicon-32x32.png +0 -0
  260. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/index.css +0 -0
  261. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/index.html +0 -0
  262. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/oauth2-redirect.html +0 -0
  263. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-initializer.js +0 -0
  264. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-bundle.js +0 -0
  265. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-bundle.js.map +0 -0
  266. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js +0 -0
  267. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -0
  268. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js +0 -0
  269. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
  270. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js +0 -0
  271. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
  272. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui.css +0 -0
  273. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui.css.map +0 -0
  274. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui.js +0 -0
  275. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/resource/static/swagger-ui/swagger-ui.js.map +0 -0
  276. /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/kb/static_ → _arpakit_project_template_v_4/project/sandbox}/__init__.py +0 -0
  277. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_1.py +0 -0
  278. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_2.py +0 -0
  279. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_3.py +0 -0
  280. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_4.py +0 -0
  281. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_5.py +0 -0
  282. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_6.py +0 -0
  283. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sandbox/sandbox_7.py +0 -0
  284. /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/middleware → _arpakit_project_template_v_4/project/site}/__init__.py +0 -0
  285. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/site/asgi.py +0 -0
  286. /arpakitlib/{_arpakit_project_template_v_2/project/tg_bot/router/__init__.py → _arpakit_project_template_v_4/project/site/consts.py} +0 -0
  287. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/site/create_site_app.py +0 -0
  288. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/site/event.py +0 -0
  289. /arpakitlib/{_arpakit_project_template_v_2/project/util/__init__.py → _arpakit_project_template_v_4/project/site/exception_handler.py} +0 -0
  290. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/site/router/main_router.py +0 -0
  291. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/add_admin_in_app.py +0 -0
  292. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/model_view/__init__.py +0 -0
  293. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqladmin_/model_view/common.py +0 -0
  294. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/const.py +0 -0
  295. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_db.py +0 -0
  296. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/sqlalchemy_model/operation.py +0 -0
  297. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/sqlalchemy_db_/util.py +0 -0
  298. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_1.py +0 -0
  299. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_2.py +0 -0
  300. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_3.py +0 -0
  301. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_4.py +0 -0
  302. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/test_data/make_test_data_5.py +0 -0
  303. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/tg_bot/tg_bot_dispatcher.py +0 -0
  304. /arpakitlib/{_arpakit_project_template_v_2 → _arpakit_project_template_v_4}/project/util/arpakitlib_project_template.py +0 -0
  305. {arpakitlib-1.8.14.dist-info → arpakitlib-1.8.16.dist-info}/LICENSE +0 -0
  306. {arpakitlib-1.8.14.dist-info → arpakitlib-1.8.16.dist-info}/WHEEL +0 -0
  307. {arpakitlib-1.8.14.dist-info → arpakitlib-1.8.16.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,23 @@
1
+ from fastapi import APIRouter
2
+
3
+ from project.api.router.admin.main_router import main_admin_api_router
4
+ from project.api.router.client.main_router import main_client_api_router
5
+ from project.api.router.general.main_router import main_general_api_router
6
+
7
+ main_api_router = APIRouter()
8
+
9
+ main_api_router.include_router(
10
+ prefix="/general",
11
+ router=main_general_api_router,
12
+ tags=["General"]
13
+ )
14
+ main_api_router.include_router(
15
+ prefix="/client",
16
+ router=main_client_api_router,
17
+ tags=["Client"]
18
+ )
19
+ main_api_router.include_router(
20
+ prefix="/admin",
21
+ router=main_admin_api_router,
22
+ tags=["Admin"]
23
+ )
@@ -0,0 +1,10 @@
1
+ import datetime as dt
2
+
3
+ from project.api.schema.common import BaseSO
4
+
5
+
6
+ class SimpleDBMAdminCommonSO(BaseSO):
7
+ id: int
8
+ long_id: str
9
+ slug: str | None
10
+ creation_dt: dt.datetime
@@ -0,0 +1,23 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime as dt
4
+ from typing import Any
5
+
6
+ from project.api.schema.out.admin.common import SimpleDBMAdminCommonSO
7
+ from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
8
+
9
+
10
+ class OperationAdminSO(SimpleDBMAdminCommonSO):
11
+ execution_start_dt: dt.datetime | None
12
+ execution_finish_dt: dt.datetime | None
13
+ status: str
14
+ type: str
15
+ title: str | None
16
+ input_data: dict[str, Any]
17
+ output_data: dict[str, Any]
18
+ error_data: dict[str, Any]
19
+ duration_total_seconds: float | None
20
+
21
+ @classmethod
22
+ def from_operation_dbm(cls, *, operation_dbm: OperationDBM) -> OperationAdminSO:
23
+ return cls.model_validate(operation_dbm.simple_dict_with_sd_properties())
@@ -0,0 +1,17 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from project.api.schema.out.admin.common import SimpleDBMAdminCommonSO
6
+ from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
7
+
8
+
9
+ class StoryLogAdminSO(SimpleDBMAdminCommonSO):
10
+ level: str
11
+ type: str | None
12
+ title: str | None
13
+ data: dict[str, Any]
14
+
15
+ @classmethod
16
+ def from_story_log_dbm(cls, *, story_log_dbm: StoryLogDBM) -> StoryLogAdminSO:
17
+ return cls.model_validate(story_log_dbm.simple_dict_with_sd_properties())
@@ -0,0 +1,10 @@
1
+ import datetime as dt
2
+
3
+ from project.api.schema.common import BaseSO
4
+
5
+
6
+ class SimpleDBMClientCommonSO(BaseSO):
7
+ id: int
8
+ long_id: str
9
+ slug: str | None
10
+ creation_dt: dt.datetime
@@ -1,22 +1,9 @@
1
1
  import datetime as dt
2
- from typing import Any
3
2
 
4
- from project.api.schema.base_schema import BaseSO
3
+ from project.api.schema.common import BaseSO
5
4
 
6
5
 
7
- class BaseCommonSO(BaseSO):
8
- pass
9
-
10
-
11
- class ErrorCommonSO(BaseCommonSO):
12
- has_error: bool = True
13
- error_code: str | None = None
14
- error_specification_code: str | None = None
15
- error_description: str | None = None
16
- error_data: dict[str, Any] = {}
17
-
18
-
19
- class DatetimeCommonSO(BaseCommonSO):
6
+ class DatetimeCommonSO(BaseSO):
20
7
  date: dt.date
21
8
  datetime: dt.datetime | None = None
22
9
  year: int
@@ -49,7 +36,3 @@ class DatetimeCommonSO(BaseCommonSO):
49
36
  month=date_.month,
50
37
  day=date_.day
51
38
  )
52
-
53
-
54
- class RawDataCommonSO(BaseCommonSO):
55
- data: dict[str, Any] = {}
@@ -0,0 +1,7 @@
1
+ from typing import Any
2
+
3
+ from project.api.schema.common import BaseSO
4
+
5
+
6
+ class RawDataCommonSO(BaseSO):
7
+ data: dict[str, Any] = {}
@@ -0,0 +1,5 @@
1
+ from project.api.schema.common import BaseSchema
2
+
3
+
4
+ class BaseSO(BaseSchema):
5
+ pass
@@ -0,0 +1,11 @@
1
+ from typing import Any
2
+
3
+ from project.api.schema.common import BaseSO
4
+
5
+
6
+ class ErrorGeneralSO(BaseSO):
7
+ has_error: bool = True
8
+ error_code: str | None = None
9
+ error_specification_code: str | None = None
10
+ error_description: str | None = None
11
+ error_data: dict[str, Any] = {}
@@ -0,0 +1,6 @@
1
+ from project.api.schema.common import BaseSO
2
+
3
+
4
+ class ErrorsInfoGeneralSO(BaseSO):
5
+ api_error_codes: list[str] = []
6
+ api_error_specification_codes: list[str] = []
@@ -0,0 +1,5 @@
1
+ from project.api.schema.common import BaseSO
2
+
3
+
4
+ class HealthcheckGeneralSO(BaseSO):
5
+ is_ok: bool = True
@@ -3,7 +3,7 @@ import os
3
3
  import pathlib
4
4
 
5
5
  from arpakitlib.ar_enumeration_util import Enumeration
6
- from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str
6
+ from arpakitlib.ar_json_util import transfer_data_to_json_str
7
7
 
8
8
 
9
9
  class ProjectPaths(Enumeration):
@@ -25,7 +25,7 @@ class ProjectPaths(Enumeration):
25
25
 
26
26
 
27
27
  def __example():
28
- print(safely_transfer_obj_to_json_str(ProjectPaths.key_to_value()))
28
+ print(transfer_data_to_json_str(ProjectPaths.key_to_value()))
29
29
 
30
30
 
31
31
  async def __async_example():
@@ -6,44 +6,23 @@ import pytz
6
6
  from pydantic import field_validator
7
7
  from pydantic_core.core_schema import ValidationInfo
8
8
 
9
- from arpakitlib.ar_enumeration_util import Enumeration
10
- from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str
9
+ from arpakitlib.ar_json_util import transfer_data_to_json_str
11
10
  from arpakitlib.ar_settings_util import SimpleSettings
12
11
  from arpakitlib.ar_sqlalchemy_util import generate_sqlalchemy_url
12
+ from arpakitlib.ar_type_util import raise_for_type
13
13
  from project.core.const import ProjectPaths
14
14
 
15
15
 
16
- class ModeTypes(Enumeration):
17
- not_prod: str = "not_prod"
18
- prod: str = "prod"
19
-
20
-
21
16
  class Settings(SimpleSettings):
22
- mode_type: str = ModeTypes.not_prod
23
-
24
- @field_validator("mode_type")
25
- @classmethod
26
- def validate_mode_type(cls, v: Any, validation_info: ValidationInfo, **kwargs):
27
- if v is None:
28
- v = ModeTypes.not_prod
29
- ModeTypes.parse_and_validate_values(v.lower().strip())
30
- return v
31
-
32
- @property
33
- def is_mode_type_not_prod(self) -> bool:
34
- return self.mode_type == ModeTypes.not_prod
35
-
36
- def raise_if_mode_type_not_prod(self):
37
- if self.is_mode_type_not_prod:
38
- raise ValueError(f"mode type = {self.mode_type}")
17
+ prod_mode: bool = False
39
18
 
40
- @property
41
- def is_mode_type_prod(self) -> bool:
42
- return self.mode_type == ModeTypes.prod
19
+ def raise_if_prod_mode(self):
20
+ if self.prod_mode:
21
+ raise ValueError(f"self.prod_mode")
43
22
 
44
- def raise_if_mode_type_prod(self):
45
- if self.is_mode_type_prod:
46
- raise ValueError(f"mode type = {self.mode_type}")
23
+ def raise_if_not_prod_mode(self):
24
+ if not self.prod_mode:
25
+ raise ValueError(f"not self.prod_mode")
47
26
 
48
27
  project_name: str | None = "project"
49
28
 
@@ -105,10 +84,10 @@ class Settings(SimpleSettings):
105
84
 
106
85
  api_init_json_db: bool = False
107
86
 
108
- api_correct_api_keys: list[str] | None = ["1"]
87
+ api_api_keys: list[str] | None = ["1"]
109
88
 
110
- @field_validator("api_correct_api_keys", mode="before")
111
- def validate_api_correct_api_keys(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
89
+ @field_validator("api_api_keys", mode="before")
90
+ def validate_api_api_keys(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
112
91
  if isinstance(v, str):
113
92
  v = [v]
114
93
  if isinstance(v, int):
@@ -119,10 +98,10 @@ class Settings(SimpleSettings):
119
98
  v[i] = str(v_)
120
99
  return v
121
100
 
122
- api_correct_tokens: list[str] | None = ["1"]
101
+ api_user_tokens: list[str] | None = ["1"]
123
102
 
124
- @field_validator("api_correct_tokens", mode="before")
125
- def validate_api_correct_tokens(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
103
+ @field_validator("api_user_tokens", mode="before")
104
+ def validate_api_tokens(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
126
105
  if isinstance(v, str):
127
106
  v = [v]
128
107
  if isinstance(v, int):
@@ -139,11 +118,25 @@ class Settings(SimpleSettings):
139
118
 
140
119
  api_start_scheduled_operation_creator_worker: bool = False
141
120
 
142
- api_story_log__api_func_before_in_exception_handler: bool = False
121
+ api_create_story_log_func_before_in_api_exception_handler: bool = False
143
122
 
144
123
  sqladmin_secret_key: str | None = "85a9583cb91c4de7a78d7eb1e5306a04418c9c43014c447ea8ec8dd5deb4cf71"
145
124
 
146
- sqladmin_correct_passwords: list[str] | None = ["1"]
125
+ sqladmin_auth_keys: list[str] | None = ["1"]
126
+
127
+ @field_validator("sqladmin_auth_keys", mode="before")
128
+ def validate_sqladmin_auth_keys(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
129
+ if isinstance(v, str):
130
+ v = [v]
131
+ if isinstance(v, int):
132
+ v = [str(v)]
133
+ if isinstance(v, list):
134
+ for i, v_ in enumerate(v):
135
+ if isinstance(v_, int):
136
+ v[i] = str(v_)
137
+ return v
138
+
139
+ sqladmin_port: int | None = 8081
147
140
 
148
141
  tg_bot_token: str | None = None
149
142
 
@@ -165,6 +158,16 @@ class Settings(SimpleSettings):
165
158
 
166
159
  tg_bot_webhook_enabled: bool = False
167
160
 
161
+ tg_bot_drop_pending_updates: bool = True
162
+
163
+ tg_bot_start_operation_executor_worker: bool = False
164
+
165
+ tg_bot_start_scheduled_operation_creator_worker: bool = False
166
+
167
+ tg_bot_command_passwd: str | None = "1"
168
+
169
+ tg_bot_admin_tg_ids: list[int] = [269870432]
170
+
168
171
  var_dirpath: str | None = os.path.join(ProjectPaths.base_dirpath, "var")
169
172
 
170
173
  log_filepath: str | None = os.path.join(var_dirpath, "story.log")
@@ -181,6 +184,7 @@ class Settings(SimpleSettings):
181
184
 
182
185
  @property
183
186
  def local_timezone_as_pytz(self) -> Any:
187
+ raise_for_type(self.local_timezone, str)
184
188
  return pytz.timezone(self.local_timezone)
185
189
 
186
190
 
@@ -192,4 +196,4 @@ def get_cached_settings() -> Settings:
192
196
 
193
197
 
194
198
  if __name__ == '__main__':
195
- print(safely_transfer_obj_to_json_str(get_cached_settings().model_dump(mode="json")))
199
+ print(transfer_data_to_json_str(get_cached_settings().model_dump(mode="json")))
@@ -3,6 +3,7 @@ import logging
3
3
  import fastapi
4
4
  from sqladmin.authentication import AuthenticationBackend
5
5
 
6
+ from arpakitlib.ar_str_util import make_none_if_blank
6
7
  from project.core.settings import get_cached_settings
7
8
 
8
9
 
@@ -14,33 +15,36 @@ class SQLAdminAuth(AuthenticationBackend):
14
15
  async def login(self, request: fastapi.Request) -> bool:
15
16
  form = await request.form()
16
17
 
17
- username, password = form.get("username"), form.get("password")
18
+ username = form.get("username")
18
19
  if username:
19
20
  username = username.strip()
21
+ username = make_none_if_blank(username)
22
+
23
+ password = form.get("password")
20
24
  if password:
21
25
  password = password.strip()
26
+ password = make_none_if_blank(password)
22
27
 
23
- if get_cached_settings().sqladmin_correct_passwords is not None:
28
+ if get_cached_settings().sqladmin_auth_keys is not None:
24
29
  if (
25
30
  (
26
31
  is_username_correct := (
27
32
  username is not None
28
- and username in get_cached_settings().sqladmin_correct_passwords
33
+ and username in get_cached_settings().sqladmin_auth_keys
29
34
  )
30
35
  )
31
36
  or
32
37
  (
33
38
  is_password_correct := (
34
39
  password is not None
35
- and password in get_cached_settings().sqladmin_correct_passwords
40
+ and password in get_cached_settings().sqladmin_auth_keys
36
41
  )
37
42
  )
38
43
  ):
39
44
  if is_username_correct is True:
40
- request.session.update({"sqladmin_key": username})
45
+ request.session.update({"sqladmin_auth_key": username})
41
46
  elif is_password_correct is True:
42
- request.session.update({"sqladmin_key": password})
43
-
47
+ request.session.update({"sqladmin_auth_key": password})
44
48
  return True
45
49
 
46
50
  return False
@@ -50,12 +54,13 @@ class SQLAdminAuth(AuthenticationBackend):
50
54
  return True
51
55
 
52
56
  async def authenticate(self, request: fastapi.Request) -> bool:
53
- sqladmin_key = request.session.get("sqladmin_key")
54
- if sqladmin_key:
55
- sqladmin_key = sqladmin_key.strip()
57
+ sqladmin_auth_key = request.session.get("sqladmin_auth_key")
58
+ if sqladmin_auth_key:
59
+ sqladmin_auth_key = sqladmin_auth_key.strip()
60
+ sqladmin_auth_key = make_none_if_blank(sqladmin_auth_key)
56
61
 
57
- if get_cached_settings().sqladmin_correct_passwords is not None:
58
- if sqladmin_key is not None and sqladmin_key in get_cached_settings().sqladmin_correct_passwords:
62
+ if get_cached_settings().sqladmin_auth_keys is not None:
63
+ if sqladmin_auth_key is not None and sqladmin_auth_key in get_cached_settings().sqladmin_auth_keys:
59
64
  return True
60
65
 
61
66
  return False
@@ -0,0 +1,3 @@
1
+ from project.sqladmin_.create_sqladmin_app import create_sqladmin_app
2
+
3
+ app = create_sqladmin_app()
@@ -0,0 +1,49 @@
1
+ import logging
2
+
3
+ from fastapi import FastAPI
4
+ from fastapi.middleware.cors import CORSMiddleware
5
+
6
+ from project.core.settings import get_cached_settings
7
+ from project.core.util import setup_logging
8
+ from project.sqladmin_.add_admin_in_app import add_sqladmin_in_app
9
+ from project.sqladmin_.event import get_sqladmin_startup_events, get_sqladmin_shutdown_events
10
+
11
+ _logger = logging.getLogger(__name__)
12
+
13
+
14
+ def create_sqladmin_app(*, prefix: str = "/sqladmin") -> FastAPI:
15
+ setup_logging()
16
+
17
+ _logger.info("start")
18
+
19
+ sqladmin_app = FastAPI(
20
+ title=get_cached_settings().project_name,
21
+ description=get_cached_settings().project_name,
22
+ docs_url=None,
23
+ redoc_url=None,
24
+ openapi_url=None,
25
+ on_startup=get_sqladmin_startup_events(),
26
+ on_shutdown=get_sqladmin_shutdown_events(),
27
+ contact={
28
+ "name": "ARPAKIT Company",
29
+ "url": "https://arpakit.com/",
30
+ "email": "support@arpakit.com",
31
+ },
32
+ )
33
+
34
+ sqladmin_app.add_middleware(
35
+ CORSMiddleware,
36
+ allow_origins=["*"],
37
+ allow_credentials=True,
38
+ allow_methods=["*"],
39
+ allow_headers=["*"],
40
+ )
41
+
42
+ add_sqladmin_in_app(
43
+ app=sqladmin_app,
44
+ base_url=prefix
45
+ )
46
+
47
+ _logger.info("finish")
48
+
49
+ return sqladmin_app
@@ -0,0 +1,40 @@
1
+ import logging
2
+ from typing import Callable
3
+
4
+ from project.core.settings import get_cached_settings
5
+ from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
6
+
7
+ _logger = logging.getLogger(__name__)
8
+
9
+
10
+ # STARTUP API EVENTS
11
+
12
+
13
+ async def async_sqladmin_startup_event():
14
+ _logger.info("start")
15
+
16
+ if (
17
+ get_cached_sqlalchemy_db() is not None
18
+ and get_cached_settings().api_init_sqlalchemy_db
19
+ ):
20
+ get_cached_sqlalchemy_db().init()
21
+
22
+ _logger.info("finish")
23
+
24
+
25
+ def get_sqladmin_startup_events() -> list[Callable]:
26
+ res = [async_sqladmin_startup_event]
27
+ return res
28
+
29
+
30
+ # SHUTDOWN API EVENTS
31
+
32
+
33
+ async def async_sqladmin_shutdown_event():
34
+ _logger.info("start")
35
+ _logger.info("finish")
36
+
37
+
38
+ def get_sqladmin_shutdown_events() -> list[Callable]:
39
+ res = [async_sqladmin_shutdown_event]
40
+ return res
@@ -1,4 +1,4 @@
1
- from project.sqladmin_.model_view.common import SimpleMV
1
+ from project.sqladmin_.model_view import SimpleMV
2
2
  from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- from project.sqladmin_.model_view.common import SimpleMV
1
+ from project.sqladmin_.model_view import SimpleMV
2
2
  from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
3
3
 
4
4
 
@@ -1,7 +1,11 @@
1
1
  from arpakitlib.ar_sqlalchemy_util import get_string_info_from_declarative_base
2
+
3
+ from project.sqlalchemy_db_.sqlalchemy_model.api_key import ApiKeyDBM
2
4
  from project.sqlalchemy_db_.sqlalchemy_model.common import SimpleDBM
3
5
  from project.sqlalchemy_db_.sqlalchemy_model.operation import OperationDBM
4
6
  from project.sqlalchemy_db_.sqlalchemy_model.story_log import StoryLogDBM
7
+ from project.sqlalchemy_db_.sqlalchemy_model.user import UserDBM
8
+ from project.sqlalchemy_db_.sqlalchemy_model.user_token import UserTokenDBM
5
9
 
6
10
  if __name__ == '__main__':
7
11
  print(get_string_info_from_declarative_base(SimpleDBM))
@@ -0,0 +1,44 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+ from uuid import uuid4
5
+
6
+ import sqlalchemy
7
+ from sqlalchemy.orm import Mapped, mapped_column
8
+
9
+ from arpakitlib.ar_datetime_util import now_utc_dt
10
+ from project.sqlalchemy_db_.sqlalchemy_model.common import SimpleDBM
11
+
12
+ if TYPE_CHECKING:
13
+ pass
14
+
15
+
16
+ def generate_default_api_key_value() -> str:
17
+ return (
18
+ f"apikey"
19
+ f"{str(uuid4()).replace('-', '')}"
20
+ f"{str(now_utc_dt().timestamp()).replace('.', '')}"
21
+ )
22
+
23
+
24
+ class ApiKeyDBM(SimpleDBM):
25
+ __tablename__ = "api_key"
26
+
27
+ title: Mapped[str | None] = mapped_column(
28
+ sqlalchemy.TEXT,
29
+ insert_default=None,
30
+ nullable=True
31
+ )
32
+ value: Mapped[str] = mapped_column(
33
+ sqlalchemy.TEXT,
34
+ unique=True,
35
+ insert_default=generate_default_api_key_value,
36
+ nullable=False
37
+ )
38
+ is_enabled: Mapped[bool] = mapped_column(
39
+ sqlalchemy.Boolean,
40
+ index=True,
41
+ insert_default=True,
42
+ server_default="true",
43
+ nullable=False
44
+ )
@@ -1,4 +1,5 @@
1
1
  from datetime import datetime
2
+ from typing import Any
2
3
 
3
4
  import sqlalchemy
4
5
  from sqlalchemy import func
@@ -13,18 +14,40 @@ class SimpleDBM(BaseDBM):
13
14
  __abstract__ = True
14
15
 
15
16
  id: Mapped[int] = mapped_column(
16
- sqlalchemy.INTEGER, primary_key=True, autoincrement=True, sort_order=-13, nullable=False
17
+ sqlalchemy.INTEGER,
18
+ primary_key=True,
19
+ autoincrement=True,
20
+ sort_order=-103,
21
+ nullable=False
17
22
  )
18
23
  long_id: Mapped[str] = mapped_column(
19
- sqlalchemy.TEXT, insert_default=generate_default_long_id, server_default=func.gen_random_uuid(),
20
- unique=True, sort_order=-12, nullable=False
24
+ sqlalchemy.TEXT,
25
+ insert_default=generate_default_long_id,
26
+ server_default=func.gen_random_uuid(),
27
+ unique=True,
28
+ sort_order=-102,
29
+ nullable=False
21
30
  )
22
31
  slug: Mapped[str | None] = mapped_column(
23
- sqlalchemy.TEXT, unique=True, sort_order=-11, nullable=True
32
+ sqlalchemy.TEXT,
33
+ unique=True,
34
+ sort_order=-101,
35
+ nullable=True
24
36
  )
25
37
  creation_dt: Mapped[datetime] = mapped_column(
26
- sqlalchemy.TIMESTAMP(timezone=True), insert_default=now_utc_dt, server_default=func.now(),
27
- index=True, sort_order=-10, nullable=False
38
+ sqlalchemy.TIMESTAMP(timezone=True),
39
+ insert_default=now_utc_dt,
40
+ server_default=func.now(),
41
+ index=True,
42
+ sort_order=-100,
43
+ nullable=False
44
+ )
45
+ extra_data: Mapped[dict[str, Any] | None] = mapped_column(
46
+ sqlalchemy.JSON,
47
+ index=False,
48
+ nullable=True,
49
+ insert_default=None,
50
+ sort_order=1000,
28
51
  )
29
52
 
30
53
  def __repr__(self) -> str:
@@ -23,7 +23,8 @@ class StoryLogDBM(SimpleDBM):
23
23
 
24
24
  class Types(Enumeration):
25
25
  error_in_execute_operation = "error_in_execute_operation"
26
- error_in_api_route = "error_in_api_route"
26
+ error_in_api = "error_in_api"
27
+ error_in_tg_bot = "error_in_tg_bot"
27
28
 
28
29
  level: Mapped[str] = mapped_column(
29
30
  sqlalchemy.TEXT, insert_default=Levels.info, server_default=Levels.info, index=True, nullable=False