arpakitlib 1.8.18__py3-none-any.whl → 1.8.20__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 (315) 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/project/api/auth2.py → _arpakit_project_template_v_5/project/api/auth.py} +133 -26
  5. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/exception_handler.py +11 -12
  6. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/get_arpakitlib_project_template_info.py +9 -3
  7. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/get_auth_data.py +7 -9
  8. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/main_router.py +20 -0
  9. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_fake_error.py +27 -0
  10. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/get_errors_info.py +8 -2
  11. arpakitlib/_arpakit_project_template_v_5/project/api/router/client/main_router.py +10 -0
  12. arpakitlib/_arpakit_project_template_v_5/project/api/router/general/main_router.py +14 -0
  13. arpakitlib/{_arpakit_project_template_v_4/project/api/router/client → _arpakit_project_template_v_5/project/api/router/general}/now_utc_datetime.py +3 -3
  14. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/common.py +1 -1
  15. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/operation.py +2 -2
  16. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/admin/story_log.py +2 -2
  17. arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user.py +22 -0
  18. arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user_token.py +14 -0
  19. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/client/common.py +1 -1
  20. 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
  21. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/settings.py +3 -17
  22. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/operation_executor_worker.py +2 -2
  23. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_1.py +3 -1
  24. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +1 -1
  25. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/user.py +2 -2
  26. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +1 -1
  27. arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_api_keys.py +35 -0
  28. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_1.py +4 -2
  29. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_2.py +4 -2
  30. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_3.py +4 -2
  31. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_4.py +4 -2
  32. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/test_data/make_test_data_5.py +4 -2
  33. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/blank/admin.py +2 -8
  34. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/client.py +69 -0
  35. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/client.py +4 -0
  36. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/const.py +7 -6
  37. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_admin.py +18 -0
  38. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/user_roles_has_client.py +18 -0
  39. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/init_user.py +9 -8
  40. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/arpakitlib_project_template_info.py +6 -4
  41. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/clear_log_file.py +33 -0
  42. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/drop_sqlalchemy_db.py +31 -0
  43. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/init_sqlalchemy_db.py +28 -0
  44. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_not_modified.py +59 -0
  45. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_old_cd.py +40 -0
  46. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_raise_error.py +48 -0
  47. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_remove_message.py +35 -0
  48. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/log_file.py +37 -0
  49. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/me.py +4 -0
  50. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/raise_fake_error.py +5 -1
  51. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/admin/reinit_sqlalchemy_db.py +7 -3
  52. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/set_tg_bot_commands.py +28 -0
  53. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/about.py +30 -0
  54. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/error_handler.py +91 -0
  55. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/healthcheck.py +3 -1
  56. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/hello_world.py +5 -2
  57. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_callback_query.py +30 -0
  58. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_inline_query.py +14 -0
  59. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_message.py +15 -0
  60. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/remove_message.py +28 -0
  61. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/router/client/start.py +3 -2
  62. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/support.py +30 -0
  63. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/main_router.py +36 -0
  64. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/notify_admins.py +58 -0
  65. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/util/set_tg_bot_commands.py +26 -4
  66. arpakitlib/_arpakit_project_template_v_5/project/util/__init__.py +0 -0
  67. arpakitlib/ar_base_worker_util.py +7 -7
  68. arpakitlib/ar_blank_util.py +2 -2
  69. arpakitlib/ar_func_util.py +21 -14
  70. arpakitlib/ar_sqlalchemy_util.py +9 -3
  71. {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/METADATA +1 -1
  72. arpakitlib-1.8.20.dist-info/RECORD +348 -0
  73. arpakitlib/_arpakit_project_template_v_4/arpakitlib_project_template_info.json +0 -3
  74. arpakitlib/_arpakit_project_template_v_4/command/alembic_revision_autogenerate.sh +0 -2
  75. arpakitlib/_arpakit_project_template_v_4/project/api/auth.py +0 -353
  76. arpakitlib/_arpakit_project_template_v_4/project/api/router/admin/main_router.py +0 -3
  77. arpakitlib/_arpakit_project_template_v_4/project/api/router/client/main_router.py +0 -3
  78. arpakitlib/_arpakit_project_template_v_4/project/api/router/general/main_router.py +0 -10
  79. arpakitlib/_arpakit_project_template_v_4/project/api/schema/out/common.py +0 -5
  80. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/blank/client.py +0 -44
  81. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/error_handler.py +0 -37
  82. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_admin.py +0 -27
  83. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/filter_/user_roles_has_client.py +0 -27
  84. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/admin/main_router.py +0 -15
  85. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/client/main_router.py +0 -14
  86. arpakitlib/_arpakit_project_template_v_4/project/tg_bot/router/main_router.py +0 -13
  87. arpakitlib-1.8.18.dist-info/RECORD +0 -330
  88. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/.gitignore +0 -0
  89. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/.python-version +0 -0
  90. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/LICENSE +0 -0
  91. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/README.md +0 -0
  92. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/README +0 -0
  93. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/env.py +0 -0
  94. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/script.py.mako +0 -0
  95. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic/versions/__init__.py +0 -0
  96. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/alembic.ini +0 -0
  97. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/__init__.py +0 -0
  98. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/alembic_history.sh +0 -0
  99. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/alembic_upgrade_head.sh +0 -0
  100. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/beautify_json.py +0 -0
  101. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/check_logging.py +0 -0
  102. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/check_sqlalchemy_db.py +0 -0
  103. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/demojize.py +0 -0
  104. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_ps_a.sh +0 -0
  105. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_rm_postgres.sh +0 -0
  106. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_run_postgres.sh +0 -0
  107. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_start_postgres.sh +0 -0
  108. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/docker_stop_postgres.sh +0 -0
  109. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/drop_json_db.py +0 -0
  110. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/drop_sqlalchemy_db.py +0 -0
  111. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/generate_settings_env_example.py +0 -0
  112. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_commit.sh +0 -0
  113. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_company_github_1.sh +0 -0
  114. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_company_gitlab_1.sh +0 -0
  115. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_github_1.sh +0 -0
  116. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_push_arpakit_gitlab_1.sh +0 -0
  117. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_remote_v.sh +0 -0
  118. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_arpakit_company_origin.sh +0 -0
  119. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_arpakit_origin.sh +0 -0
  120. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_set_divarteam_origin.sh +0 -0
  121. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/git_status.sh +0 -0
  122. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/hello_world.py +0 -0
  123. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/init_json_db.py +0 -0
  124. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/init_sqlalchemy_db.py +0 -0
  125. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_check.sh +0 -0
  126. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_clear_cache.sh +0 -0
  127. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_config.sh +0 -0
  128. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_install.sh +0 -0
  129. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_lock.sh +0 -0
  130. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_remove_and_add_arpakitlib.sh +0 -0
  131. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_show.sh +0 -0
  132. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_show_arpakitlib.sh +0 -0
  133. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_update.sh +0 -0
  134. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/poetry_update_arpakitlib.sh +0 -0
  135. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/reinit_json_db.py +0 -0
  136. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/reinit_sqlalchemy_db.py +0 -0
  137. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/remove_operations.py +0 -0
  138. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/remove_story_logs.py +0 -0
  139. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/rm_all_records_in_json_db.py +0 -0
  140. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/set_tg_bot_commands.py +0 -0
  141. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/show_settings.py +0 -0
  142. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api.py +0 -0
  143. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api_for_prod.py +0 -0
  144. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_api_with_reload.py +0 -0
  145. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_operation_executor_worker.py +0 -0
  146. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_operation_executor_workers.py +0 -0
  147. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_scheduled_operation_creator_worker.py +0 -0
  148. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin.py +0 -0
  149. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin_for_prod.py +0 -0
  150. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_sqladmin_with_reload.py +0 -0
  151. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_tg_bot.py +0 -0
  152. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/command/start_tg_bot_for_prod.py +0 -0
  153. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/example.env +0 -0
  154. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_1.txt +0 -0
  155. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_2.txt +0 -0
  156. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_3.txt +0 -0
  157. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_4.txt +0 -0
  158. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/note/note_5.txt +0 -0
  159. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/__init__.py +0 -0
  160. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/additional_model/__init__.py +0 -0
  161. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/additional_model/common.py +0 -0
  162. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/__init__.py +0 -0
  163. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/asgi.py +0 -0
  164. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/const.py +0 -0
  165. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/create_api_app.py +0 -0
  166. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/event.py +0 -0
  167. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/exception.py +1 -1
  168. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/openapi_ui.py +0 -0
  169. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/response.py +0 -0
  170. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/__init__.py +0 -0
  171. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/admin/__init__.py +0 -0
  172. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/client/__init__.py +0 -0
  173. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/general/__init__.py +0 -0
  174. arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/general/healthcheck.py +1 -1
  175. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/router/main_router.py +0 -0
  176. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/__init__.py +0 -0
  177. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/common.py +0 -0
  178. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/__init__.py +0 -0
  179. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/admin/__init__.py +0 -0
  180. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/admin/common.py +0 -0
  181. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/client/__init__.py +0 -0
  182. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/client/common.py +0 -0
  183. /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
  184. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out → _arpakit_project_template_v_5/project/api/schema/in_/general}/__init__.py +0 -0
  185. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/in_/general/common.py +0 -0
  186. /arpakitlib/{_arpakit_project_template_v_4/project/api/schema/out/admin → _arpakit_project_template_v_5/project/api/schema/out}/__init__.py +0 -0
  187. /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
  188. /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
  189. /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
  190. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/common/datetime_.py +0 -0
  191. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/common/raw_data.py +0 -0
  192. /arpakitlib/{_arpakit_project_template_v_4/project/business_service → _arpakit_project_template_v_5/project/api/schema/out/general}/__init__.py +0 -0
  193. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/common.py +0 -0
  194. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/errors_info_general.py +0 -0
  195. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/schema/out/general/healthcheck.py +0 -0
  196. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/api/util.py +0 -0
  197. /arpakitlib/{_arpakit_project_template_v_4/project/celery_ → _arpakit_project_template_v_5/project/business_service}/__init__.py +0 -0
  198. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/business_service/hello_world.py +0 -0
  199. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/business_service/remove_operations.py +0 -0
  200. /arpakitlib/{_arpakit_project_template_v_4/project/core → _arpakit_project_template_v_5/project/celery_}/__init__.py +0 -0
  201. /arpakitlib/{_arpakit_project_template_v_4/project/json_db → _arpakit_project_template_v_5/project/core}/__init__.py +0 -0
  202. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/cache_file_storage_in_dir.py +0 -0
  203. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/const.py +0 -0
  204. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/dump_file_storage_in_dir.py +0 -0
  205. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/jinja2_templates.py +0 -0
  206. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/media_file_storage_in_dir.py +0 -0
  207. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/core/util.py +0 -0
  208. /arpakitlib/{_arpakit_project_template_v_4/project/operation_execution → _arpakit_project_template_v_5/project/json_db}/__init__.py +0 -0
  209. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/json_db/json_db.py +0 -0
  210. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/more/helloworld +0 -0
  211. /arpakitlib/{_arpakit_project_template_v_4/project/resource → _arpakit_project_template_v_5/project/operation_execution}/__init__.py +0 -0
  212. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/const.py +0 -0
  213. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/scheduled_operation_creator_worker.py +0 -0
  214. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/scheduled_operations.py +0 -0
  215. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/operation_execution/util.py +0 -0
  216. /arpakitlib/{_arpakit_project_template_v_4/project/sandbox → _arpakit_project_template_v_5/project/resource}/__init__.py +0 -0
  217. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/1 +0 -0
  218. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/healthcheck +0 -0
  219. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/helloworld +0 -0
  220. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/openapi-favicon.png +0 -0
  221. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/redoc/redoc.standalone.js +0 -0
  222. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/favicon-16x16.png +0 -0
  223. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/favicon-32x32.png +0 -0
  224. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/index.css +0 -0
  225. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/index.html +0 -0
  226. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/oauth2-redirect.html +0 -0
  227. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-initializer.js +0 -0
  228. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-bundle.js +0 -0
  229. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-bundle.js.map +0 -0
  230. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle-core.js +0 -0
  231. /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
  232. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js +0 -0
  233. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
  234. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js +0 -0
  235. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
  236. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.css +0 -0
  237. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.css.map +0 -0
  238. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.js +0 -0
  239. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/resource/static/swagger-ui/swagger-ui.js.map +0 -0
  240. /arpakitlib/{_arpakit_project_template_v_4/project/site → _arpakit_project_template_v_5/project/sandbox}/__init__.py +0 -0
  241. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_2.py +0 -0
  242. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_3.py +0 -0
  243. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_4.py +0 -0
  244. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_5.py +0 -0
  245. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_6.py +0 -0
  246. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sandbox/sandbox_7.py +0 -0
  247. /arpakitlib/{_arpakit_project_template_v_4/project/site/router → _arpakit_project_template_v_5/project/site}/__init__.py +0 -0
  248. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/asgi.py +0 -0
  249. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/consts.py +0 -0
  250. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/create_site_app.py +0 -0
  251. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/event.py +0 -0
  252. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/exception_handler.py +0 -0
  253. /arpakitlib/{_arpakit_project_template_v_4/project/sqladmin_ → _arpakit_project_template_v_5/project/site/router}/__init__.py +0 -0
  254. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/site/router/main_router.py +0 -0
  255. /arpakitlib/{_arpakit_project_template_v_4/project/sqlalchemy_db_ → _arpakit_project_template_v_5/project/sqladmin_}/__init__.py +0 -0
  256. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/add_admin_in_app.py +0 -0
  257. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/admin_auth.py +0 -0
  258. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/asgi.py +0 -0
  259. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/create_sqladmin_app.py +0 -0
  260. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/event.py +0 -0
  261. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/__init__.py +0 -0
  262. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/common.py +0 -0
  263. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/operation.py +0 -0
  264. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqladmin_/model_view/story_log.py +0 -0
  265. /arpakitlib/{_arpakit_project_template_v_4/project/test_data → _arpakit_project_template_v_5/project/sqlalchemy_db_}/__init__.py +0 -0
  266. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/const.py +0 -0
  267. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_db.py +0 -0
  268. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/__init__.py +0 -0
  269. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/common.py +0 -0
  270. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/operation.py +0 -0
  271. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +0 -0
  272. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/sqlalchemy_db_/util.py +0 -0
  273. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot → _arpakit_project_template_v_5/project/test_data}/__init__.py +0 -0
  274. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/blank → _arpakit_project_template_v_5/project/tg_bot}/__init__.py +0 -0
  275. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/callback → _arpakit_project_template_v_5/project/tg_bot/blank}/__init__.py +0 -0
  276. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/blank/common.py +0 -0
  277. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/filter_ → _arpakit_project_template_v_5/project/tg_bot/callback}/__init__.py +0 -0
  278. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/admin.py +0 -0
  279. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/callback/common.py +0 -0
  280. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/event.py +0 -0
  281. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb → _arpakit_project_template_v_5/project/tg_bot/filter_}/__init__.py +0 -0
  282. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/is_private_chat.py +0 -0
  283. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/message_text.py +0 -0
  284. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/not_prod_mode_filter.py +0 -0
  285. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/filter_/prod_mode_filter.py +0 -0
  286. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/kb/inline_ → _arpakit_project_template_v_5/project/tg_bot/kb}/__init__.py +0 -0
  287. /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
  288. /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
  289. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/admin/common.py +0 -0
  290. /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
  291. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/client/common.py +0 -0
  292. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/client/hello_world.py +0 -0
  293. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/inline_/common.py +0 -0
  294. /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
  295. /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
  296. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/admin/common.py +0 -0
  297. /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
  298. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/client/common.py +0 -0
  299. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/client/hello_world.py +0 -0
  300. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/kb/static_/common.py +0 -0
  301. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router → _arpakit_project_template_v_5/project/tg_bot/middleware}/__init__.py +0 -0
  302. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/common.py +0 -0
  303. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/middleware/middleware.py +0 -0
  304. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/router/admin → _arpakit_project_template_v_5/project/tg_bot/router}/__init__.py +0 -0
  305. /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
  306. /arpakitlib/{_arpakit_project_template_v_4/project/tg_bot/util → _arpakit_project_template_v_5/project/tg_bot/router/client}/__init__.py +0 -0
  307. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/start_tg_bot.py +0 -0
  308. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/tg_bot.py +0 -0
  309. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/tg_bot_dispatcher.py +0 -0
  310. /arpakitlib/{_arpakit_project_template_v_4/project → _arpakit_project_template_v_5/project/tg_bot}/util/__init__.py +0 -0
  311. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/tg_bot/util/etc.py +0 -0
  312. /arpakitlib/{_arpakit_project_template_v_4 → _arpakit_project_template_v_5}/project/util/arpakitlib_project_template.py +0 -0
  313. {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/LICENSE +0 -0
  314. {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/WHEEL +0 -0
  315. {arpakitlib-1.8.18.dist-info → arpakitlib-1.8.20.dist-info}/entry_points.txt +0 -0
@@ -84,24 +84,10 @@ class Settings(SimpleSettings):
84
84
 
85
85
  api_init_json_db: bool = False
86
86
 
87
- api_api_keys: list[str] | None = ["1"]
87
+ api_correct_api_keys: list[str] | None = ["1"]
88
88
 
89
- @field_validator("api_api_keys", mode="before")
90
- def validate_api_api_keys(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
91
- if isinstance(v, str):
92
- v = [v]
93
- if isinstance(v, int):
94
- v = [str(v)]
95
- if isinstance(v, list):
96
- for i, v_ in enumerate(v):
97
- if isinstance(v_, int):
98
- v[i] = str(v_)
99
- return v
100
-
101
- api_user_tokens: list[str] | None = ["1"]
102
-
103
- @field_validator("api_user_tokens", mode="before")
104
- def validate_api_tokens(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
89
+ @field_validator("api_correct_api_keys", mode="before")
90
+ def validate_api_correct_api_keys(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
105
91
  if isinstance(v, str):
106
92
  v = [v]
107
93
  if isinstance(v, int):
@@ -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():
@@ -35,7 +35,7 @@ class ApiKeyDBM(SimpleDBM):
35
35
  insert_default=generate_default_api_key_value,
36
36
  nullable=False
37
37
  )
38
- is_enabled: Mapped[bool] = mapped_column(
38
+ is_active: Mapped[bool] = mapped_column(
39
39
  sqlalchemy.Boolean,
40
40
  index=True,
41
41
  insert_default=True,
@@ -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,
@@ -33,7 +33,7 @@ class UserDBM(SimpleDBM):
33
33
  index=True,
34
34
  nullable=False
35
35
  )
36
- is_enabled: Mapped[bool] = mapped_column(
36
+ is_active: Mapped[bool] = mapped_column(
37
37
  sqlalchemy.Boolean,
38
38
  index=True,
39
39
  insert_default=True,
@@ -25,7 +25,7 @@ class UserTokenDBM(SimpleDBM):
25
25
  index=True,
26
26
  nullable=False
27
27
  )
28
- is_enabled: Mapped[bool] = mapped_column(
28
+ is_active: Mapped[bool] = mapped_column(
29
29
  sqlalchemy.Boolean,
30
30
  index=True,
31
31
  insert_default=True,
@@ -0,0 +1,35 @@
1
+ import asyncio
2
+ import logging
3
+
4
+ from project.core.settings import get_cached_settings
5
+ from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
6
+ from project.sqlalchemy_db_.sqlalchemy_model import ApiKeyDBM
7
+
8
+ _logger = logging.getLogger(__name__)
9
+
10
+
11
+ def make_test_data_1():
12
+ get_cached_settings().raise_if_prod_mode()
13
+ with get_cached_sqlalchemy_db().new_session() as session:
14
+ for i in range(10):
15
+ api_key = ApiKeyDBM(value=str(i))
16
+ session.add(api_key)
17
+ _logger.info(api_key)
18
+ session.commit()
19
+
20
+
21
+ async def async_make_test_data_1():
22
+ get_cached_settings().raise_if_prod_mode()
23
+
24
+
25
+ def __example():
26
+ make_test_data_1()
27
+
28
+
29
+ async def __async_example():
30
+ await async_make_test_data_1()
31
+
32
+
33
+ if __name__ == '__main__':
34
+ __example()
35
+ asyncio.run(__async_example())
@@ -1,12 +1,14 @@
1
1
  import asyncio
2
2
 
3
+ from project.core.settings import get_cached_settings
4
+
3
5
 
4
6
  def make_test_data_1():
5
- pass
7
+ get_cached_settings().raise_if_prod_mode()
6
8
 
7
9
 
8
10
  async def async_make_test_data_1():
9
- pass
11
+ get_cached_settings().raise_if_prod_mode()
10
12
 
11
13
 
12
14
  def __example():
@@ -1,12 +1,14 @@
1
1
  import asyncio
2
2
 
3
+ from project.core.settings import get_cached_settings
4
+
3
5
 
4
6
  def make_test_data_2():
5
- pass
7
+ get_cached_settings().raise_if_prod_mode()
6
8
 
7
9
 
8
10
  async def async_make_test_data_2():
9
- pass
11
+ get_cached_settings().raise_if_prod_mode()
10
12
 
11
13
 
12
14
  def __example():
@@ -1,12 +1,14 @@
1
1
  import asyncio
2
2
 
3
+ from project.core.settings import get_cached_settings
4
+
3
5
 
4
6
  def make_test_data_3():
5
- pass
7
+ get_cached_settings().raise_if_prod_mode()
6
8
 
7
9
 
8
10
  async def async_make_test_data_3():
9
- pass
11
+ get_cached_settings().raise_if_prod_mode()
10
12
 
11
13
 
12
14
  def __example():
@@ -1,12 +1,14 @@
1
1
  import asyncio
2
2
 
3
+ from project.core.settings import get_cached_settings
4
+
3
5
 
4
6
  def make_test_data_4():
5
- pass
7
+ get_cached_settings().raise_if_prod_mode()
6
8
 
7
9
 
8
10
  async def async_make_test_data_4():
9
- pass
11
+ get_cached_settings().raise_if_prod_mode()
10
12
 
11
13
 
12
14
  def __example():
@@ -1,12 +1,14 @@
1
1
  import asyncio
2
2
 
3
+ from project.core.settings import get_cached_settings
4
+
3
5
 
4
6
  def make_test_data_5():
5
- pass
7
+ get_cached_settings().raise_if_prod_mode()
6
8
 
7
9
 
8
10
  async def async_make_test_data_5():
9
- pass
11
+ get_cached_settings().raise_if_prod_mode()
10
12
 
11
13
 
12
14
  def __example():
@@ -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
@@ -4,23 +4,24 @@ from arpakitlib.ar_enumeration_util import Enumeration
4
4
  class ClientTgBotCommands(Enumeration):
5
5
  start = "start"
6
6
  about = "about"
7
+ support = "support"
7
8
  healthcheck = "healthcheck"
8
9
  hello_world = "hello_world"
9
10
 
10
11
 
11
12
  class AdminTgBotCommands(Enumeration):
12
13
  arpakitlib_project_template_info = "arpakitlib_project_template_info"
13
- init_db = "init_db"
14
+ init_sqlalchemy_db = "init_sqlalchemy_db"
14
15
  reinit_sqlalchemy_db = "reinit_sqlalchemy_db"
15
- drop_db = "drop_db"
16
- set_tg_bot_commands = "set_tg_bot_commands"
17
- raise_fake_err = "raise_fake_err"
16
+ drop_sqlalchemy_db = "drop_sqlalchemy_db"
17
+ set_all_tg_bot_commands = "set_all_tg_bot_commands"
18
+ raise_fake_error = "raise_fake_error"
18
19
  me = "me"
19
20
  log_file = "log_file"
20
21
  clear_log_file = "clear_log_file"
21
- kb_with_old_data = "kb_with_old_data"
22
+ kb_with_old_cd = "kb_with_old_cd"
22
23
  kb_with_not_modified = "kb_with_not_modified"
23
- kb_with_fake_error = "kb_with_fake_error"
24
+ kb_with_raise_error = "kb_with_raise_error"
24
25
  kb_with_remove_message = "kb_with_remove_message"
25
26
 
26
27
 
@@ -0,0 +1,18 @@
1
+ import aiogram.types
2
+ from aiogram.filters import Filter
3
+
4
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
5
+
6
+
7
+ class UserRolesHasAdminTgBotFilter(Filter):
8
+
9
+ async def __call__(
10
+ self,
11
+ update: aiogram.types.Message | aiogram.types.CallbackQuery | aiogram.types.TelegramObject,
12
+ middleware_data_tg_bot: MiddlewareDataTgBot,
13
+ **kwargs
14
+ ) -> bool:
15
+ if middleware_data_tg_bot.user_dbm is not None:
16
+ if middleware_data_tg_bot.user_dbm.roles_has_admin:
17
+ return True
18
+ return False
@@ -0,0 +1,18 @@
1
+ import aiogram.types
2
+ from aiogram.filters import Filter
3
+
4
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
5
+
6
+
7
+ class UserRolesHasClientTgBotFilter(Filter):
8
+
9
+ async def __call__(
10
+ self,
11
+ update: aiogram.types.Message | aiogram.types.CallbackQuery | aiogram.types.TelegramObject,
12
+ middleware_data_tg_bot: MiddlewareDataTgBot,
13
+ **kwargs
14
+ ) -> bool:
15
+ if middleware_data_tg_bot.user_dbm is not None:
16
+ if middleware_data_tg_bot.user_dbm.roles_has_client:
17
+ return True
18
+ return False
@@ -2,6 +2,7 @@ import logging
2
2
  from typing import Any, Awaitable, Callable, Dict
3
3
 
4
4
  import aiogram
5
+ import sqlalchemy
5
6
  from aiogram import BaseMiddleware
6
7
  from aiogram.types import TelegramObject
7
8
 
@@ -45,9 +46,9 @@ class InitUserTgBotMiddleware(BaseMiddleware):
45
46
  now_local_dt_ = now_local_dt()
46
47
 
47
48
  if tg_user is not None and get_cached_sqlalchemy_db() is not None:
48
- with get_cached_sqlalchemy_db().new_session() as session:
49
- middleware_data_tg_bot.user_dbm = (
50
- session.query(UserDBM).filter(UserDBM.tg_id == tg_user.id).one_or_none()
49
+ async with get_cached_sqlalchemy_db().new_async_session() as async_session:
50
+ middleware_data_tg_bot.user_dbm = await async_session.scalar(
51
+ sqlalchemy.select(UserDBM).filter(UserDBM.tg_id == tg_user.id)
51
52
  )
52
53
  if middleware_data_tg_bot.user_dbm is None:
53
54
  roles = [UserDBM.Roles.client]
@@ -60,9 +61,9 @@ class InitUserTgBotMiddleware(BaseMiddleware):
60
61
  tg_data=tg_user.model_dump(mode="json"),
61
62
  tg_bot_last_action_dt=now_local_dt_
62
63
  )
63
- session.add(middleware_data_tg_bot.user_dbm)
64
- session.commit()
65
- session.refresh(middleware_data_tg_bot.user_dbm)
64
+ async_session.add(middleware_data_tg_bot.user_dbm)
65
+ await async_session.commit()
66
+ await async_session.refresh(middleware_data_tg_bot.user_dbm)
66
67
  middleware_data_tg_bot.user_dbm_just_created = True
67
68
  _logger.info(f"user_dbm was added, {middleware_data_tg_bot.user_dbm}")
68
69
  else:
@@ -75,8 +76,8 @@ class InitUserTgBotMiddleware(BaseMiddleware):
75
76
  middleware_data_tg_bot.user_dbm.roles = (
76
77
  middleware_data_tg_bot.user_dbm.roles + [UserDBM.Roles.admin]
77
78
  )
78
- session.commit()
79
- session.refresh(middleware_data_tg_bot.user_dbm)
79
+ await async_session.commit()
80
+ await async_session.refresh(middleware_data_tg_bot.user_dbm)
80
81
  middleware_data_tg_bot.user_dbm_just_created = False
81
82
 
82
83
  _logger.info("finish")
@@ -1,8 +1,10 @@
1
1
  import aiogram.filters
2
2
 
3
3
  from arpakitlib.ar_aiogram_util import as_tg_command
4
- from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
4
+ from arpakitlib.ar_json_util import transfer_data_to_json_str
5
5
  from project.tg_bot.const import AdminTgBotCommands
6
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
7
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
6
8
  from project.tg_bot.middleware.common import MiddlewareDataTgBot
7
9
  from project.util.arpakitlib_project_template import get_arpakitlib_project_template_info
8
10
 
@@ -10,6 +12,8 @@ tg_bot_router = aiogram.Router()
10
12
 
11
13
 
12
14
  @tg_bot_router.message(
15
+ IsPrivateChatTgBotFilter(),
16
+ UserRolesHasAdminTgBotFilter(),
13
17
  aiogram.filters.Command(AdminTgBotCommands.arpakitlib_project_template_info)
14
18
  )
15
19
  @as_tg_command()
@@ -19,7 +23,5 @@ async def _(
19
23
  **kwargs
20
24
  ):
21
25
  await m.answer(
22
- text=get_cached_admin_tg_bot_blank().arpakit_project_template_info(
23
- arpakitlib_project_template_info=get_arpakitlib_project_template_info()
24
- )
26
+ text=transfer_data_to_json_str(get_arpakitlib_project_template_info(), beautify=True)
25
27
  )
@@ -0,0 +1,33 @@
1
+ import aiogram
2
+ from aiogram import Router, types
3
+ from aiogram.filters import Command
4
+
5
+ from arpakitlib.ar_aiogram_util import as_tg_command
6
+ from project.core.settings import get_cached_settings
7
+ from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
8
+ from project.tg_bot.const import AdminTgBotCommands
9
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
10
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
11
+
12
+ tg_bot_router = Router()
13
+
14
+
15
+ @tg_bot_router.message(
16
+ IsPrivateChatTgBotFilter(),
17
+ UserRolesHasAdminTgBotFilter(),
18
+ aiogram.filters.Command(AdminTgBotCommands.clear_log_file)
19
+ )
20
+ @as_tg_command(passwd_validator=get_cached_settings().tg_bot_command_passwd)
21
+ async def _(
22
+ m: types.Message,
23
+ **kwargs
24
+ ):
25
+ with open(get_cached_settings().log_filepath, mode="r") as f:
26
+ if not f.read():
27
+ await m.answer(get_cached_admin_tg_bot_blank().good())
28
+ return
29
+
30
+ with open(get_cached_settings().log_filepath, mode="w") as f:
31
+ f.write("")
32
+
33
+ await m.answer(get_cached_admin_tg_bot_blank().good())
@@ -0,0 +1,31 @@
1
+ import aiogram.filters
2
+
3
+ from arpakitlib.ar_aiogram_util import as_tg_command
4
+ from project.core.settings import get_cached_settings
5
+ from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
6
+ from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
7
+ from project.tg_bot.const import AdminTgBotCommands
8
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
9
+ from project.tg_bot.filter_.not_prod_mode_filter import NotProdModeTgBotFilter
10
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
11
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
12
+
13
+ tg_bot_router = aiogram.Router()
14
+
15
+
16
+ @tg_bot_router.message(
17
+ IsPrivateChatTgBotFilter(),
18
+ UserRolesHasAdminTgBotFilter(),
19
+ NotProdModeTgBotFilter(),
20
+ aiogram.filters.Command(AdminTgBotCommands.drop_sqlalchemy_db),
21
+ )
22
+ @as_tg_command(passwd_validator=get_cached_settings().tg_bot_command_passwd)
23
+ async def _(
24
+ m: aiogram.types.Message,
25
+ middleware_data_tg_bot: MiddlewareDataTgBot,
26
+ **kwargs
27
+ ):
28
+ get_cached_sqlalchemy_db().drop()
29
+ await m.answer(
30
+ text=get_cached_admin_tg_bot_blank().good()
31
+ )
@@ -0,0 +1,28 @@
1
+ import aiogram.filters
2
+
3
+ from arpakitlib.ar_aiogram_util import as_tg_command
4
+ from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
5
+ from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
6
+ from project.tg_bot.const import AdminTgBotCommands
7
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
8
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
9
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
10
+
11
+ tg_bot_router = aiogram.Router()
12
+
13
+
14
+ @tg_bot_router.message(
15
+ IsPrivateChatTgBotFilter(),
16
+ UserRolesHasAdminTgBotFilter(),
17
+ aiogram.filters.Command(AdminTgBotCommands.init_sqlalchemy_db)
18
+ )
19
+ @as_tg_command()
20
+ async def _(
21
+ m: aiogram.types.Message,
22
+ middleware_data_tg_bot: MiddlewareDataTgBot,
23
+ **kwargs
24
+ ):
25
+ get_cached_sqlalchemy_db().init()
26
+ await m.answer(
27
+ text=get_cached_admin_tg_bot_blank().good()
28
+ )
@@ -0,0 +1,59 @@
1
+ import aiogram
2
+ from aiogram import Router, types
3
+ from aiogram.filters import Command
4
+ from aiogram.filters.callback_data import CallbackData
5
+ from aiogram.types import InlineKeyboardButton
6
+ from aiogram.utils.keyboard import InlineKeyboardBuilder
7
+
8
+ from arpakitlib.ar_aiogram_util import as_tg_command
9
+ from project.tg_bot.blank.admin import get_cached_admin_tg_bot_blank
10
+ from project.tg_bot.const import AdminTgBotCommands
11
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
12
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
13
+
14
+ tg_bot_router = Router()
15
+
16
+
17
+ class _CD(CallbackData, prefix=AdminTgBotCommands.kb_with_not_modified):
18
+ pass
19
+
20
+
21
+ @tg_bot_router.message(
22
+ IsPrivateChatTgBotFilter(),
23
+ UserRolesHasAdminTgBotFilter(),
24
+ aiogram.filters.Command(AdminTgBotCommands.kb_with_not_modified, ignore_case=True)
25
+ )
26
+ @as_tg_command()
27
+ async def _(
28
+ m: types.Message,
29
+ **kwargs
30
+ ):
31
+ kb_builder = InlineKeyboardBuilder()
32
+ kb_builder.row(InlineKeyboardButton(
33
+ text="Button raises Not Modified",
34
+ callback_data=_CD().pack()
35
+ ))
36
+ await m.answer(
37
+ text=get_cached_admin_tg_bot_blank().good(),
38
+ reply_markup=kb_builder.as_markup()
39
+ )
40
+
41
+
42
+ @tg_bot_router.callback_query(
43
+ IsPrivateChatTgBotFilter(),
44
+ UserRolesHasAdminTgBotFilter(),
45
+ _CD.filter()
46
+ )
47
+ async def _(
48
+ cq: types.CallbackQuery,
49
+ **kwargs
50
+ ):
51
+ kb_builder = InlineKeyboardBuilder()
52
+ kb_builder.row(InlineKeyboardButton(
53
+ text="Button raises Not Modified",
54
+ callback_data=_CD().pack()
55
+ ))
56
+ await cq.message.edit_text(
57
+ text=get_cached_admin_tg_bot_blank().good(),
58
+ reply_markup=kb_builder.as_markup()
59
+ )
@@ -0,0 +1,40 @@
1
+ import aiogram.filters
2
+ from aiogram.types import InlineKeyboardButton
3
+ from aiogram.utils.keyboard import InlineKeyboardBuilder
4
+
5
+ from arpakitlib.ar_aiogram_util import as_tg_command
6
+ from project.tg_bot.callback.common import BaseCD
7
+ from project.tg_bot.const import AdminTgBotCommands
8
+ from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
9
+ from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
10
+ from project.tg_bot.middleware.common import MiddlewareDataTgBot
11
+
12
+ tg_bot_router = aiogram.Router()
13
+
14
+
15
+ class _CD(BaseCD, prefix=AdminTgBotCommands.kb_with_old_cd):
16
+ pass
17
+
18
+
19
+ @tg_bot_router.message(
20
+ IsPrivateChatTgBotFilter(),
21
+ UserRolesHasAdminTgBotFilter(),
22
+ aiogram.filters.Command(AdminTgBotCommands.kb_with_old_cd, ignore_case=True)
23
+ )
24
+ @as_tg_command()
25
+ async def _(
26
+ m: aiogram.types.Message,
27
+ middleware_data_tg_bot: MiddlewareDataTgBot,
28
+ **kwargs
29
+ ):
30
+ kb_builder = InlineKeyboardBuilder()
31
+
32
+ kb_builder.row(InlineKeyboardButton(
33
+ text="Button with old data",
34
+ callback_data=_CD().pack()
35
+ ))
36
+
37
+ await m.answer(
38
+ text="Old data",
39
+ reply_markup=kb_builder.as_markup()
40
+ )