arpakitlib 1.7.257__tar.gz → 1.8.0__tar.gz

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 (321) hide show
  1. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/PKG-INFO +5 -3
  2. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/README.md +1 -0
  3. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/README.md +1 -1
  4. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/admin1/add_admin_in_app.py +6 -12
  5. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/admin1/admin_auth.py +2 -6
  6. arpakitlib-1.7.257/arpakitlib/ar_sqladmin_util.py → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/admin1/model_view.py +41 -51
  7. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/alembic/env.py +3 -3
  8. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/asgi.py +3 -0
  9. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/auth.py +244 -0
  10. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/const.py +18 -0
  11. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/create_api_app.py +72 -0
  12. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/event.py +69 -0
  13. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/exception.py +39 -0
  14. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/exception_handler.py +297 -0
  15. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/openapi_ui.py +28 -0
  16. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/response.py +27 -0
  17. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/api/router/main_router.py +3 -2
  18. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/router/v1/arpakitlib_.py +27 -0
  19. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/router/v1/check_auth.py +30 -0
  20. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/router/v1/get_errors_info.py +24 -0
  21. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/router/v1/healthcheck.py +21 -0
  22. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/router/v1/main_router.py +54 -0
  23. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/router/v1/now_utc_datetime.py +21 -0
  24. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/router/v1/raise_fake_error.py +21 -0
  25. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/schema/base_schema.py +26 -0
  26. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/schema/common/in_.py +5 -0
  27. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/schema/common/out.py +60 -0
  28. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/schema/v1/in_.py +5 -0
  29. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/schema/v1/out.py +53 -0
  30. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/transmitted_api_data.py +66 -0
  31. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/arpakitlib_project_template.json +3 -0
  32. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/business_service/hello_world.py +1 -1
  33. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/business_service/remove_operations.py +51 -0
  34. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/alembic_history.sh +2 -0
  35. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/alembic_revision_autogenerate.sh +2 -0
  36. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/json_beautify.py → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/beautify_json.py +2 -2
  37. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/core/_check_logging.py → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/check_logging.py +3 -3
  38. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/check_sqlalchemy_db.py +11 -0
  39. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/drop_json_db.py +13 -0
  40. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/drop_sqlalchemy_db.py +14 -0
  41. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/core/_generate_settings_env_example.py → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/generate_settings_env_example.py +4 -4
  42. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/hello_world.py +2 -2
  43. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/init_json_db.py +11 -0
  44. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/init_sqlalchemy_db.py +11 -0
  45. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/reinit_json_db.py +13 -0
  46. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/reinit_sqlalchemy_db.py +13 -0
  47. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/remove_operations.py +13 -0
  48. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/remove_story_logs.py +16 -0
  49. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/rm_all_records_in_json_db.py +13 -0
  50. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/core/_show_settings.py → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/show_settings.py +3 -3
  51. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/_start_api_with_reload.py → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/start_api_with_reload.py +5 -5
  52. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/_start_api_without_reload.py → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/start_api_without_reload.py +5 -5
  53. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/start_async_operation_executor_worker.py +14 -0
  54. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/start_async_scheduled_operation_creator_worker.py +14 -0
  55. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/start_sync_operation_executor_worker.py +15 -0
  56. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/start_sync_operation_executor_workers.py +22 -0
  57. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/start_sync_scheduled_operation_creator_worker.py +12 -0
  58. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/core/cache_file_storage_in_dir.py +21 -0
  59. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/core/const.py +2 -9
  60. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/core/dump_file_storage_in_dir.py +21 -0
  61. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/core/media_file_storage_in_dir.py +21 -0
  62. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/core/settings.py +193 -0
  63. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/core/util.py +29 -0
  64. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/example.env +10 -5
  65. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/json_db/util.py +2 -2
  66. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/operation_execution/operation_executor_worker.py +256 -0
  67. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/operation_execution/scheduled_operation_creator_worker.py +106 -0
  68. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/operation_execution/scheduled_operations.py +49 -0
  69. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/operation_execution/util.py +29 -0
  70. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static/openapi-favicon.png +0 -0
  71. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/index.html +19 -0
  72. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui-bundle.js +2 -0
  73. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui-es-bundle-core.js +1 -1
  74. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui-es-bundle-core.js.map +1 -0
  75. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui-es-bundle.js +2 -0
  76. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui-standalone-preset.js +2 -0
  77. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui.js +1 -1
  78. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static/swagger-ui/swagger-ui.js.map +1 -0
  79. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_1.py +14 -0
  80. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_2.py +14 -0
  81. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_3.py +14 -0
  82. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_4.py +14 -0
  83. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_5.py +14 -0
  84. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_6.py +14 -0
  85. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sandbox/sandbox_7.py +14 -0
  86. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sqlalchemy_db/util.py → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sqlalchemy_db/sqlalchemy_db.py +3 -11
  87. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sqlalchemy_db/sqlalchemy_model.py +129 -0
  88. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sqlalchemy_db/util.py +28 -0
  89. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sandbox/sandbox_2.py → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/test_data/make_test_data_1.py +8 -3
  90. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/test_data/make_test_data_2.py +22 -0
  91. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/test_data/make_test_data_3.py +22 -0
  92. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/test_data/make_test_data_4.py +22 -0
  93. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/test_data/make_test_data_5.py +22 -0
  94. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/blank/blank.py +5 -0
  95. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/blank/util.py +1 -1
  96. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/const.py +6 -3
  97. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/event.py +51 -0
  98. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/filter/not_prod_mode.py +1 -1
  99. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/filter/prod_mode.py +1 -1
  100. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/middleware/init_user.py +24 -0
  101. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/middleware/middleware.py +12 -0
  102. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/router/arpakitlib_.py +10 -0
  103. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/router/error.py +15 -0
  104. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/router/healthcheck.py +10 -0
  105. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/router/main_router.py +14 -0
  106. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/start_tg_bot.py +34 -0
  107. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/tg_bot.py +24 -0
  108. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/tg_bot_dispatcher.py +19 -0
  109. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/transmitted_tg_data.py +58 -0
  110. arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/util/read_arpakitlib_project_template_file.py +17 -0
  111. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_aiogram_util.py +41 -52
  112. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_arpakit_project_template_util.py +5 -11
  113. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_arpakitlib_cli_util.py +8 -2
  114. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_base_worker_util.py +35 -17
  115. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_class_util.py +11 -0
  116. arpakitlib-1.8.0/arpakitlib/ar_func_util.py +45 -0
  117. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_http_request_util.py +10 -2
  118. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_rat_func_util.py +1 -1
  119. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_retry_func_util.py +4 -4
  120. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_schedule_uust_api_client_util.py +1 -1
  121. arpakitlib-1.8.0/arpakitlib/ar_settings_util.py +49 -0
  122. arpakitlib-1.8.0/arpakitlib/ar_sqladmin_util.py +10 -0
  123. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_sqlalchemy_util.py +65 -13
  124. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_type_util.py +0 -2
  125. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/pyproject.toml +2 -2
  126. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/ARPAKITLIB +0 -1
  127. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/docker_ps.sh +0 -2
  128. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/git_branch.sh +0 -2
  129. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/poetry_add_plugin_export.sh +0 -2
  130. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/poetry_config_virtualenvs_in_project_true.sh +0 -2
  131. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/poetry_self_add_plugin_export.sh +0 -2
  132. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/admin1/model_view.py +0 -1
  133. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/asgi.py +0 -3
  134. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/auth.py +0 -53
  135. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/const.py +0 -13
  136. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/create_api_app.py +0 -43
  137. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/create_handle_exception_.py +0 -59
  138. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/event.py +0 -83
  139. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py +0 -27
  140. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py +0 -15
  141. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py +0 -1
  142. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py +0 -1
  143. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py +0 -7
  144. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/util.py +0 -44
  145. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/core/settings.py +0 -21
  146. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/core/util.py +0 -61
  147. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/json_db/_drop_json_db.py +0 -13
  148. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/json_db/_init_json_db.py +0 -11
  149. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/json_db/_reinit_json_db.py +0 -13
  150. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/json_db/_rm_all_records_in_json_db.py +0 -13
  151. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/just_script/example.py +0 -16
  152. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/operation_execution/_start_operation_executor_worker.py +0 -17
  153. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/operation_execution/_start_scheduled_operation_creator_worker.py +0 -17
  154. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/operation_execution/const.py +0 -9
  155. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py +0 -16
  156. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py +0 -29
  157. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/operation_execution/util.py +0 -1
  158. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sandbox/sandbox_1.py +0 -17
  159. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sandbox/sandbox_3.py +0 -17
  160. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sandbox/sandbox_4.py +0 -17
  161. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sandbox/sandbox_5.py +0 -17
  162. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sandbox/sandbox_6.py +0 -17
  163. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sandbox/sandbox_7.py +0 -17
  164. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_check_conn_sqlalchemy_db.py +0 -11
  165. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_drop_sqlalchemy_db.py +0 -13
  166. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_init_sqlalchemy_db.py +0 -11
  167. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_reinit_sqlalchemy_db.py +0 -13
  168. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_remove_operations.py +0 -15
  169. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sqlalchemy_db/_remove_story_logs.py +0 -16
  170. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sqlalchemy_db/sqlalchemy_model.py +0 -13
  171. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py +0 -8
  172. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py +0 -8
  173. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py +0 -8
  174. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py +0 -8
  175. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py +0 -8
  176. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/blank/blank.py +0 -10
  177. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/event.py +0 -39
  178. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/handler/cmd_healthcheck.py +0 -0
  179. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/router/error.py +0 -3
  180. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/router/router.py +0 -7
  181. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/start_tg_bot.py +0 -11
  182. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/transmitted_tg_data.py +0 -6
  183. arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/util.py +0 -44
  184. arpakitlib-1.7.257/arpakitlib/ar_api_key_util.py +0 -21
  185. arpakitlib-1.7.257/arpakitlib/ar_fastapi_static/healthcheck +0 -1
  186. arpakitlib-1.7.257/arpakitlib/ar_fastapi_static/swagger-ui/index.html +0 -19
  187. arpakitlib-1.7.257/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-bundle.js +0 -2
  188. arpakitlib-1.7.257/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -1
  189. arpakitlib-1.7.257/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle.js +0 -2
  190. arpakitlib-1.7.257/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-standalone-preset.js +0 -2
  191. arpakitlib-1.7.257/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js.map +0 -1
  192. arpakitlib-1.7.257/arpakitlib/ar_fastapi_util.py +0 -862
  193. arpakitlib-1.7.257/arpakitlib/ar_func_util.py +0 -55
  194. arpakitlib-1.7.257/arpakitlib/ar_operation_execution_util.py +0 -504
  195. arpakitlib-1.7.257/arpakitlib/ar_settings_util.py +0 -250
  196. arpakitlib-1.7.257/arpakitlib/ar_sqlalchemy_model_util.py +0 -183
  197. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/LICENSE +0 -0
  198. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/__init__.py +0 -0
  199. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/.gitignore +0 -0
  200. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/.python-version +0 -0
  201. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/LICENSE +0 -0
  202. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/additional_model}/__init__.py +0 -0
  203. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/additional_model/additional_model.py +0 -0
  204. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/note → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/admin1}/__init__.py +0 -0
  205. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/alembic/README +0 -0
  206. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/alembic/script.py.mako +0 -0
  207. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/alembic.ini +0 -0
  208. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/resource → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api}/__init__.py +0 -0
  209. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/resource/static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/router}/__init__.py +0 -0
  210. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/router/v1}/__init__.py +0 -0
  211. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/additional_model → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/schema}/__init__.py +0 -0
  212. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/admin1 → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/schema/common}/__init__.py +0 -0
  213. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/schema/v1}/__init__.py +0 -0
  214. /arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/note/note_1.txt → /arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/api/util.py +0 -0
  215. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/router → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/business_service}/__init__.py +0 -0
  216. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/router/v1 → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/__init__.py +0 -0
  217. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/alembic_upgrade_head .sh +0 -0
  218. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/docker_ps_a.sh +0 -0
  219. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/docker_rm_postgres.sh +0 -0
  220. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/docker_run_postgres.sh +0 -0
  221. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/docker_start_postgres.sh +0 -0
  222. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/docker_stop_postgres.sh +0 -0
  223. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/git_commit.sh +0 -0
  224. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/git_push_arpakit_company_github_1.sh +0 -0
  225. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/git_push_arpakit_company_gitlab_1.sh +0 -0
  226. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/git_push_arpakit_github_1.sh +0 -0
  227. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/git_push_arpakit_gitlab_1.sh +0 -0
  228. /arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/git_remote_v.sh → /arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command/git_remote.sh +0 -0
  229. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/git_set_arpakit_company_origin.sh +0 -0
  230. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/git_set_arpakit_origin.sh +0 -0
  231. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/git_status.sh +0 -0
  232. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_check.sh +0 -0
  233. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_clear_cache.sh +0 -0
  234. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_config.sh +0 -0
  235. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_install.sh +0 -0
  236. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_lock.sh +0 -0
  237. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_remove_and_add_arpakitlib.sh +0 -0
  238. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_show.sh +0 -0
  239. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_show_arpakitlib.sh +0 -0
  240. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_update.sh +0 -0
  241. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/command}/poetry_update_arpakitlib.sh +0 -0
  242. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/schema → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/core}/__init__.py +0 -0
  243. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/api/schema/v1 → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/json_db}/__init__.py +0 -0
  244. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/json_db/json_db.py +0 -0
  245. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/business_service → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/note}/__init__.py +0 -0
  246. /arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/note/note_2.txt → /arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/note/note_1.txt +0 -0
  247. /arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/note/note_3.txt → /arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/note/note_2.txt +0 -0
  248. /arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/note/note_4.txt → /arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/note/note_3.txt +0 -0
  249. /arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/manage/note/note_5.txt → /arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/note/note_4.txt +0 -0
  250. /arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/core/__init__.py → /arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/note/note_5.txt +0 -0
  251. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/json_db → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/operation_execution}/__init__.py +0 -0
  252. /arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/just_script/__init__.py → /arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/operation_execution/const.py +0 -0
  253. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/operation_execution → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource}/__init__.py +0 -0
  254. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sandbox → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/__init__.py +0 -0
  255. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/resource/static/healthcheck +0 -0
  256. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/resource/static/helloworld +0 -0
  257. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/redoc/redoc.standalone.js +0 -0
  258. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/favicon-16x16.png +0 -0
  259. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/favicon-32x32.png +0 -0
  260. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/index.css +0 -0
  261. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/oauth2-redirect.html +0 -0
  262. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/swagger-initializer.js +0 -0
  263. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui-bundle.js.map +0 -0
  264. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
  265. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
  266. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui.css +0 -0
  267. {arpakitlib-1.7.257/arpakitlib/ar_fastapi_static → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/resource/static}/swagger-ui/swagger-ui.css.map +0 -0
  268. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/sqlalchemy_db → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sandbox}/__init__.py +0 -0
  269. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/test_data → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/sqlalchemy_db}/__init__.py +0 -0
  270. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/sqlalchemy_db/const.py +0 -0
  271. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/test_data}/__init__.py +0 -0
  272. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/blank → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot}/__init__.py +0 -0
  273. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/filter → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/blank}/__init__.py +0 -0
  274. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/handler → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/filter}/__init__.py +0 -0
  275. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/kb/__init__.py +0 -0
  276. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/kb/inline_/__init__.py +0 -0
  277. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/kb/inline_/callback.py +0 -0
  278. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/kb/inline_/common.py +0 -0
  279. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/kb/static_/__init__.py +0 -0
  280. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/kb/static_/common.py +0 -0
  281. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/middleware/__init__.py +0 -0
  282. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/tg_bot/router/__init__.py +0 -0
  283. /arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src/tg_bot/handler/cmd_arpakitlib.py → /arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1/tg_bot/util.py +0 -0
  284. {arpakitlib-1.7.257/arpakitlib/_arpakit_project_template/src → arpakitlib-1.8.0/arpakitlib/_arpakit_project_template_v1}/util/__init__.py +0 -0
  285. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_additional_model_util.py +0 -0
  286. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_arpakit_lib_module_util.py +0 -0
  287. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_arpakit_schedule_uust_api_client_util.py +0 -0
  288. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_arpakit_schedule_uust_site_util.py +0 -0
  289. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_base64_util.py +0 -0
  290. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_blank_util.py +0 -0
  291. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_cache_file_util.py +0 -0
  292. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_cryptomus_api_client_util.py +0 -0
  293. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_datetime_util.py +0 -0
  294. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_dict_util.py +0 -0
  295. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_dream_ai_api_client_util.py +0 -0
  296. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_encrypt_decrypt_util.py +0 -0
  297. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_enumeration_util.py +0 -0
  298. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_exception_util.py +0 -0
  299. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_file_storage_in_dir_util.py +0 -0
  300. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_file_util.py +0 -0
  301. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_hash_util.py +0 -0
  302. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_ip_util.py +0 -0
  303. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_json_db_util.py +0 -0
  304. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_json_util.py +0 -0
  305. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_jwt_util.py +0 -0
  306. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_list_of_dicts_to_xlsx.py +0 -0
  307. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_list_util.py +0 -0
  308. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_logging_util.py +0 -0
  309. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_mongodb_util.py +0 -0
  310. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_need_type_util.py +0 -0
  311. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_openai_api_client_util.py +0 -0
  312. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_parse_command.py +0 -0
  313. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_postgresql_util.py +0 -0
  314. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_run_cmd_util.py +0 -0
  315. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_sleep_util.py +0 -0
  316. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_ssh_runner_util.py +0 -0
  317. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_steam_payment_api_client_util.py +0 -0
  318. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_str_util.py +0 -0
  319. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_wata_api_client.py +0 -0
  320. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_yookassa_api_client_util.py +0 -0
  321. {arpakitlib-1.7.257 → arpakitlib-1.8.0}/arpakitlib/ar_zabbix_api_client_util.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.7.257
