arpakitlib 1.8.17__py3-none-any.whl → 1.8.19__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 (311) hide show
  1. arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json +3 -0
  2. arpakitlib/_arpakit_project_template_v_5/command/alembic_revision_autogenerate.sh +2 -0
  3. arpakitlib/_arpakit_project_template_v_5/command/reinit_all_sqlalchemy_db.py +13 -0
  4. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/auth.py +5 -5
  5. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/auth2.py +72 -25
  6. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/exception_handler.py +10 -10
  7. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/get_arpakitlib_project_template_info.py +2 -2
  8. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/get_errors_info.py +12 -2
  9. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/now_utc_datetime.py +2 -2
  10. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/common.py +1 -1
  11. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/operation.py +2 -2
  12. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/story_log.py +2 -2
  13. arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user.py +22 -0
  14. arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user_token.py +14 -0
  15. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/client/common.py +1 -1
  16. arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/general → _arpakit_project_template_v_5/project/api/schema/out/common}/error.py +1 -1
  17. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/operation_executor_worker.py +2 -2
  18. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_1.py +3 -1
  19. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/user.py +1 -1
  20. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/blank/admin.py +2 -8
  21. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/client.py +69 -0
  22. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/client.py +4 -0
  23. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/const.py +7 -6
  24. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_admin.py +18 -0
  25. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_client.py +18 -0
  26. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/init_user.py +9 -8
  27. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/arpakitlib_project_template_info.py +6 -4
  28. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/clear_log_file.py +33 -0
  29. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/drop_sqlalchemy_db.py +31 -0
  30. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/init_sqlalchemy_db.py +28 -0
  31. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_not_modified.py +59 -0
  32. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_old_cd.py +40 -0
  33. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_raise_error.py +48 -0
  34. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_remove_message.py +35 -0
  35. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/log_file.py +37 -0
  36. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/me.py +4 -0
  37. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/raise_fake_error.py +5 -1
  38. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/reinit_sqlalchemy_db.py +7 -3
  39. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/set_tg_bot_commands.py +28 -0
  40. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/about.py +30 -0
  41. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/error_handler.py +91 -0
  42. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/healthcheck.py +3 -1
  43. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/hello_world.py +5 -2
  44. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_callback_query.py +30 -0
  45. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_inline_query.py +14 -0
  46. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_message.py +15 -0
  47. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/remove_message.py +28 -0
  48. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/start.py +3 -2
  49. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/support.py +30 -0
  50. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/main_router.py +36 -0
  51. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/notify_admins.py +58 -0
  52. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/util/set_tg_bot_commands.py +26 -4
  53. arpakitlib/_arpakit_project_template_v_5/project/util/__init__.py +0 -0
  54. arpakitlib/ar_base_worker_util.py +7 -7
  55. arpakitlib/ar_blank_util.py +2 -2
  56. arpakitlib/ar_func_util.py +21 -14
  57. arpakitlib/ar_logging_util.py +2 -2
  58. arpakitlib/ar_sqlalchemy_util.py +9 -3
  59. {arpakitlib-1.8.17.dist-info → arpakitlib-1.8.19.dist-info}/METADATA +1 -1
  60. arpakitlib-1.8.19.dist-info/RECORD +347 -0
  61. arpakitlib/_arpakit_project_template_v_4/arpakitlib_project_template_info.json +0 -3
  62. arpakitlib/_arpakit_project_template_v_4/command/alembic_revision_autogenerate.sh +0 -2
  63. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/common.py +0 -5
  64. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/client.py +0 -44
  65. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/error_handler.py +0 -37
  66. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_admin.py +0 -27
  67. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_client.py +0 -27
  68. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/main_router.py +0 -15
  69. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/main_router.py +0 -14
  70. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/main_router.py +0 -13
  71. arpakitlib-1.8.17.dist-info/RECORD +0 -330
  72. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/.gitignore +0 -0
  73. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/.python-version +0 -0
  74. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/LICENSE +0 -0
  75. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/README.md +0 -0
  76. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/README +0 -0
  77. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/env.py +0 -0
  78. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/script.py.mako +0 -0
  79. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/versions/__init__.py +0 -0
  80. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic.ini +0 -0
  81. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/__init__.py +0 -0
  82. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/alembic_history.sh +0 -0
  83. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/alembic_upgrade_head.sh +0 -0
  84. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/beautify_json.py +0 -0
  85. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/check_logging.py +0 -0
  86. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/check_sqlalchemy_db.py +0 -0
  87. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/demojize.py +0 -0
  88. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_ps_a.sh +0 -0
  89. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_rm_postgres.sh +0 -0
  90. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_run_postgres.sh +0 -0
  91. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_start_postgres.sh +0 -0
  92. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_stop_postgres.sh +0 -0
  93. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/drop_json_db.py +0 -0
  94. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/drop_sqlalchemy_db.py +0 -0
  95. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/generate_settings_env_example.py +0 -0
  96. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_commit.sh +0 -0
  97. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_company_github_1.sh +0 -0
  98. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_company_gitlab_1.sh +0 -0
  99. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_github_1.sh +0 -0
  100. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_gitlab_1.sh +0 -0
  101. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_remote_v.sh +0 -0
  102. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_arpakit_company_origin.sh +0 -0
  103. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_arpakit_origin.sh +0 -0
  104. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_divarteam_origin.sh +0 -0
  105. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_status.sh +0 -0
  106. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/hello_world.py +0 -0
  107. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/init_json_db.py +0 -0
  108. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/init_sqlalchemy_db.py +0 -0
  109. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_check.sh +0 -0
  110. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_clear_cache.sh +0 -0
  111. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_config.sh +0 -0
  112. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_install.sh +0 -0
  113. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_lock.sh +0 -0
  114. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_remove_and_add_arpakitlib.sh +0 -0
  115. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_show.sh +0 -0
  116. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_show_arpakitlib.sh +0 -0
  117. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_update.sh +0 -0
  118. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_update_arpakitlib.sh +0 -0
  119. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/reinit_json_db.py +0 -0
  120. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/reinit_sqlalchemy_db.py +0 -0
  121. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/remove_operations.py +0 -0
  122. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/remove_story_logs.py +0 -0
  123. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/rm_all_records_in_json_db.py +0 -0
  124. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/set_tg_bot_commands.py +0 -0
  125. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/show_settings.py +0 -0
  126. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api.py +0 -0
  127. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api_for_prod.py +0 -0
  128. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api_with_reload.py +0 -0
  129. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_operation_executor_worker.py +0 -0
  130. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_operation_executor_workers.py +0 -0
  131. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_scheduled_operation_creator_worker.py +0 -0
  132. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin.py +0 -0
  133. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin_for_prod.py +0 -0
  134. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin_with_reload.py +0 -0
  135. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_tg_bot.py +0 -0
  136. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_tg_bot_for_prod.py +0 -0
  137. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/example.env +0 -0
  138. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_1.txt +0 -0
  139. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_2.txt +0 -0
  140. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_3.txt +0 -0
  141. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_4.txt +0 -0
  142. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_5.txt +0 -0
  143. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/__init__.py +0 -0
  144. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/additional_model/__init__.py +0 -0
  145. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/additional_model/common.py +0 -0
  146. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/__init__.py +0 -0
  147. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/asgi.py +0 -0
  148. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/const.py +0 -0
  149. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/create_api_app.py +0 -0
  150. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/event.py +0 -0
  151. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/exception.py +1 -1
  152. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/openapi_ui.py +0 -0
  153. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/response.py +0 -0
  154. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/__init__.py +0 -0
  155. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/__init__.py +0 -0
  156. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/get_auth_data.py +1 -1
  157. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/main_router.py +0 -0
  158. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/__init__.py +0 -0
  159. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/main_router.py +0 -0
  160. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/general/__init__.py +0 -0
  161. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/general/healthcheck.py +1 -1
  162. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/general/main_router.py +0 -0
  163. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/main_router.py +0 -0
  164. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/__init__.py +0 -0
  165. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/common.py +0 -0
  166. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/__init__.py +0 -0
  167. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/admin/__init__.py +0 -0
  168. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/admin/common.py +0 -0
  169. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/client/__init__.py +0 -0
  170. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/client/common.py +0 -0
  171. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/in_/general → _arpakit_project_template_v_5/project/api/schema/in_/common}/__init__.py +0 -0
  172. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out → _arpakit_project_template_v_5/project/api/schema/in_/general}/__init__.py +0 -0
  173. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/general/common.py +0 -0
  174. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/admin → _arpakit_project_template_v_5/project/api/schema/out}/__init__.py +0 -0
  175. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/client → _arpakit_project_template_v_5/project/api/schema/out/admin}/__init__.py +0 -0
  176. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/common → _arpakit_project_template_v_5/project/api/schema/out/client}/__init__.py +0 -0
  177. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/general → _arpakit_project_template_v_5/project/api/schema/out/common}/__init__.py +0 -0
  178. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/common/datetime_.py +0 -0
  179. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/common/raw_data.py +0 -0
  180. /arpakitlib/{_arpakit_project_template_v_4/project/business_service → _arpakit_project_template_v_5/project/api/schema/out/general}/__init__.py +0 -0
  181. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/common.py +0 -0
  182. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/errors_info_general.py +0 -0
  183. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/healthcheck.py +0 -0
  184. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/util.py +0 -0
  185. /arpakitlib/{_arpakit_project_template_v_4/project/celery_ → _arpakit_project_template_v_5/project/business_service}/__init__.py +0 -0
  186. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/business_service/hello_world.py +0 -0
  187. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/business_service/remove_operations.py +0 -0
  188. /arpakitlib/{_arpakit_project_template_v_4/project/core → _arpakit_project_template_v_5/project/celery_}/__init__.py +0 -0
  189. /arpakitlib/{_arpakit_project_template_v_4/project/json_db → _arpakit_project_template_v_5/project/core}/__init__.py +0 -0
  190. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/cache_file_storage_in_dir.py +0 -0
  191. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/const.py +0 -0
  192. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/dump_file_storage_in_dir.py +0 -0
  193. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/jinja2_templates.py +0 -0
  194. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/media_file_storage_in_dir.py +0 -0
  195. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/settings.py +0 -0
  196. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/util.py +0 -0
  197. /arpakitlib/{_arpakit_project_template_v_4/project/operation_execution → _arpakit_project_template_v_5/project/json_db}/__init__.py +0 -0
  198. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/json_db/json_db.py +0 -0
  199. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/more/helloworld +0 -0
  200. /arpakitlib/{_arpakit_project_template_v_4/project/resource → _arpakit_project_template_v_5/project/operation_execution}/__init__.py +0 -0
  201. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/const.py +0 -0
  202. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/scheduled_operation_creator_worker.py +0 -0
  203. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/scheduled_operations.py +0 -0
  204. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/util.py +0 -0
  205. /arpakitlib/{_arpakit_project_template_v_4/project/sandbox → _arpakit_project_template_v_5/project/resource}/__init__.py +0 -0
  206. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/1 +0 -0
  207. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/healthcheck +0 -0
  208. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/helloworld +0 -0
  209. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/openapi-favicon.png +0 -0
  210. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/redoc/redoc.standalone.js +0 -0
  211. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/favicon-16x16.png +0 -0
  212. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/favicon-32x32.png +0 -0
  213. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/index.css +0 -0
  214. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/index.html +0 -0
  215. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/oauth2-redirect.html +0 -0
  216. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-initializer.js +0 -0
  217. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-bundle.js +0 -0
  218. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-bundle.js.map +0 -0
  219. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js +0 -0
  220. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -0
  221. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js +0 -0
  222. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
  223. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js +0 -0
  224. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
  225. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.css +0 -0
  226. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.css.map +0 -0
  227. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.js +0 -0
  228. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.js.map +0 -0
  229. /arpakitlib/{_arpakit_project_template_v_4/project/site → _arpakit_project_template_v_5/project/sandbox}/__init__.py +0 -0
  230. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_2.py +0 -0
  231. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_3.py +0 -0
  232. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_4.py +0 -0
  233. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_5.py +0 -0
  234. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_6.py +0 -0
  235. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_7.py +0 -0
  236. /arpakitlib/{_arpakit_project_template_v_4/project/site/router → _arpakit_project_template_v_5/project/site}/__init__.py +0 -0
  237. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/asgi.py +0 -0
  238. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/consts.py +0 -0
  239. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/create_site_app.py +0 -0
  240. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/event.py +0 -0
  241. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/exception_handler.py +0 -0
  242. /arpakitlib/{_arpakit_project_template_v_4/project/sqladmin_ → _arpakit_project_template_v_5/project/site/router}/__init__.py +0 -0
  243. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/router/main_router.py +0 -0
  244. /arpakitlib/{_arpakit_project_template_v_4/project/sqlalchemy_db_ → _arpakit_project_template_v_5/project/sqladmin_}/__init__.py +0 -0
  245. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/add_admin_in_app.py +0 -0
  246. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/admin_auth.py +0 -0
  247. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/asgi.py +0 -0
  248. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/create_sqladmin_app.py +0 -0
  249. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/event.py +0 -0
  250. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/__init__.py +0 -0
  251. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/common.py +0 -0
  252. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/operation.py +0 -0
  253. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/story_log.py +0 -0
  254. /arpakitlib/{_arpakit_project_template_v_4/project/test_data → _arpakit_project_template_v_5/project/sqlalchemy_db_}/__init__.py +0 -0
  255. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/const.py +0 -0
  256. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_db.py +0 -0
  257. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/__init__.py +0 -0
  258. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +0 -0
  259. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/common.py +0 -0
  260. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/operation.py +0 -0
  261. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +0 -0
  262. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +0 -0
  263. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/util.py +0 -0
  264. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot → _arpakit_project_template_v_5/project/test_data}/__init__.py +0 -0
  265. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_1.py +0 -0
  266. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_2.py +0 -0
  267. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_3.py +0 -0
  268. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_4.py +0 -0
  269. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_5.py +0 -0
  270. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/blank → _arpakit_project_template_v_5/project/tg_bot}/__init__.py +0 -0
  271. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/callback → _arpakit_project_template_v_5/project/tg_bot/blank}/__init__.py +0 -0
  272. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/blank/common.py +0 -0
  273. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/filter_ → _arpakit_project_template_v_5/project/tg_bot/callback}/__init__.py +0 -0
  274. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/admin.py +0 -0
  275. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/common.py +0 -0
  276. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/event.py +0 -0
  277. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb → _arpakit_project_template_v_5/project/tg_bot/filter_}/__init__.py +0 -0
  278. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/is_private_chat.py +0 -0
  279. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/message_text.py +0 -0
  280. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/not_prod_mode_filter.py +0 -0
  281. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/prod_mode_filter.py +0 -0
  282. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_ → _arpakit_project_template_v_5/project/tg_bot/kb}/__init__.py +0 -0
  283. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_/admin → _arpakit_project_template_v_5/project/tg_bot/kb/inline_}/__init__.py +0 -0
  284. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_/client → _arpakit_project_template_v_5/project/tg_bot/kb/inline_/admin}/__init__.py +0 -0
  285. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/admin/common.py +0 -0
  286. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/static_ → _arpakit_project_template_v_5/project/tg_bot/kb/inline_/client}/__init__.py +0 -0
  287. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/client/common.py +0 -0
  288. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/client/hello_world.py +0 -0
  289. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/common.py +0 -0
  290. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/static_/admin → _arpakit_project_template_v_5/project/tg_bot/kb/static_}/__init__.py +0 -0
  291. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/static_/client → _arpakit_project_template_v_5/project/tg_bot/kb/static_/admin}/__init__.py +0 -0
  292. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/admin/common.py +0 -0
  293. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/middleware → _arpakit_project_template_v_5/project/tg_bot/kb/static_/client}/__init__.py +0 -0
  294. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/client/common.py +0 -0
  295. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/client/hello_world.py +0 -0
  296. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/common.py +0 -0
  297. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router → _arpakit_project_template_v_5/project/tg_bot/middleware}/__init__.py +0 -0
  298. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/common.py +0 -0
  299. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/middleware.py +0 -0
  300. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router/admin → _arpakit_project_template_v_5/project/tg_bot/router}/__init__.py +0 -0
  301. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router/client → _arpakit_project_template_v_5/project/tg_bot/router/admin}/__init__.py +0 -0
  302. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/util → _arpakit_project_template_v_5/project/tg_bot/router/client}/__init__.py +0 -0
  303. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/start_tg_bot.py +0 -0
  304. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/tg_bot.py +0 -0
  305. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/tg_bot_dispatcher.py +0 -0
  306. /arpakitlib/{_arpakit_project_template_v_4/project → _arpakit_project_template_v_5/project/tg_bot}/util/__init__.py +0 -0
  307. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/util/etc.py +0 -0
  308. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/util/arpakitlib_project_template.py +0 -0
  309. {arpakitlib-1.8.17.dist-info → arpakitlib-1.8.19.dist-info}/LICENSE +0 -0
  310. {arpakitlib-1.8.17.dist-info → arpakitlib-1.8.19.dist-info}/WHEEL +0 -0
  311. {arpakitlib-1.8.17.dist-info → arpakitlib-1.8.19.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ "arpakitlib_project_template_version": "5"
3
+ }
@@ -0,0 +1,2 @@
1
+ cd ..
2
+ alembic revision --autogenerate -m "ar"
@@ -0,0 +1,13 @@
1
+ from project.core.settings import get_cached_settings
2
+ from project.core.util import setup_logging
3
+ from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
4
+
5
+
6
+ def __command():
7
+ setup_logging()
8
+ get_cached_settings().raise_if_prod_mode()
9
+ get_cached_sqlalchemy_db().reinit_all()
10
+
11
+
12
+ if __name__ == '__main__':
13
+ __command()
@@ -9,7 +9,7 @@ from fastapi import Security
9
9
  from fastapi.security import APIKeyHeader