3
+ Version: 1.8.0
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
7
- Author: arpakit
8
- Author-email: arpakit@gmail.com
7
+ Author: arpakit_support
8
+ Author-email: support@arpakit.com
9
9
  Requires-Python: >=3.12.4,<4.0
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Intended Audience :: Developers
@@ -55,6 +55,7 @@ Requires-Dist: uvicorn (>=0.34.0,<0.35.0)
55
55
  Project-URL: Documentation, https://github.com/ARPAKIT-Company/arpakitlib
56
56
  Project-URL: Homepage, https://github.com/ARPAKIT-Company/arpakitlib
57
57
  Project-URL: Repository, https://github.com/ARPAKIT-Company/arpakitlib
58
+ Project-URL: arpakit_company_site, https://arpakit.com/
58
59
  Project-URL: telegram_channel, https://t.me/arpakitlib
59
60
  Description-Content-Type: text/markdown
60
61
 
@@ -89,6 +90,7 @@ pip install arpakitlib
89
90
 
90
91
  ```
91
92
  poetry run arpakitlib -c help
93
+ poetry run arpakitlib -c init_arpakit_project_template -version 1 -project_dirpath ./ -overwrite_if_exists True
92
94
  ```
93
95
 
94
96
  ---
@@ -29,6 +29,7 @@ pip install arpakitlib
29
29
 