10
10
  from pydantic import BaseModel, ConfigDict
11
11
 
12
- from arpakitlib.ar_func_util import is_async_callable, is_sync_function
12
+ from arpakitlib.ar_func_util import is_async_func, is_sync_func
13
13
  from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
14
14
  from arpakitlib.ar_type_util import raise_for_type
15
15
  from project.api.const import APIErrorCodes
@@ -199,12 +199,12 @@ def api_auth(
199
199
  # is_api_key_correct_func
200
200
 
201
201
  if is_api_key_correct_func is not None:
202
- if is_async_callable(is_api_key_correct_func):
202
+ if is_async_func(is_api_key_correct_func):
203
203
  await is_api_key_correct_func(
204
204
  api_auth_data=api_auth_data,
205
205
  request=request
206
206
  )
207
- elif is_sync_function(is_api_key_correct_func):
207
+ elif is_sync_func(is_api_key_correct_func):
208
208
  is_api_key_correct_func(
209
209
  api_auth_data=api_auth_data,
210
210
  request=request
@@ -215,12 +215,12 @@ def api_auth(
215
215
  # is_user_token_correct_func
216
216
 
217
217
  if is_user_token_correct_func is not None:
218
- if is_async_callable(is_user_token_correct_func):
218
+ if is_async_func(is_user_token_correct_func):
219
219
  await is_user_token_correct_func(
220
220
  api_auth_data=api_auth_data,
221
221
  request=request
222
222
  )
223
- elif is_sync_function(is_user_token_correct_func):
223
+ elif is_sync_func(is_user_token_correct_func):
224
224
  is_user_token_correct_func(
225
225
  api_auth_data=api_auth_data,
226
226
  request=request
@@ -4,15 +4,18 @@ import fastapi
4
4
  import fastapi.exceptions
5
5
  import fastapi.responses
6
6
  import fastapi.security
7
+ import sqlalchemy
7
8
  from fastapi import Security
8
9
  from fastapi.security import APIKeyHeader
9
10
  from pydantic import BaseModel, ConfigDict
10
11
 
11
- from arpakitlib.ar_func_util import is_async_callable, is_sync_function
12
+ from arpakitlib.ar_func_util import is_async_func, is_sync_func
12
13
  from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
13
14
  from project.api.const import APIErrorCodes
14
15
  from project.api.exception import APIException
15
16
  from project.core.settings import get_cached_settings
17
+ from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
18
+ from project.sqlalchemy_db_.sqlalchemy_model import ApiKeyDBM, UserTokenDBM
16
19
 
17
20
 
18
21
  class APIAuthData(BaseModel):
@@ -21,15 +24,18 @@ class APIAuthData(BaseModel):
21
24
  api_key_string: str | None = None
22
25
  user_token_string: str | None = None
23
26
 
27
+ api_key_dbm: ApiKeyDBM | None = None
28
+ user_token_dbm: UserTokenDBM | None = None
29
+
24
30
  prod_mode: bool = False
25
31
 
26
32
 
27
33
  def api_auth(
28
34
  *,
29
- middleware_funcs: list[Callable] | None = None
35
+ middlewares: list[Callable] | None = None
30
36
  ) -> Callable:
31
- if middleware_funcs is None:
32
- middleware_funcs = []
37
+ if middlewares is None:
38
+ middlewares = []
33
39
 
34
40
  async def async_func(
35
41
  *,
@@ -46,7 +52,7 @@ def api_auth(
46
52
  prod_mode=get_cached_settings().prod_mode
47
53
  )
48
54
 
49
- # parse api_key
55
+ # parse api_key_string
50
56
 
51
57
  api_auth_data.api_key_string = api_key_string
52
58
 
@@ -56,6 +62,8 @@ def api_auth(
56
62
  api_auth_data.api_key_string = request.headers["api-key"]
57
63
  if not api_auth_data.api_key_string and "apikey" in request.headers.keys():
58
64
  api_auth_data.api_key_string = request.headers["apikey"]
65
+ if not api_auth_data.api_key_string and "api_key_string" in request.headers.keys():
66
+ api_auth_data.api_key_string = request.headers["api_key_string"]
59
67
 
60
68
  if not api_auth_data.api_key_string and "api_key" in request.query_params.keys():
61
69
  api_auth_data.api_key_string = request.query_params["api_key"]
@@ -63,13 +71,15 @@ def api_auth(
63
71
  api_auth_data.api_key_string = request.query_params["api-key"]
64
72
  if not api_auth_data.api_key_string and "apikey" in request.query_params.keys():
65
73
  api_auth_data.api_key_string = request.query_params["apikey"]
74
+ if not api_auth_data.api_key_string and "api_key_string" in request.query_params.keys():
75
+ api_auth_data.api_key_string = request.query_params["api_key_string"]
66
76
 
67
77
  if api_auth_data.api_key_string:
68
78
  api_auth_data.api_key_string = api_auth_data.api_key_string.strip()
69
79
  if not api_auth_data.api_key_string:
70
80
  api_auth_data.api_key_string = None
71
81
 
72
- # parse user_token
82
+ # parse user_token_string
73
83
 
74
84
  api_auth_data.user_token_string = ac.credentials if ac and ac.credentials and ac.credentials.strip() else None
75
85
 
@@ -98,74 +108,111 @@ def api_auth(
98
108
  if not api_auth_data.user_token_string:
99
109
  api_auth_data.user_token_string = None
100
110
 
101
- # middleware_funcs
111
+ # middlewares
102
112
 
103
- for middleware_func in middleware_funcs:
104
- if is_async_callable(middleware_func):
105
- await middleware_func(
113
+ for middleware in middlewares:
114
+ if is_async_func(middleware):
115
+ await middleware(
106
116
  api_auth_data=api_auth_data,
107
117
  request=request
108
118
  )
109
- elif is_sync_function(middleware_func):
110
- middleware_func(
119
+ elif is_sync_func(middleware):
120
+ middleware(
111
121
  api_auth_data=api_auth_data,
112
122
  request=request
113
123
  )
114
124
  else:
115
- raise TypeError("unknown middleware_func type")
125
+ raise TypeError(f"unknown middleware type, {middleware.__name__}")
116
126
 
117
127
  return api_auth_data
118
128
 
119
129
  return async_func
120
130
 
121
131
 
122
- def require_api_key_string_middleware_func():
132
+ def require_prod_mode_api_middleware():
123
133
  def func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
124
- if api_auth_data.api_key_string is None:
134
+ if not get_cached_settings().prod_mode:
125
135
  raise APIException(
126
136
  status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
127
137
  error_code=APIErrorCodes.cannot_authorize,
128
- error_description="api_key string is required",
138
+ error_description=f"prod_mode={get_cached_settings().prod_mode}",
129
139
  error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
130
140
  )
131
141
 
132
142
  return func
133
143
 
134
144
 
135
- def require_user_token_string_middleware_func():
145
+ def require_not_prod_mode_api_middleware():
136
146
  def func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
137
- if api_auth_data.user_token_string is None:
147
+ if get_cached_settings().prod_mode:
138
148
  raise APIException(
139
149
  status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
140
150
  error_code=APIErrorCodes.cannot_authorize,
141
- error_description="user_token string is required",
151
+ error_description=f"prod_mode={get_cached_settings().prod_mode}",
142
152
  error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
143
153
  )
144
154
 
145
155
  return func
146
156
 
147
157
 
148
- def require_prod_mode_middleware_func():
158
+ def require_api_key_string_api_middleware():
149
159
  def func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
150
- if not get_cached_settings().prod_mode:
160
+ if api_auth_data.api_key_string is None:
151
161
  raise APIException(
152
162
  status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
153
163
  error_code=APIErrorCodes.cannot_authorize,
154
- error_description=f"prod_mode={get_cached_settings().prod_mode}",
164
+ error_description="api_key_string is required",
155
165
  error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
156
166
  )
157
167
 
158
168
  return func
159
169
 
160
170
 
161
- def require_not_prod_mode_middleware_func():
171
+ def require_user_token_string_api_middleware():
162
172
  def func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
163
- if get_cached_settings().prod_mode:
173
+ if api_auth_data.user_token_string is None:
164
174
  raise APIException(
165
175
  status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
166
176
  error_code=APIErrorCodes.cannot_authorize,
167
- error_description=f"prod_mode={get_cached_settings().prod_mode}",
177
+ error_description="user_token_string is required",
168
178
  error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
169
179
  )
170
180
 
171
181
  return func
182
+
183
+
184
+ def try_find_api_key_dbm_api_middleware():
185
+ async def async_func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
186
+ if api_auth_data.api_key_dbm is None:
187
+ return
188
+ async with get_cached_sqlalchemy_db().new_async_session() as async_session:
189
+ api_auth_data.api_key_dbm = await async_session.scalar(
190
+ sqlalchemy.select(ApiKeyDBM).where(ApiKeyDBM.value == api_auth_data.api_key_string)
191
+ )
192
+
193
+ return async_func
194
+
195
+
196
+ def try_find_user_token_dbm_api_middleware():
197
+ async def async_func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
198
+ if api_auth_data.user_token_dbm is None:
199
+ return
200
+ async with get_cached_sqlalchemy_db().new_async_session() as async_session:
201
+ api_auth_data.user_token_dbm = await async_session.scalar(
202
+ sqlalchemy.select(UserTokenDBM).where(UserTokenDBM.value == api_auth_data.user_token_string)
203
+ )
204
+
205
+ return async_func
206
+
207
+
208
+ def require_api_key_dbm_api_middleware():
209
+ async def async_func(*, api_auth_data: APIAuthData, request: fastapi.requests.Request):
210
+ if api_auth_data.api_key_dbm is None:
211
+ raise APIException(
212
+ status_code=fastapi.status.HTTP_401_UNAUTHORIZED,
213
+ error_code=APIErrorCodes.cannot_authorize,
214
+ error_description="api_key_dbm is required",
215
+ error_data=transfer_data_to_json_str_to_data(api_auth_data.model_dump())
216
+ )
217
+
218
+ return async_func
@@ -10,12 +10,12 @@ import starlette.exceptions
10
10
  from arpakitlib.ar_datetime_util import now_utc_dt
11
11
  from arpakitlib.ar_dict_util import combine_dicts
12
12
  from arpakitlib.ar_exception_util import exception_to_traceback_str
13
- from arpakitlib.ar_func_util import raise_if_not_async_callable, is_async_callable, is_sync_function
13
+ from arpakitlib.ar_func_util import raise_if_not_async_func, is_async_func, is_sync_func
14
14
  from arpakitlib.ar_json_util import transfer_data_to_json_str
15
15
  from project.api.const import APIErrorCodes
16
16
  from project.api.exception import APIException
17
17
  from project.api.response import APIJSONResponse
18
- from project.api.schema.out.general.error import ErrorGeneralSO
18
+ from project.api.schema.out.common.error import ErrorCommonSO
19
19
  from project.core.settings import get_cached_settings
20
20
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
21
21
  from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
@@ -42,7 +42,7 @@ def create_api_exception_handler(
42
42
  ) -> APIJSONResponse:
43
43
  status_code = fastapi.status.HTTP_500_INTERNAL_SERVER_ERROR
44
44
 
45
- error_common_so = ErrorGeneralSO(
45
+ error_common_so = ErrorCommonSO(
46
46
  has_error=True,
47
47
  error_code=APIErrorCodes.unknown_error,
48
48
  error_data={
@@ -102,7 +102,7 @@ def create_api_exception_handler(
102
102
 
103
103
  _transmitted_kwargs = {}
104
104
  for func_before in funcs_before:
105
- if is_async_callable(func_before):
105
+ if is_async_func(func_before):
106
106
  try:
107
107
  await func_before(
108
108
  request=request,
@@ -114,7 +114,7 @@ def create_api_exception_handler(
114
114
  except Exception as exception_:
115
115
  _logger.exception(exception_)
116
116
  raise exception_
117
- elif is_sync_function(func_before):
117
+ elif is_sync_func(func_before):
118
118
  try:
119
119
  func_before(
120
120
  request=request,
@@ -132,7 +132,7 @@ def create_api_exception_handler(
132
132
  # async_funcs_after
133
133
 
134
134
  for async_func_after in async_funcs_after:
135
- raise_if_not_async_callable(async_func_after)
135
+ raise_if_not_async_func(async_func_after)
136
136
  _ = asyncio.create_task(async_func_after(
137
137
  request=request, status_code=status_code, error_common_so=error_common_so, exception=exception
138
138
  ))
@@ -157,7 +157,7 @@ def logging_func_before_in_api_exception_handler(
157
157
  *,
158
158
  request: fastapi.requests.Request,
159
159
  status_code: int,
160
- error_common_so: ErrorGeneralSO,
160
+ error_common_so: ErrorCommonSO,
161
161
  exception: Exception,
162
162
  transmitted_kwargs: dict[str, Any],
163
163
  **kwargs
@@ -192,7 +192,7 @@ def create_story_log_func_before_in_api_exception_handler(
192
192
  *,
193
193
  request: fastapi.requests.Request,
194
194
  status_code: int,
195
- error_common_so: ErrorGeneralSO,
195
+ error_common_so: ErrorCommonSO,
196
196
  exception: Exception,
197
197
  transmitted_kwargs: dict[str, Any],
198
198
  **kwargs
@@ -216,9 +216,9 @@ def create_story_log_func_before_in_api_exception_handler(
216
216
  type=StoryLogDBM.Types.error_in_api,
217
217
  title=f"{status_code}, {type(exception)}",
218
218
  data={
219
- "exception_str": str(exception),
219
+ "exception": str(exception),
220
220
  "error_common_so": error_common_so.model_dump(),
221
- "error_traceback_str": exception_to_traceback_str(exception=exception)
221
+ "exception_traceback": exception_to_traceback_str(exception=exception)
222
222
  }
223
223
  )
224
224
  session.add(story_log_dbm)
@@ -1,8 +1,8 @@
1
1
  import fastapi
2
2
  from fastapi import APIRouter
3
3
 
4
+ from project.api.schema.out.common.error import ErrorCommonSO
4
5
  from project.api.schema.out.common.raw_data import RawDataCommonSO
5
- from project.api.schema.out.general.error import ErrorGeneralSO
6
6
  from project.util.arpakitlib_project_template import get_arpakitlib_project_template_info
7
7
 
8
8
  api_router = APIRouter()
@@ -12,7 +12,7 @@ api_router = APIRouter()
12
12
  "",
13
13
  name="Get arpakitlib project template info",
14
14
  status_code=fastapi.status.HTTP_200_OK,
15
- response_model=RawDataCommonSO | ErrorGeneralSO
15
+ response_model=RawDataCommonSO | ErrorCommonSO
16
16
  )
17
17
  async def _(
18
18
  *,
@@ -1,8 +1,11 @@
1
1
  import fastapi.requests
2
2
  from fastapi import APIRouter
3
- from project.api.schema.out.common.error import ErrorCommonSO
4
3
 
4
+ from project.api.auth2 import APIAuthData, api_auth, require_api_key_string_api_middleware, \
5
+ require_user_token_string_api_middleware, try_find_api_key_dbm_api_middleware, \
6
+ try_find_user_token_dbm_api_middleware
5
7
  from project.api.const import APIErrorCodes, APIErrorSpecificationCodes
8
+ from project.api.schema.out.common.error import ErrorCommonSO
6
9
  from project.api.schema.out.general.errors_info_general import ErrorsInfoGeneralSO
7
10
 
8
11
  api_router = APIRouter()
@@ -17,7 +20,14 @@ api_router = APIRouter()
17
20
  async def _(
18
21
  *,
19
22
  request: fastapi.requests.Request,
20
- response: fastapi.responses.Response
23
+ response: fastapi.responses.Response,
24
+ api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
25
+ require_api_key_string_api_middleware(),
26
+ require_user_token_string_api_middleware(),
27
+ try_find_api_key_dbm_api_middleware(),
28
+ try_find_user_token_dbm_api_middleware(),
29
+
30
+ ]))
21
31
  ):
22
32
  return ErrorsInfoGeneralSO(
23
33
  api_error_codes=APIErrorCodes.values_list(),
@@ -3,7 +3,7 @@ from fastapi import APIRouter
3
3
 
4
4
  from arpakitlib.ar_datetime_util import now_utc_dt
5
5
  from project.api.schema.out.common.datetime_ import DatetimeCommonSO
6
- from project.api.schema.out.general.error import ErrorGeneralSO
6
+ from project.api.schema.out.common.error import ErrorCommonSO
7
7
 
8
8
  api_router = APIRouter()
9
9
 
@@ -12,7 +12,7 @@ api_router = APIRouter()
12
12
  "",
13
13
  name="Now UTC datetime",
14
14
  status_code=fastapi.status.HTTP_200_OK,
15
- response_model=DatetimeCommonSO | ErrorGeneralSO,
15
+ response_model=DatetimeCommonSO | ErrorCommonSO,
16
16
  )
17
17
  async def _(
18
18
  *,
@@ -3,7 +3,7 @@ import datetime as dt
3
3
  from project.api.schema.common import BaseSO
4
4
 
5
5
 
6
- class SimpleDBMAdminCommonSO(BaseSO):
6
+ class SimpleDBMAdminSO(BaseSO):
7
7
  id: int
8
8
  long_id: str
9
9
  slug: str | None
@@ -3,11 +3,11 @@ from __future__ import annotations
3
3
  import datetime as dt
4
4
  from typing import Any
5
5
 
6
- from project.api.schema.out.admin.common import SimpleDBMAdminCommonSO
6
+ from project.api.schema.out.admin.common import SimpleDBMAdminSO
7
7
  from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
8
8
 
9
9
 
10
- class OperationAdminSO(SimpleDBMAdminCommonSO):
10
+ class OperationAdminSO(SimpleDBMAdminSO):
11
11
  execution_start_dt: dt.datetime | None
12
12
  execution_finish_dt: dt.datetime | None
13
13
  status: str
@@ -2,11 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Any
4
4
 
5
- from project.api.schema.out.admin.common import SimpleDBMAdminCommonSO
5
+ from project.api.schema.out.admin.common import SimpleDBMAdminSO
6
6
  from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
7
7
 
8
8
 
9
- class StoryLogAdminSO(SimpleDBMAdminCommonSO):
9
+ class StoryLogAdminSO(SimpleDBMAdminSO):
10
10
  level: str
11
11
  type: str | None
12
12
  title: str | None
@@ -0,0 +1,22 @@
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 SimpleDBMAdminSO
7
+ from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
8
+
9
+
10
+ class UserDBMSAdminSO(SimpleDBMAdminSO):
11
+ mail: str | None
12
+ roles: list[str]
13
+ is_enabled: bool
14
+ tg_id: int | None
15
+ tg_bot_last_action_dt: dt.datetime | None
16
+ tg_data: dict[str, Any] | None
17
+ roles_has_admin: bool
18
+ roles_has_client: bool
19
+
20
+ @classmethod
21
+ def from_user_dbm(cls, *, user_dbm: UserDBM) -> UserDBMSAdminSO:
22
+ return cls.model_validate(user_dbm.simple_dict_with_sd_properties())
@@ -0,0 +1,14 @@
1
+ from __future__ import annotations
2
+
3
+ from project.api.schema.out.admin.common import SimpleDBMAdminSO
4
+ from project.sqlalchemy_db_.sqlalchemy_model import UserTokenDBM
5
+
6
+
7
+ class UserTokenDBMSAdminSO(SimpleDBMAdminSO):
8
+ value: str
9
+ user_id: int
10
+ is_enabled: bool
11
+
12
+ @classmethod
13
+ def from_user_token_dbm(cls, *, user_dbm: UserTokenDBM) -> UserTokenDBMSAdminSO:
14
+ return cls.model_validate(user_dbm.simple_dict_with_sd_properties())
@@ -3,7 +3,7 @@ import datetime as dt
3
3
  from project.api.schema.common import BaseSO
4
4
 
5
5
 
6
- class SimpleDBMClientCommonSO(BaseSO):
6
+ class SimpleDBMClientSO(BaseSO):
7
7
  id: int
8
8
  long_id: str
9
9
  slug: str | None
@@ -3,7 +3,7 @@ from typing import Any
3
3
  from project.api.schema.common import BaseSO
4
4
 
5
5
 
6
- class ErrorGeneralSO(BaseSO):
6
+ class ErrorCommonSO(BaseSO):
7
7
  has_error: bool = True
8
8
  error_code: str | None = None
9
9
  error_specification_code: str | None = None
@@ -113,7 +113,7 @@ class OperationExecutorWorker(BaseWorker):
113
113
  operation_dbm.error_data,
114
114
  {
115
115
  "exception_in_execute_operation": str(exception_in_execute_operation),
116
- "traceback_str_in_execute_operation": exception_to_traceback_str(
116
+ "traceback_in_execute_operation": exception_to_traceback_str(
117
117
  exception=exception_in_execute_operation
118
118
  ),
119
119
  }
@@ -208,7 +208,7 @@ class OperationExecutorWorker(BaseWorker):
208
208
  operation_dbm.error_data = combine_dicts(
209
209
  {
210
210
  "exception_in_execute_operation": str(exception_in_execute_operation),
211
- "traceback_str_in_execute_operation": exception_to_traceback_str(
211
+ "traceback_in_execute_operation": exception_to_traceback_str(
212
212
  exception=exception_in_execute_operation
213
213
  )
214
214
  },
@@ -2,7 +2,9 @@ import asyncio
2
2
 
3
3
 
4
4
  def __sandbox():
5
- pass
5
+ a = {1, 2, 3}
6
+ a += [1, 2]
7
+ print(a)
6
8
 
7
9
 
8
10
  async def __async_sandbox():
@@ -21,7 +21,7 @@ class UserDBM(SimpleDBM):
21
21
  admin = "admin"
22
22
  client = "client"
23
23
 
24
- mail: Mapped[str] = mapped_column(
24
+ mail: Mapped[str | None] = mapped_column(
25
25
  sqlalchemy.TEXT,
26
26
  index=True,
27
27
  insert_default=None,
@@ -1,21 +1,15 @@
1
1
  from functools import lru_cache
2
- from typing import Any
3
2
 
4
3
  from emoji import emojize
5
4
 
6
- from arpakitlib.ar_json_util import transfer_data_to_json_str
7
5
  from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
8
6
  from project.tg_bot.blank.common import SimpleBlankTgBot
9
7
  from project.util.arpakitlib_project_template import get_arpakitlib_project_template_info
10
8
 
11
9
 
12
10
  class AdminTgBotBlank(SimpleBlankTgBot):
13
- def done(self) -> str:
14
- res = "Done"
15
- return emojize(res.strip())
16
-
17
- def arpakit_project_template_info(self, *, arpakitlib_project_template_info: dict[str, Any]) -> str:
18
- res = transfer_data_to_json_str(arpakitlib_project_template_info, beautify=True)
11
+ def good(self) -> str:
12
+ res = "good"
19
13
  return emojize(res.strip())
20
14
 
21
15
  def user_dbm(self, *, user_dbm: UserDBM | None) -> str:
@@ -0,0 +1,69 @@
1
+ from functools import lru_cache
2
+
3
+ from emoji import emojize
4
+
5
+ from project.tg_bot.blank.common import SimpleBlankTgBot
6
+ from project.tg_bot.const import ClientTgBotCommands
7
+
8
+
9
+ class ClientTgBotBlank(SimpleBlankTgBot):
10
+ def command_to_desc(self) -> dict[str, str]:
11
+ return {
12
+ ClientTgBotCommands.start: emojize(":waving_hand: Начать"),
13
+ ClientTgBotCommands.about: emojize(":information: О проекте")
14
+ }
15
+
16
+ def but_hello_world(self) -> str:
17
+ res = "hello_world"
18
+ return emojize(res.strip())
19
+
20
+ def error(self) -> str:
21
+ res = ":warning: <b>Произошла неполадка</b> :warning:"
22
+ res += "\n\n:wrench: Мы уже работаем над исправлением"
23
+ res += "\n\n:red_heart: Просим прощения :red_heart:"
24
+ return emojize(res.strip())
25
+
26
+ def hello_world(self) -> str:
27
+ res = ":waving_hand: <b>Hello world</b> :waving_hand:"
28
+ return emojize(res.strip())
29
+
30
+ def healthcheck(self) -> str:
31
+ res = "healthcheck"
32
+ return emojize(res.strip())
33
+
34
+ def welcome(self) -> str:
35
+ res = ":waving_hand: <b>Welcome</b> :waving_hand:"
36
+ return emojize(res.strip())
37
+
38
+ def raw_message(self) -> str:
39
+ res = ":warning: <b>Сообщние не обработано</b> :warning:"
40
+ return emojize(res.strip())
41
+
42
+ def about_project(self) -> str:
43
+ res = ":information: <b>О проекте</b>"
44
+ return emojize(res.strip())
45
+
46
+ def support_info(self) -> str:
47
+ res = ":red_heart: <b>Поддержка</b>"
48
+ return emojize(res.strip())
49
+
50
+ def keyboard_is_old(self) -> str:
51
+ res = ":information: Данная клавиатура устарела :information:"
52
+ return emojize(res.strip())
53
+
54
+
55
+ def create_client_tg_bot_blank() -> ClientTgBotBlank:
56
+ return ClientTgBotBlank()
57
+
58
+
59
+ @lru_cache()
60
+ def get_cached_client_tg_bot_blank() -> ClientTgBotBlank:
61
+ return ClientTgBotBlank()
62
+
63
+
64
+ def __example():
65
+ print(get_cached_client_tg_bot_blank().welcome())
66
+
67
+
68
+ if __name__ == '__main__':
69
+ __example()
@@ -3,3 +3,7 @@ from project.tg_bot.callback.common import BaseCD
3
3
 
4
4
  class HelloWorldClientCD(BaseCD):
5
5
  hello_world: bool = True
6
+
7
+
8
+ class RemoveMessageCD(BaseCD):
9
+ pass