30
30
  ```
31
31
  poetry run arpakitlib -c help
32
+ poetry run arpakitlib -c init_arpakit_project_template -version 1 -project_dirpath ./ -overwrite_if_exists True
32
33
  ```
33
34
 
34
35
  ---
@@ -1,4 +1,4 @@
1
- # {{PROJECT_NAME}}
1
+ # ...
2
2
 
3
3
  ## ❤️ Made by ARPAKIT Company ❤️
4
4
 
@@ -1,19 +1,16 @@
1
- import importlib
2
- from contextlib import suppress
3
-
4
1
  from fastapi import FastAPI
5
2
  from sqladmin import Admin
6
3
 
7
- from arpakitlib.ar_sqladmin_util import SimpleModelView
8
- from src.admin1.admin_auth import AdminAuth
9
- from src.api.transmitted_api_data import TransmittedAPIData
10
- from src.core.settings import get_cached_settings
4
+ from admin1.admin_auth import Admin1Auth
5
+ from admin1.model_view import get_simple_mv
6
+ from api.transmitted_api_data import TransmittedAPIData
7
+ from core.settings import get_cached_settings
11
8
 
12
9
 
13
10
  def add_admin1_in_app(*, app: FastAPI) -> FastAPI:
14
11
  transmitted_api_data: TransmittedAPIData = app.state.transmitted_api_data
15
12
 
16
- authentication_backend = AdminAuth()
13
+ authentication_backend = Admin1Auth()
17
14
 
18
15
  admin = Admin(
19
16
  app=app,
@@ -23,10 +20,7 @@ def add_admin1_in_app(*, app: FastAPI) -> FastAPI:
23
20
  title=get_cached_settings().project_name
24
21
  )
25
22
 
26
- with suppress(Exception):
27
- importlib.import_module("src.admin1.model_view")
28
-
29
- for model_view in SimpleModelView.all_subclasses:
23
+ for model_view in get_simple_mv().__subclasses__():
30
24
  admin.add_model_view(model_view)
31
25
 
32
26
  return app
@@ -3,19 +3,17 @@ import logging
3
3
  from sqladmin.authentication import AuthenticationBackend
4
4
  from starlette.requests import Request
5
5
 
6
- from src.core.settings import get_cached_settings
6
+ from core.settings import get_cached_settings
7
7
 
8
8
 
9
- class AdminAuth(AuthenticationBackend):
9
+ class Admin1Auth(AuthenticationBackend):
10
10
  def __init__(self):
11
11
  self._logger = logging.getLogger(self.__class__.__name__)
12
12
  super().__init__(secret_key=get_cached_settings().admin1_secret_key)
13
13
 
14
14
  async def login(self, request: Request) -> bool:
15
- # ...
16
15
  # form = await request.form()
17
16
  # request.session.update(...)
18
- # ...
19
17
  return True
20
18
 
21
19
  async def logout(self, request: Request) -> bool:
@@ -23,7 +21,5 @@ class AdminAuth(AuthenticationBackend):
23
21
  return True
24
22
 
25
23
  async def authenticate(self, request: Request) -> bool:
26
- # ...
27
24
  # request.session.get("...")
28
- # ...
29
25
  return True
@@ -1,38 +1,54 @@
1
- # arpakit
2
1
  from sqladmin import ModelView
3
- from sqladmin.models import ModelViewMeta
4
2
 
5
- from arpakitlib.ar_class_util import CollectingSubclassesMeta
6
- from arpakitlib.ar_sqlalchemy_model_util import OperationDBM, StoryLogDBM
3
+ from arpakitlib.ar_sqladmin_util import get_string_info_from_model_view
4
+ from sqlalchemy_db.sqlalchemy_model import StoryLogDBM, OperationDBM
7
5
 
8
- _ARPAKIT_LIB_MODULE_VERSION = "3.0"
9
6
 
10
-
11
- def create_combined_meta(*metas):
12
- """
13
- Создает объединённый метакласс для устранения конфликтов.
14
- """
15
-
16
- class CombinedMeta(*metas):
17
- pass
18
-
19
- return CombinedMeta
20
-
21
-
22
- class SimpleModelView(ModelView, metaclass=create_combined_meta(CollectingSubclassesMeta, ModelViewMeta)):
7
+ class SimpleMV(ModelView):
23
8
  can_create = True
24
9
  can_edit = True
25
10
  can_delete = True
26
11
  can_view_details = True
27
12
  can_export = True
28
13
  page_size = 50
29
- page_size_options = [25, 50, 100, 200]
14
+ page_size_options = [50, 100, 200]
30
15
  save_as = True
31
16
  save_as_continue = True
32
17
  export_types = ["xlsx", "csv", "json"]
33
18
 
34
19
 
35
- class OperationMV(SimpleModelView, model=OperationDBM):
20
+ class StoryLogMV(SimpleMV, model=StoryLogDBM):
21
+ name = "StoryLog"
22
+ name_plural = "StoryLogs"
23
+ column_list = [
24
+ StoryLogDBM.id,
25
+ StoryLogDBM.long_id,
26
+ StoryLogDBM.creation_dt,
27
+ StoryLogDBM.level,
28
+ StoryLogDBM.type,
29
+ StoryLogDBM.title,
30
+ StoryLogDBM.data
31
+ ]
32
+ form_columns = [
33
+ StoryLogDBM.level,
34
+ StoryLogDBM.type,
35
+ StoryLogDBM.title,
36
+ StoryLogDBM.data
37
+ ]
38
+ column_default_sort = [
39
+ (StoryLogDBM.creation_dt, True)
40
+ ]
41
+ column_searchable_list = [
42
+ StoryLogDBM.id,
43
+ StoryLogDBM.long_id,
44
+ StoryLogDBM.level,
45
+ StoryLogDBM.type,
46
+ StoryLogDBM.title,
47
+ StoryLogDBM.data
48
+ ]
49
+
50
+
51
+ class OperationMV(SimpleMV, model=OperationDBM):
36
52
  name = "Operation"
37
53
  name_plural = "Operations"
38
54
  column_list = [
@@ -67,39 +83,13 @@ class OperationMV(SimpleModelView, model=OperationDBM):
67
83
  ]
68
84
 
69
85
 
70
- class StoryLogMV(SimpleModelView, model=StoryLogDBM):
71
- name = "StoryLog"
72
- name_plural = "StoryLogs"
73
- column_list = [
74
- StoryLogDBM.id,
75
- StoryLogDBM.long_id,
76
- StoryLogDBM.creation_dt,
77
- StoryLogDBM.level,
78
- StoryLogDBM.title,
79
- StoryLogDBM.data
80
- ]
81
- form_columns = [
82
- StoryLogDBM.level,
83
- StoryLogDBM.title,
84
- StoryLogDBM.data
85
- ]
86
- column_default_sort = [
87
- (StoryLogDBM.creation_dt, True)
88
- ]
89
- column_searchable_list = [
90
- StoryLogDBM.id,
91
- StoryLogDBM.long_id,
92
- StoryLogDBM.level,
93
- StoryLogDBM.title,
94
- StoryLogDBM.data
95
- ]
86
+ def get_simple_mv() -> type[SimpleMV]:
87
+ return SimpleMV
96
88
 
97
89
 
98
- def __example():
99
- print(len(SimpleModelView.all_subclasses))
100
- for model_view in SimpleModelView.all_subclasses:
101
- print(model_view)
90
+ def import_sqladmin_model_views():
91
+ pass
102
92
 
103
93
 
104
94
  if __name__ == '__main__':
105
- __example()
95
+ print(get_string_info_from_model_view(class_=SimpleMV))
@@ -5,8 +5,8 @@ from sqlalchemy import engine_from_config
5
5
  from sqlalchemy import pool
6
6
 
7
7
  from arpakitlib.ar_type_util import raise_for_type
8
- from src.core.settings import get_cached_settings
9
- from src.sqlalchemy_db.util import get_base_dbm
8
+ from core.settings import get_cached_settings
9
+ from sqlalchemy_db.sqlalchemy_model import get_simple_dbm
10
10
 
11
11
  # this is the Alembic Config object, which provides
12
12
  # access to the values within the .ini file in use.
@@ -24,7 +24,7 @@ if config.config_file_name is not None:
24
24
  # for 'autogenerate' support
25
25
  # from myapp import mymodel
26
26
  # target_metadata = mymodel.Base.metadata
27
- target_metadata = get_base_dbm().metadata
27
+ target_metadata = get_simple_dbm().metadata
28
28
 
29
29
 
30
30
  # other values from the config, defined by the needs of env.py,
@@ -0,0 +1,3 @@
1
+ from api.create_api_app import create_api_app
2
+
3
+ app = create_api_app()
@@ -0,0 +1,244 @@
1
+ from typing import Callable
2
+
3
+ import fastapi
4
+ import fastapi.exceptions
5
+ import fastapi.responses
6
+ import fastapi.security
7
+ import starlette.exceptions
8
+ import starlette.requests
9
+ import starlette.requests
10
+ import starlette.status
11
+ from fastapi import Security, Depends
12
+ from fastapi.security import APIKeyHeader
13
+ from pydantic import BaseModel, ConfigDict
14
+
15
+ from api.const import APIErrorCodes
16
+ from api.exception import APIException
17
+ from api.transmitted_api_data import TransmittedAPIData, get_transmitted_api_data
18
+ from arpakitlib.ar_func_util import is_async_callable, is_sync_function
19
+ from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str_to_json_obj
20
+ from arpakitlib.ar_type_util import raise_for_type
21
+
22
+
23
+ class APIAuthData(BaseModel):
24
+ model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, from_attributes=True)
25
+
26
+ require_api_key_string: bool = False
27
+ require_token_string: bool = False
28
+
29
+ require_correct_api_key: bool = False
30
+ require_correct_token: bool = False
31
+
32
+ token_string: str | None = None
33
+ api_key_string: str | None = None
34
+
35
+ is_token_correct: bool | None = None
36
+ is_api_key_correct: bool | None = None
37
+
38
+
39
+ def api_auth(
40
+ *,
41
+ require_api_key_string: bool = False,
42
+ require_token_string: bool = False,
43
+ validate_api_key_func: Callable | None = None,
44
+ validate_token_func: Callable | None = None,
45
+ correct_api_keys: str | list[str] | None = None,
46
+ correct_tokens: str | list[str] | None = None,
47
+ require_correct_api_key: bool = False,
48
+ require_correct_token: bool = False
49
+ ) -> Callable:
50
+ if isinstance(correct_api_keys, str):
51
+ correct_api_keys = [correct_api_keys]
52
+ if correct_api_keys is not None:
53
+ raise_for_type(correct_api_keys, list)
54
+
55
+ if validate_api_key_func is None and correct_api_keys is not None:
56
+ validate_api_key_func = lambda *args, **kwargs_: kwargs_["api_auth_data"].api_key_string in correct_api_keys
57
+
58
+ if isinstance(correct_tokens, str):
59
+ correct_tokens = [correct_tokens]
60
+ if correct_tokens is not None:
61
+ raise_for_type(correct_tokens, list)
62
+
63
+ if validate_token_func is None and correct_tokens is not None:
64
+ validate_token_func = lambda *args, **kwargs_: kwargs_["api_auth_data"].token_string in correct_tokens
65
+
66
+ if require_correct_api_key is True:
67
+ require_api_key_string = True
68
+
69
+ if require_correct_token is True:
70
+ require_token_string = True
71
+
72
+ async def func(
73
+ *,
74
+ ac: fastapi.security.HTTPAuthorizationCredentials | None = fastapi.Security(
75
+ fastapi.security.HTTPBearer(auto_error=False)
76
+ ),
77
+ api_key_string: str | None = Security(
78
+ APIKeyHeader(name="apikey", auto_error=False)
79
+ ),
80
+ request: starlette.requests.Request,
81
+ transmitted_api_data: TransmittedAPIData = Depends(get_transmitted_api_data)
82
+ ) -> APIAuthData:
83
+
84
+ api_auth_data = APIAuthData(
85
+ require_api_key_string=require_api_key_string,
86
+ require_token_string=require_token_string,
87
+ require_correct_api_key=require_correct_api_key,
88
+ require_correct_token=require_correct_token
89
+ )
90
+
91
+ # parse api_key
92
+
93
+ api_auth_data.api_key_string = api_key_string
94
+
95
+ if not api_auth_data.api_key_string and "api_key" in request.headers.keys():
96
+ api_auth_data.api_key_string = request.headers["api_key"]
97
+ if not api_auth_data.api_key_string and "api-key" in request.headers.keys():
98
+ api_auth_data.api_key_string = request.headers["api-key"]
99
+ if not api_auth_data.api_key_string and "apikey" in request.headers.keys():
100
+ api_auth_data.api_key_string = request.headers["apikey"]
101
+
102
+ if not api_auth_data.api_key_string and "api_key" in request.query_params.keys():
103
+ api_auth_data.api_key_string = request.query_params["api_key"]
104
+ if not api_auth_data.api_key_string and "api-key" in request.query_params.keys():
105
+ api_auth_data.api_key_string = request.query_params["api-key"]
106
+ if not api_auth_data.api_key_string and "apikey" in request.query_params.keys():
107
+ api_auth_data.api_key_string = request.query_params["apikey"]
108
+
109
+ # parse token
110
+
111
+ api_auth_data.token_string = ac.credentials if ac and ac.credentials and ac.credentials.strip() else None
112
+
113
+ if not api_auth_data.token_string and "token" in request.headers.keys():
114
+ api_auth_data.token_string = request.headers["token"]
115
+
116
+ if not api_auth_data.token_string and "user_token" in request.headers.keys():
117
+ api_auth_data.token_string = request.headers["user_token"]
118
+ if not api_auth_data.token_string and "user-token" in request.headers.keys():
119
+ api_auth_data.token_string = request.headers["user-token"]
120
+ if not api_auth_data.token_string and "usertoken" in request.headers.keys():
121
+ api_auth_data.token_string = request.headers["usertoken"]
122
+
123
+ if not api_auth_data.token_string and "token" in request.query_params.keys():
124
+ api_auth_data.token_string = request.query_params["token"]
125
+
126
+ if not api_auth_data.token_string and "user_token" in request.query_params.keys():
127
+ api_auth_data.token_string = request.query_params["user_token"]
128
+ if not api_auth_data.token_string and "user-token" in request.query_params.keys():
129
+ api_auth_data.token_string = request.query_params["user-token"]
130
+ if not api_auth_data.token_string and "usertoken" in request.query_params.keys():
131
+ api_auth_data.token_string = request.query_params["usertoken"]
132
+
133
+ if api_auth_data.token_string:
134
+ api_auth_data.token_string = api_auth_data.token_string.strip()
135
+ if not api_auth_data.token_string:
136
+ api_auth_data.token_string = None
137
+
138
+ # require_api_key_string
139
+
140
+ if require_api_key_string and not api_auth_data.api_key_string:
141
+ raise APIException(
142
+ status_code=starlette.status.HTTP_401_UNAUTHORIZED,
143
+ error_code=APIErrorCodes.cannot_authorize,
144
+ error_data=safely_transfer_obj_to_json_str_to_json_obj(api_auth_data.model_dump())
145
+ )
146
+
147
+ # require_token_string
148
+
149
+ if require_token_string and not api_auth_data.token_string:
150
+ raise APIException(
151
+ status_code=starlette.status.HTTP_401_UNAUTHORIZED,
152
+ error_code=APIErrorCodes.cannot_authorize,
153
+ error_data=safely_transfer_obj_to_json_str_to_json_obj(api_auth_data.model_dump())
154
+ )
155
+
156
+ # validate_api_key_func
157
+
158
+ if validate_api_key_func is not None:
159
+ if is_async_callable(validate_api_key_func):
160
+ api_auth_data.is_api_key_correct = await validate_api_key_func(
161
+ api_auth_data=api_auth_data,
162
+ transmitted_api_data=transmitted_api_data,
163
+ request=request
164
+ )
165
+ elif is_sync_function(validate_api_key_func):
166
+ api_auth_data.is_api_key_correct = validate_api_key_func()
167
+ else:
168
+ raise TypeError("unknown validate_api_key_func type")
169
+
170
+ # validate_token_func
171
+
172
+ if validate_token_func is not None:
173
+ if is_async_callable(validate_token_func):
174
+ api_auth_data.is_token_correct = await validate_token_func(
175
+ api_auth_data=api_auth_data,
176
+ transmitted_api_data=transmitted_api_data,
177
+ request=request
178
+ )
179
+ elif is_sync_function(validate_token_func):
180
+ api_auth_data.is_token_correct = validate_token_func()
181
+ else:
182
+ raise TypeError("unknown validate_token_func type")
183
+
184
+ # require_correct_api_key
185
+
186
+ if require_correct_api_key:
187
+ if not api_auth_data.is_api_key_correct:
188
+ raise APIException(
189
+ status_code=starlette.status.HTTP_401_UNAUTHORIZED,
190
+ error_code=APIErrorCodes.cannot_authorize,
191
+ error_description="not api_auth_data.is_api_key_correct",
192
+ error_data=safely_transfer_obj_to_json_str_to_json_obj(api_auth_data.model_dump()),
193
+ )
194
+
195
+ # require_correct_token
196
+
197
+ if require_correct_token:
198
+ if not api_auth_data.is_token_correct:
199
+ raise APIException(
200
+ status_code=starlette.status.HTTP_401_UNAUTHORIZED,
201
+ error_code=APIErrorCodes.cannot_authorize,
202
+ error_description="not api_auth_data.is_token_correct",
203
+ error_data=safely_transfer_obj_to_json_str_to_json_obj(api_auth_data.model_dump())
204
+ )
205
+
206
+ return api_auth_data
207
+
208
+ return func
209
+
210
+
211
+ def correct_api_key_from_settings__validate_api_key_func() -> Callable:
212
+ async def func(
213
+ *,
214
+ api_auth_data: APIAuthData,
215
+ transmitted_api_data: TransmittedAPIData,
216
+ request: starlette.requests.Request,
217
+ ):
218
+ if transmitted_api_data.settings.api_correct_api_keys is None:
219
+ return True
220
+ if api_auth_data.api_key_string is None:
221
+ return False
222
+ if api_auth_data.api_key_string.strip() not in transmitted_api_data.settings.api_correct_api_keys:
223
+ return False
224
+ return True
225
+
226
+ return func
227
+
228
+
229
+ def correct_token_from_settings__validate_api_key_func() -> Callable:
230
+ async def func(
231
+ *,
232
+ api_auth_data: APIAuthData,
233
+ transmitted_api_data: TransmittedAPIData,
234
+ request: starlette.requests.Request,
235
+ ):
236
+ if transmitted_api_data.settings.api_correct_tokens is None:
237
+ return True
238
+ if api_auth_data.token_string is None:
239
+ return False
240
+ if api_auth_data.token_string.strip() not in transmitted_api_data.settings.api_correct_tokens:
241
+ return False
242
+ return True
243
+
244
+ return func
@@ -0,0 +1,18 @@
1
+ from arpakitlib.ar_enumeration_util import Enumeration
2
+
3
+
4
+ class APIErrorCodes(Enumeration):
5
+ cannot_authorize = "CANNOT_AUTHORIZE"
6
+ unknown_error = "UNKNOWN_ERROR"
7
+ error_in_request = "ERROR_IN_REQUEST"
8
+ not_found = "NOT_FOUND"
9
+
10
+
11
+ class APIErrorSpecificationCodes(Enumeration):
12
+ pass
13
+
14
+
15
+ if __name__ == '__main__':
16
+ print(APIErrorCodes.str_for_print())
17
+ print()
18
+ print(APIErrorSpecificationCodes.str_for_print())
@@ -0,0 +1,72 @@
1
+ import logging
2
+ import os
3
+
4
+ from fastapi import FastAPI
5
+ from starlette.middleware.cors import CORSMiddleware
6
+ from starlette.staticfiles import StaticFiles
7
+
8
+ from api.event import get_api_startup_events, get_api_shutdown_events
9
+ from api.exception_handler import add_exception_handler_to_app
10
+ from api.openapi_ui import add_local_openapi_ui_to_app
11
+ from api.router.main_router import main_api_router
12
+ from api.transmitted_api_data import get_cached_transmitted_api_data
13
+ from core.const import ProjectPaths
14
+ from core.util import setup_logging
15
+
16
+ _logger = logging.getLogger(__name__)
17
+
18
+
19
+ def create_api_app() -> FastAPI:
20
+ setup_logging()
21
+
22
+ _logger.info("start")
23
+
24
+ transmitted_api_data = get_cached_transmitted_api_data()
25
+
26
+ api_app = FastAPI(
27
+ title=transmitted_api_data.settings.project_name,
28
+ description=transmitted_api_data.settings.project_name,
29
+ docs_url=None,
30
+ redoc_url=None,
31
+ openapi_url="/openapi",
32
+ on_startup=get_api_startup_events(),
33
+ on_shutdown=get_api_shutdown_events(),
34
+ contact={
35
+ "name": "ARPAKIT Company",
36
+ "url": "https://arpakit.com/",
37
+ "email": "support@arpakit.com",
38
+ },
39
+ )
40
+
41
+ api_app.state.transmitted_api_data = transmitted_api_data
42
+
43
+ if transmitted_api_data.settings.media_dirpath is not None:
44
+ if not os.path.exists(transmitted_api_data.settings.media_dirpath):
45
+ os.makedirs(transmitted_api_data.settings.media_dirpath, exist_ok=True)
46
+ api_app.mount("/media", StaticFiles(directory=transmitted_api_data.settings.media_dirpath), name="media")
47
+
48
+ if not os.path.exists(ProjectPaths.static_dirpath):
49
+ os.makedirs(ProjectPaths.static_dirpath, exist_ok=True)
50
+ api_app.mount("/static", StaticFiles(directory=ProjectPaths.static_dirpath), name="static")
51
+
52
+ api_app.add_middleware(
53
+ CORSMiddleware,
54
+ allow_origins=["*"],
55
+ allow_credentials=True,
56
+ allow_methods=["*"],
57
+ allow_headers=["*"],
58
+ )
59
+
60
+ add_local_openapi_ui_to_app(app=api_app)
61
+
62
+ add_exception_handler_to_app(app=api_app)
63
+
64
+ api_app.include_router(router=main_api_router)
65
+
66
+ if transmitted_api_data.settings.api_enable_admin1:
67
+ from admin1.add_admin_in_app import add_admin1_in_app
68
+ add_admin1_in_app(app=api_app)
69
+
70
+ _logger.info("finish")
71
+
72
+ return api_app
@@ -0,0 +1,69 @@
1
+ import logging
2
+ from typing import Callable
3
+
4
+ from api.transmitted_api_data import get_cached_transmitted_api_data
5
+ from arpakitlib.ar_base_worker_util import safe_run_worker_in_background, SafeRunInBackgroundModes
6
+ from operation_execution.operation_executor_worker import create_operation_executor_worker
7
+ from operation_execution.scheduled_operation_creator_worker import create_scheduled_operation_creator_worker
8
+
9
+ _logger = logging.getLogger(__name__)
10
+
11
+
12
+ # STARTUP API EVENTS
13
+
14
+
15
+ async def async_api_startup_event():
16
+ _logger.info("start")
17
+
18
+ if get_cached_transmitted_api_data().media_file_storage_in_dir is not None:
19
+ get_cached_transmitted_api_data().media_file_storage_in_dir.init()
20
+
21
+ if get_cached_transmitted_api_data().cache_file_storage_in_dir is not None:
22
+ get_cached_transmitted_api_data().cache_file_storage_in_dir.init()
23
+
24
+ if get_cached_transmitted_api_data().dump_file_storage_in_dir is not None:
25
+ get_cached_transmitted_api_data().dump_file_storage_in_dir.init()
26
+
27
+ if (
28
+ get_cached_transmitted_api_data().sqlalchemy_db is not None
29
+ and get_cached_transmitted_api_data().settings.api_init_sqlalchemy_db
30
+ ):
31
+ get_cached_transmitted_api_data().sqlalchemy_db.init()
32
+
33
+ if (
34
+ get_cached_transmitted_api_data().json_db is not None
35
+ and get_cached_transmitted_api_data().settings.api_init_json_db
36
+ ):
37
+ get_cached_transmitted_api_data().json_db.init()
38
+
39
+ if get_cached_transmitted_api_data().settings.api_start_operation_executor_worker:
40
+ _ = safe_run_worker_in_background(
41
+ worker=create_operation_executor_worker(),
42
+ mode=SafeRunInBackgroundModes.thread
43
+ )
44
+
45
+ if get_cached_transmitted_api_data().settings.api_start_scheduled_operation_creator_worker:
46
+ _ = safe_run_worker_in_background(
47
+ worker=create_scheduled_operation_creator_worker(),
48
+ mode=SafeRunInBackgroundModes.async_task
49
+ )
50
+
51
+ _logger.info("finish")
52
+
53
+
54
+ def get_api_startup_events() -> list[Callable]:
55
+ res = [async_api_startup_event]
56
+ return res
57
+
58
+
59
+ # SHUTDOWN API EVENTS
60
+
61
+
62
+ async def async_api_shutdown_event():
63
+ _logger.info("start")
64
+ _logger.info("finish")
65
+
66
+
67
+ def get_api_shutdown_events() -> list[Callable]:
68
+ res = [async_api_shutdown_event]
69
+ return res