arpakitlib 1.7.90__tar.gz → 1.7.201__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 (217) hide show
  1. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/PKG-INFO +27 -20
  2. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/README.md +7 -0
  3. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/README.md +1 -3
  4. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/example.env +5 -0
  5. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/docker_run_postgres_for_dev.sh +4 -0
  6. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/docker_start_postgres_for_dev.sh +2 -0
  7. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/docker_stop_postgres_for_dev.sh +2 -0
  8. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/git_set_arpakit_company_origin.sh +2 -2
  9. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/git_set_arpakit_origin.sh +7 -0
  10. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/hello_world.py +2 -2
  11. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/json_beutify.py → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/json_beautify.py +2 -2
  12. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/poetry_config.sh +2 -0
  13. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/poetry_self_add_plugin_export.sh +2 -0
  14. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/poetry_show_arpakitlib.sh +2 -0
  15. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py +14 -0
  16. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py +14 -0
  17. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py +14 -0
  18. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py +14 -0
  19. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py +14 -0
  20. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py +14 -0
  21. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_7.py +14 -0
  22. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py +2 -0
  23. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py +26 -0
  24. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/admin1/admin_auth.py +29 -0
  25. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/admin1/model_view.py +19 -0
  26. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api/start_api_for_dev.py → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api/_start_api_with_reload.py +3 -3
  27. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api/_start_api_without_reload.py +17 -0
  28. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api/create_api_app.py +77 -0
  29. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api/event.py +63 -0
  30. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/api/router/main_router.py +3 -0
  31. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py +1 -0
  32. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py +4 -0
  33. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py +1 -0
  34. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py +2 -0
  35. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py +6 -0
  36. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/business_service/hello_world.py +15 -0
  37. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/logging_check.py → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/core/_check_logging.py +3 -3
  38. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/settings_check.py → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/core/_check_settings.py +2 -2
  39. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/core/_generate_settings_env_example.py +14 -0
  40. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/core/const.py +41 -0
  41. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/core/settings.py +17 -21
  42. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/core/util.py +3 -0
  43. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sqlalchemy_db_check_conn.py → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/db/_check_conn_sqlalchemy_db.py +2 -2
  44. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sqlalchemy_db_init.py → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/db/_init_sqlalchemy_db.py +2 -2
  45. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sqlalchemy_db_reinit.py → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/db/_reinit_sqlalchemy_db.py +4 -2
  46. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/db/const.py +1 -0
  47. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/db/util.py +2 -0
  48. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/operation_execution/start_operation_executor_worker_for_dev.py → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/operation_execution/_start_operation_executor_worker.py +3 -4
  49. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/operation_execution/start_scheduled_operation_creator_worker_for_dev.py → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/operation_execution/_start_scheduled_operation_creator_worker.py +4 -4
  50. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py +6 -4
  51. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py +29 -0
  52. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/operation_execution/util.py +1 -0
  53. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py +2 -0
  54. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py +2 -0
  55. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py +2 -0
  56. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py +2 -0
  57. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py +2 -0
  58. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/tg_bot/router/__init__.py +0 -0
  59. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/tg_bot/start_tg_bot.py +0 -0
  60. arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/util/__init__.py +0 -0
  61. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_arpakit_lib_module_util.py +7 -0
  62. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_arpakit_project_template_util.py +3 -3
  63. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_base_worker_util.py +39 -19
  64. arpakitlib-1.7.201/arpakitlib/ar_class_util.py +17 -0
  65. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_enumeration_util.py +19 -1
  66. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_util.py +0 -42
  67. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_func_util.py +1 -1
  68. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_operation_execution_util.py +130 -126
  69. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_schedule_uust_api_client_util.py +13 -6
  70. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_settings_util.py +16 -7
  71. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_sqlalchemy_model_util.py +5 -3
  72. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_str_util.py +15 -15
  73. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_type_util.py +16 -2
  74. arpakitlib-1.7.201/pyproject.toml +82 -0
  75. arpakitlib-1.7.90/NOTICE +0 -16
  76. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/AUTHOR.md +0 -4
  77. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/NOTICE +0 -16
  78. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/docker_run_postgres_for_dev.sh +0 -4
  79. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/docker_start_postgres_for_dev.sh +0 -2
  80. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/docker_stop_postgres_for_dev.sh +0 -2
  81. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/example_nginx_proxy.nginx +0 -14
  82. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/example_poetry_arpakitlib.sh +0 -1
  83. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/example_pyproject.toml +0 -18
  84. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/example_systemd.service +0 -12
  85. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/git_set_arpakit_origin.sh +0 -7
  86. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/poetry_generate_requirements.txt.sh +0 -1
  87. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/poetry_show_arpakitlib.sh +0 -2
  88. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/requirements.txt +0 -209
  89. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py +0 -14
  90. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py +0 -14
  91. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py +0 -14
  92. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py +0 -14
  93. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py +0 -14
  94. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py +0 -14
  95. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_7.py +0 -14
  96. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/manage/settings_generate_env_example.py +0 -13
  97. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api/create_api_app.py +0 -117
  98. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api/event.py +0 -20
  99. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api/start_api_for_dev_with_reload.py +0 -9
  100. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/core/const.py +0 -48
  101. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py +0 -25
  102. arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/operation_execution/util.py +0 -21
  103. arpakitlib-1.7.90/pyproject.toml +0 -68
  104. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/LICENSE +0 -0
  105. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/__init__.py +0 -0
  106. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/.gitignore +0 -0
  107. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/.python-version +0 -0
  108. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/ARPAKITLIB +0 -0
  109. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/LICENSE +0 -0
  110. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/__init__.py +0 -0
  111. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/docker_ps.sh +0 -0
  112. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/docker_ps_a.sh +0 -0
  113. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/git_branch.sh +0 -0
  114. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/git_commit.sh +0 -0
  115. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_company_github_1.sh +0 -0
  116. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_company_gitlab_1.sh +0 -0
  117. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_github_1.sh +0 -0
  118. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_gitlab_1.sh +0 -0
  119. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/git_remote_v.sh +0 -0
  120. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/git_status.sh +0 -0
  121. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/note/__init__.py +0 -0
  122. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/note/note_1.txt +0 -0
  123. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/note/note_2.txt +0 -0
  124. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/note/note_3.txt +0 -0
  125. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/note/note_4.txt +0 -0
  126. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/note/note_5.txt +0 -0
  127. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_add_plugin_export.sh +0 -0
  128. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_check.sh +0 -0
  129. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_clear_cache.sh +0 -0
  130. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_config_virtualenvs_in_project_true.sh +0 -0
  131. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_install.sh +0 -0
  132. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_lock.sh +0 -0
  133. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_remove_and_add_arpakitlib.sh +0 -0
  134. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_show.sh +0 -0
  135. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_update.sh +0 -0
  136. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/poetry_update_arpakitlib.sh +0 -0
  137. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/sandbox/__init__.py +0 -0
  138. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_8.sh +0 -0
  139. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_9.sh +0 -0
  140. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/resource/__init__.py +0 -0
  141. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/resource/static/__init__.py +0 -0
  142. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/resource/static/healthcheck +0 -0
  143. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/resource/static/helloworld +0 -0
  144. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/__init__.py +0 -0
  145. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/additional_model/__init__.py +0 -0
  146. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/admin1}/__init__.py +0 -0
  147. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api/router → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api}/__init__.py +0 -0
  148. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/api/asgi.py +0 -0
  149. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/api/auth.py +0 -0
  150. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/api/const.py +0 -0
  151. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api/router/v1 → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api/router}/__init__.py +0 -0
  152. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api/schema → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api/router/v1}/__init__.py +0 -0
  153. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api/schema/v1 → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api/schema}/__init__.py +0 -0
  154. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/business_service → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/api/schema/v1}/__init__.py +0 -0
  155. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/api/util.py +0 -0
  156. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/core → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/business_service}/__init__.py +0 -0
  157. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/db → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/core}/__init__.py +0 -0
  158. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/operation_execution → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/db}/__init__.py +0 -0
  159. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/db/sqlalchemy_model.py +0 -0
  160. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/test_data → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/operation_execution}/__init__.py +0 -0
  161. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/_arpakit_project_template/src/operation_execution/const.py +0 -0
  162. {arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/util → arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/test_data}/__init__.py +0 -0
  163. /arpakitlib-1.7.90/arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py → /arpakitlib-1.7.201/arpakitlib/_arpakit_project_template/src/tg_bot/__init__.py +0 -0
  164. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_additional_model_util.py +0 -0
  165. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_aiogram_util.py +0 -0
  166. /arpakitlib-1.7.90/arpakitlib/api_key_util.py → /arpakitlib-1.7.201/arpakitlib/ar_api_key_util.py +0 -0
  167. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_arpakit_schedule_uust_api_client_util.py +0 -0
  168. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_arpakitlib_cli_util.py +0 -0
  169. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_base64_util.py +0 -0
  170. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_cache_file_util.py +0 -0
  171. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_datetime_util.py +0 -0
  172. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_dict_util.py +0 -0
  173. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_dream_ai_api_client_util.py +0 -0
  174. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_encrypt_decrypt_util.py +0 -0
  175. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_exception_util.py +0 -0
  176. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/healthcheck +0 -0
  177. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/redoc/redoc.standalone.js +0 -0
  178. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/favicon-16x16.png +0 -0
  179. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/favicon-32x32.png +0 -0
  180. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/index.css +0 -0
  181. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/index.html +0 -0
  182. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/oauth2-redirect.html +0 -0
  183. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-initializer.js +0 -0
  184. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-bundle.js +0 -0
  185. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-bundle.js.map +0 -0
  186. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle-core.js +0 -0
  187. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -0
  188. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle.js +0 -0
  189. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
  190. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-standalone-preset.js +0 -0
  191. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
  192. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css +0 -0
  193. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css.map +0 -0
  194. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js +0 -0
  195. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js.map +0 -0
  196. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_file_storage_in_dir_util.py +0 -0
  197. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_file_util.py +0 -0
  198. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_hash_util.py +0 -0
  199. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_http_request_util.py +0 -0
  200. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_ip_util.py +0 -0
  201. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_json_db_util.py +0 -0
  202. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_json_util.py +0 -0
  203. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_jwt_util.py +0 -0
  204. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_list_of_dicts_to_xlsx.py +0 -0
  205. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_list_util.py +0 -0
  206. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_logging_util.py +0 -0
  207. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_mongodb_util.py +0 -0
  208. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_need_type_util.py +0 -0
  209. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_openai_api_client_util.py +0 -0
  210. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_parse_command.py +0 -0
  211. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_postgresql_util.py +0 -0
  212. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_run_cmd_util.py +0 -0
  213. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_sleep_util.py +0 -0
  214. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_sqlalchemy_util.py +0 -0
  215. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_ssh_runner_util.py +0 -0
  216. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_yookassa_api_client_util.py +0 -0
  217. {arpakitlib-1.7.90 → arpakitlib-1.7.201}/arpakitlib/ar_zabbix_api_client_util.py +0 -0
@@ -1,55 +1,55 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.7.90
3
+ Version: 1.7.201
4
4
  Summary: arpakitlib
5
- Home-page: https://github.com/ARPAKIT-Company/arpakitlib
6
5
  License: Apache-2.0
7
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
8
7
  Author: arpakit
9
8
  Author-email: arpakit@gmail.com
10
- Requires-Python: >=3.12,<4.0
9
+ Requires-Python: >=3.12.4,<4.0
11
10
  Classifier: Development Status :: 5 - Production/Stable
12
11
  Classifier: Intended Audience :: Developers
13
12
  Classifier: License :: OSI Approved :: Apache Software License
14
- Classifier: Operating System :: OS Independent
15
13
  Classifier: Programming Language :: Python
16
14
  Classifier: Programming Language :: Python :: 3
17
15
  Classifier: Programming Language :: Python :: 3.12
18
- Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Operating System :: OS Independent
19
17
  Classifier: Topic :: Software Development :: Libraries
20
- Requires-Dist: aiogram (>=3.15.0,<4.0.0)
21
- Requires-Dist: aiohttp-socks (>=0.9.1,<0.10.0)
22
- Requires-Dist: alembic (>=1.14.0,<2.0.0)
18
+ Requires-Dist: aiogram (>=3.17.0,<4.0.0)
19
+ Requires-Dist: aiohttp-socks (>=0.10.1,<0.11.0)
20
+ Requires-Dist: alembic (>=1.14.1,<2.0.0)
23
21
  Requires-Dist: asyncpg (>=0.30.0,<0.31.0)
24
- Requires-Dist: asyncssh (>=2.18.0,<3.0.0)
22
+ Requires-Dist: asyncssh (>=2.19.0,<3.0.0)
25
23
  Requires-Dist: bs4 (>=0.0.2,<0.0.3)
26
- Requires-Dist: cachetools (>=5.5.0,<6.0.0)
24
+ Requires-Dist: cachetools (>=5.5.1,<6.0.0)
27
25
  Requires-Dist: celery (>=5.4.0,<6.0.0)
28
26
  Requires-Dist: cryptography (>=44.0.0,<45.0.0)
29
27
  Requires-Dist: email-validator (>=2.2.0,<3.0.0)
30
- Requires-Dist: emoji (>=2.14.0,<3.0.0)
31
- Requires-Dist: fastapi (>=0.115.5,<0.116.0)
28
+ Requires-Dist: emoji (>=2.14.1,<3.0.0)
29
+ Requires-Dist: fastapi (>=0.115.6,<0.116.0)
32
30
  Requires-Dist: gunicorn (>=23.0.0,<24.0.0)
33
31
  Requires-Dist: itsdangerous (>=2.2.0,<3.0.0)
34
32
  Requires-Dist: jupyter (>=1.1.1,<2.0.0)
35
33
  Requires-Dist: matplotlib (>=3.10.0,<4.0.0)
36
- Requires-Dist: openai (>=1.55.3,<2.0.0)
34
+ Requires-Dist: openai (>=1.59.9,<2.0.0)
37
35
  Requires-Dist: openpyxl (>=3.1.5,<4.0.0)
38
36
  Requires-Dist: pandas (>=2.2.3,<3.0.0)
39
37
  Requires-Dist: paramiko (>=3.5.0,<4.0.0)
40
- Requires-Dist: poetry (>=1.8.5,<2.0.0)
38
+ Requires-Dist: poetry (>=2.0.1,<3.0.0)
41
39
  Requires-Dist: psycopg2-binary (>=2.9.10,<3.0.0)
42
- Requires-Dist: pydantic-settings (>=2.6.1,<3.0.0)
40
+ Requires-Dist: pydantic (>=2.10.5,<3.0.0)
41
+ Requires-Dist: pydantic-settings (>=2.7.1,<3.0.0)
43
42
  Requires-Dist: pyjwt (>=2.10.1,<3.0.0)
44
43
  Requires-Dist: pymongo (>=4.10.1,<5.0.0)
45
44
  Requires-Dist: pytz (>=2024.2,<2025.0)
46
45
  Requires-Dist: pyzabbix (>=1.3.1,<2.0.0)
47
- Requires-Dist: redis (>=5.2.0,<6.0.0)
48
46
  Requires-Dist: requests[socks] (>=2.32.3,<3.0.0)
49
47
  Requires-Dist: sqladmin (>=0.20.1,<0.21.0)
50
- Requires-Dist: sqlalchemy (>=2.0.36,<3.0.0)
51
- Requires-Dist: twine (>=6.0.1,<7.0.0)
52
- Requires-Dist: uvicorn (>=0.32.1,<0.33.0)
48
+ Requires-Dist: sqlalchemy (>=2.0.37,<3.0.0)
49
+ Requires-Dist: twine (>=6.1.0,<7.0.0)
50
+ Requires-Dist: uvicorn (>=0.34.0,<0.35.0)
51
+ Project-URL: Documentation, https://github.com/ARPAKIT-Company/arpakitlib
52
+ Project-URL: Homepage, https://github.com/ARPAKIT-Company/arpakitlib
53
53
  Project-URL: Repository, https://github.com/ARPAKIT-Company/arpakitlib
54
54
  Description-Content-Type: text/markdown
55
55
 
@@ -80,6 +80,13 @@ poetry add arpakitlib
80
80
  pip install arpakitlib
81
81
  ```
82
82
 
83
+ ### Init template
84
+
85
+ ```
86
+ # poetry run arpakitlib -c help
87
+ poetry run arpakitlib -c init_arpakit_project_template -project_dirpath ./ -overwrite_if_exists true -project_name ... -sql_db_port ... (optional) -api_port ... (optional) -ignore_paths_startswith ... (optional) -only_paths_startswith ...(optional)
88
+ ```
89
+
83
90
  ---
84
91
 
85
92
  ### Links
@@ -25,6 +25,13 @@ poetry add arpakitlib
25
25
  pip install arpakitlib
26
26
  ```
27
27
 
28
+ ### Init template
29
+
30
+ ```
31
+ # poetry run arpakitlib -c help
32
+ poetry run arpakitlib -c init_arpakit_project_template -project_dirpath ./ -overwrite_if_exists true -project_name ... -sql_db_port ... (optional) -api_port ... (optional) -ignore_paths_startswith ... (optional) -only_paths_startswith ...(optional)
33
+ ```
34
+
28
35
  ---
29
36
 
30
37
  ### Links
@@ -1,6 +1,4 @@
1
- # {PROJECT_NAME}
2
-
3
- ...
1
+ # {{PROJECT_NAME}}
4
2
 
5
3
  ## ❤️ Made by ARPAKIT Company ❤️
6
4
 
@@ -1,4 +1,6 @@
1
1
  # mode_type=
2
+ # project_name=
3
+ # sql_db_port=
2
4
  # sql_db_url=
3
5
  # sql_db_echo=
4
6
  # api_init_sql_db_at_start=
@@ -9,6 +11,8 @@
9
11
  # api_start_scheduled_operation_creator_worker=
10
12
  # api_port=
11
13
  # api_correct_api_key=
14
+ # api_correct_token=
15
+ # api_enable_admin1=
12
16
  # var_dirname=
13
17
  # var_dirpath=
14
18
  # log_filename=
@@ -20,3 +24,4 @@
20
24
  # dump_dirname=
21
25
  # dump_dirpath=
22
26
  # local_timezone=
27
+ # admin1_secret_key=
@@ -0,0 +1,4 @@
1
+ cd ..
2
+ docker rm {{PROJECT_NAME}}_postgres
3
+ docker run --name {{PROJECT_NAME}}_postgres -d -p {{SQL_DB_PORT}}:5432 -e POSTGRES_USER={{PROJECT_NAME}} -e POSTGRES_PASSWORD={{PROJECT_NAME}} -e POSTGRES_DB={{PROJECT_NAME}} postgres:16 -c max_connections=100
4
+ docker start {{PROJECT_NAME}}_postgres
@@ -0,0 +1,2 @@
1
+ cd ..
2
+ docker start {{PROJECT_NAME}}_postgres
@@ -0,0 +1,2 @@
1
+ cd ..
2
+ docker stop {{PROJECT_NAME}}_postgres
@@ -1,7 +1,7 @@
1
1
  cd ..
2
2
 
3
3
  git remote remove arpakit_company_github_1
4
- git remote add arpakit_company_github_1 git@github.com:ARPAKIT-Company/{PROJECT_NAME}.git
4
+ git remote add arpakit_company_github_1 git@github.com:ARPAKIT-Company/{{PROJECT_NAME}}.git
5
5
 
6
6
  git remote remove arpakit_company_gitlab_1
7
- git remote add arpakit_company_gitlab_1 git@gitlab.com:ARPAKIT-Company/{PROJECT_NAME}.git
7
+ git remote add arpakit_company_gitlab_1 git@gitlab.com:ARPAKIT-Company/{{PROJECT_NAME}}.git
@@ -0,0 +1,7 @@
1
+ cd ..
2
+
3
+ git remote remove arpakit_github_1
4
+ git remote add arpakit_github_1 git@github.com:arpakit/{{PROJECT_NAME}}.git
5
+
6
+ git remote remove arpakit_gitlab_1
7
+ git remote add arpakit_gitlab_1 git@gitlab.com:arpakit/{{PROJECT_NAME}}.git
@@ -1,6 +1,6 @@
1
- def command():
1
+ def __hello_world():
2
2
  print("Hello world")
3
3
 
4
4
 
5
5
  if __name__ == '__main__':
6
- command()
6
+ __hello_world()
@@ -1,10 +1,10 @@
1
1
  from arpakitlib.ar_json_util import safely_transfer_str_to_json_obj_to_json_str
2
2
 
3
3
 
4
- def command():
4
+ def __json_beautify():
5
5
  s = input("JSON:\n")
6
6
  print(safely_transfer_str_to_json_obj_to_json_str(s))
7
7
 
8
8
 
9
9
  if __name__ == '__main__':
10
- command()
10
+ __json_beautify()
@@ -0,0 +1,2 @@
1
+ cd ..
2
+ poetry config --list
@@ -0,0 +1,2 @@
1
+ cd ..
2
+ poetry self add poetry-plugin-export
@@ -0,0 +1,2 @@
1
+ cd ..
2
+ poetry show arpakitlib --latest
@@ -0,0 +1,14 @@
1
+ import asyncio
2
+
3
+
4
+ def _sandbox():
5
+ pass
6
+
7
+
8
+ async def _async_sandbox():
9
+ pass
10
+
11
+
12
+ if __name__ == '__main__':
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -0,0 +1,14 @@
1
+ import asyncio
2
+
3
+
4
+ def _sandbox():
5
+ pass
6
+
7
+
8
+ async def _async_sandbox():
9
+ pass
10
+
11
+
12
+ if __name__ == '__main__':
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -0,0 +1,14 @@
1
+ import asyncio
2
+
3
+
4
+ def _sandbox():
5
+ pass
6
+
7
+
8
+ async def _async_sandbox():
9
+ pass
10
+
11
+
12
+ if __name__ == '__main__':
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -0,0 +1,14 @@
1
+ import asyncio
2
+
3
+
4
+ def _sandbox():
5
+ pass
6
+
7
+
8
+ async def _async_sandbox():
9
+ pass
10
+
11
+
12
+ if __name__ == '__main__':
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -0,0 +1,14 @@
1
+ import asyncio
2
+
3
+
4
+ def _sandbox():
5
+ pass
6
+
7
+
8
+ async def _async_sandbox():
9
+ pass
10
+
11
+
12
+ if __name__ == '__main__':
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -0,0 +1,14 @@
1
+ import asyncio
2
+
3
+
4
+ def _sandbox():
5
+ pass
6
+
7
+
8
+ async def _async_sandbox():
9
+ pass
10
+
11
+
12
+ if __name__ == '__main__':
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -0,0 +1,14 @@
1
+ import asyncio
2
+
3
+
4
+ def _sandbox():
5
+ pass
6
+
7
+
8
+ async def _async_sandbox():
9
+ pass
10
+
11
+
12
+ if __name__ == '__main__':
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -4,3 +4,5 @@ from arpakitlib.ar_additional_model_util import BaseAM
4
4
  class ExampleAM(BaseAM):
5
5
  name: str = "Name"
6
6
  surname: str = "Surname"
7
+
8
+ # ...
@@ -0,0 +1,26 @@
1
+ from fastapi import FastAPI
2
+ from sqladmin import Admin
3
+
4
+ from src.admin1.admin_auth import AdminAuth
5
+ from src.admin1.model_view import MODEL_VIEWS
6
+ from src.api.transmitted_api_data import TransmittedAPIData
7
+ from src.core.settings import get_cached_settings
8
+
9
+
10
+ def add_admin1_in_app(*, app: FastAPI) -> FastAPI:
11
+ transmitted_api_data: TransmittedAPIData = app.state.transmitted_api_data
12
+
13
+ authentication_backend = AdminAuth()
14
+
15
+ admin = Admin(
16
+ app=app,
17
+ engine=transmitted_api_data.sqlalchemy_db.engine,
18
+ base_url="/admin1",
19
+ authentication_backend=authentication_backend,
20
+ title=get_cached_settings().project_name
21
+ )
22
+
23
+ for model_view in MODEL_VIEWS:
24
+ admin.add_model_view(model_view)
25
+
26
+ return app
@@ -0,0 +1,29 @@
1
+ import logging
2
+
3
+ from sqladmin.authentication import AuthenticationBackend
4
+ from starlette.requests import Request
5
+
6
+ from src.core.settings import get_cached_settings
7
+
8
+
9
+ class AdminAuth(AuthenticationBackend):
10
+ def __init__(self):
11
+ self._logger = logging.getLogger(self.__class__.__name__)
12
+ super().__init__(secret_key=get_cached_settings().admin1_secret_key)
13
+
14
+ async def login(self, request: Request) -> bool:
15
+ # ...
16
+ # form = await request.form()
17
+ # request.session.update(...)
18
+ # ...
19
+ return True
20
+
21
+ async def logout(self, request: Request) -> bool:
22
+ request.session.clear()
23
+ return True
24
+
25
+ async def authenticate(self, request: Request) -> bool:
26
+ # ...
27
+ # request.session.get("...")
28
+ # ...
29
+ return True
@@ -0,0 +1,19 @@
1
+ from sqladmin import ModelView
2
+
3
+
4
+ class BaseModelView(ModelView):
5
+ can_create = True
6
+ can_edit = True
7
+ can_delete = True
8
+ can_view_details = True
9
+ can_export = True
10
+ page_size = 50
11
+ page_size_options = [25, 50, 100, 200]
12
+ save_as = True
13
+ save_as_continue = True
14
+ export_types = ["xlsx", "csv", "json"]
15
+
16
+
17
+ MODEL_VIEWS = []
18
+
19
+ # ...
@@ -3,15 +3,15 @@ import uvicorn
3
3
  from src.core.settings import get_cached_settings
4
4
 
5
5
 
6
- def start_api_for_dev(*, reload: bool = False):
6
+ def _start_api_for_dev_with_reload():
7
7
  uvicorn.run(
8
8
  "src.api.asgi:app",
9
9
  port=get_cached_settings().api_port,
10
10
  host="localhost",
11
11
  workers=1,
12
- reload=reload
12
+ reload=True
13
13
  )
14
14
 
15
15
 
16
16
  if __name__ == '__main__':
17
- start_api_for_dev(reload=False)
17
+ _start_api_for_dev_with_reload()
@@ -0,0 +1,17 @@
1
+ import uvicorn
2
+
3
+ from src.core.settings import get_cached_settings
4
+
5
+
6
+ def _start_api_for_dev_without_reload():
7
+ uvicorn.run(
8
+ "src.api.asgi:app",
9
+ port=get_cached_settings().api_port,
10
+ host="localhost",
11
+ workers=1,
12
+ reload=False
13
+ )
14
+
15
+
16
+ if __name__ == '__main__':
17
+ _start_api_for_dev_without_reload()
@@ -0,0 +1,77 @@
1
+ from fastapi import FastAPI
2
+
3
+ from arpakitlib.ar_fastapi_util import create_fastapi_app, \
4
+ create_handle_exception, create_story_log_before_response_in_handle_exception
5
+ from arpakitlib.ar_sqlalchemy_util import SQLAlchemyDB
6
+ from arpakitlib.ar_type_util import raise_for_type
7
+ from src.api.event import StartupAPIEvent, ShutdownAPIEvent
8
+ from src.api.router.main_router import main_api_router
9
+ from src.api.transmitted_api_data import TransmittedAPIData
10
+ from src.core.const import ProjectPaths
11
+ from src.core.settings import get_cached_settings
12
+ from src.core.util import setup_logging, get_cached_media_file_storage_in_dir, get_cached_cache_file_storage_in_dir, \
13
+ get_cached_dump_file_storage_in_dir
14
+ from src.db.util import get_cached_sqlalchemy_db
15
+
16
+
17
+ def create_api_app() -> FastAPI:
18
+ setup_logging()
19
+
20
+ settings = get_cached_settings()
21
+
22
+ sqlalchemy_db = get_cached_sqlalchemy_db() if settings.sql_db_url is not None else None
23
+
24
+ transmitted_api_data = TransmittedAPIData(
25
+ settings=settings,
26
+ sqlalchemy_db=sqlalchemy_db,
27
+ media_file_storage_in_dir=get_cached_media_file_storage_in_dir(),
28
+ cache_file_storage_in_dir=get_cached_cache_file_storage_in_dir(),
29
+ dump_file_storage_in_dir=get_cached_dump_file_storage_in_dir()
30
+ )
31
+
32
+ funcs_before_response = []
33
+
34
+ if settings.api_create_story_log_before_response_in_handle_exception:
35
+ raise_for_type(sqlalchemy_db, SQLAlchemyDB)
36
+ funcs_before_response.append(
37
+ create_story_log_before_response_in_handle_exception(
38
+ sqlalchemy_db=sqlalchemy_db,
39
+ ignore_api_error_code_not_found=True
40
+ )
41
+ )
42
+
43
+ handle_exception = create_handle_exception(
44
+ funcs_before_response=funcs_before_response,
45
+ async_funcs_after_response=[]
46
+ )
47
+
48
+ startup_api_events = []
49
+
50
+ startup_api_events.append(StartupAPIEvent(transmitted_api_data=transmitted_api_data))
51
+
52
+ shutdown_api_events = []
53
+
54
+ shutdown_api_events.append(ShutdownAPIEvent(transmitted_api_data=transmitted_api_data))
55
+
56
+ api_app = create_fastapi_app(
57
+ title=settings.api_title.strip(),
58
+ description=settings.api_description.strip(),
59
+ log_filepath=settings.log_filepath,
60
+ handle_exception_=handle_exception,
61
+ startup_api_events=startup_api_events,
62
+ shutdown_api_events=shutdown_api_events,
63
+ transmitted_api_data=transmitted_api_data,
64
+ main_api_router=main_api_router,
65
+ media_dirpath=settings.media_dirpath,
66
+ static_dirpath=ProjectPaths.static_dirpath
67
+ )
68
+
69
+ if settings.api_enable_admin1:
70
+ from src.admin1.add_admin_in_app import add_admin1_in_app
71
+ add_admin1_in_app(app=api_app)
72
+
73
+ return api_app
74
+
75
+
76
+ if __name__ == '__main__':
77
+ create_api_app()
@@ -0,0 +1,63 @@
1
+ from arpakitlib.ar_base_worker_util import safe_run_worker_in_background, SafeRunInBackgroundModes
2
+ from arpakitlib.ar_fastapi_util import BaseStartupAPIEvent, BaseShutdownAPIEvent
3
+ from arpakitlib.ar_operation_execution_util import OperationExecutorWorker, ScheduledOperationCreatorWorker
4
+ from arpakitlib.ar_sqlalchemy_util import SQLAlchemyDB
5
+ from arpakitlib.ar_type_util import raise_for_type
6
+ from src.api.transmitted_api_data import TransmittedAPIData
7
+ from src.operation_execution.operation_executor import OperationExecutor
8
+ from src.operation_execution.scheduled_operations import SCHEDULED_OPERATIONS
9
+
10
+
11
+ class StartupAPIEvent(BaseStartupAPIEvent):
12
+ def __init__(self, transmitted_api_data: TransmittedAPIData):
13
+ super().__init__()
14
+ self.transmitted_api_data = transmitted_api_data
15
+
16
+ async def async_on_startup(self, *args, **kwargs):
17
+ self._logger.info("start")
18
+
19
+ if self.transmitted_api_data.media_file_storage_in_dir is not None:
20
+ self.transmitted_api_data.media_file_storage_in_dir.init()
21
+
22
+ if self.transmitted_api_data.cache_file_storage_in_dir is not None:
23
+ self.transmitted_api_data.cache_file_storage_in_dir.init()
24
+
25
+ if self.transmitted_api_data.dump_file_storage_in_dir is not None:
26
+ self.transmitted_api_data.dump_file_storage_in_dir.init()
27
+
28
+ if self.transmitted_api_data.settings.api_init_sql_db_at_start:
29
+ raise_for_type(self.transmitted_api_data.sqlalchemy_db, SQLAlchemyDB)
30
+ self.transmitted_api_data.sqlalchemy_db.init()
31
+
32
+ if self.transmitted_api_data.settings.api_start_operation_executor_worker:
33
+ raise_for_type(self.transmitted_api_data.sqlalchemy_db, SQLAlchemyDB)
34
+ _ = safe_run_worker_in_background(
35
+ worker=OperationExecutorWorker(
36
+ sqlalchemy_db=self.transmitted_api_data.sqlalchemy_db,
37
+ operation_executor=OperationExecutor(sqlalchemy_db=self.transmitted_api_data.sqlalchemy_db),
38
+ filter_operation_types=None
39
+ ),
40
+ mode=SafeRunInBackgroundModes.thread
41
+ )
42
+
43
+ if self.transmitted_api_data.settings.api_start_scheduled_operation_creator_worker:
44
+ raise_for_type(self.transmitted_api_data.sqlalchemy_db, SQLAlchemyDB)
45
+ _ = safe_run_worker_in_background(
46
+ worker=ScheduledOperationCreatorWorker(
47
+ sqlalchemy_db=self.transmitted_api_data.sqlalchemy_db,
48
+ scheduled_operations=SCHEDULED_OPERATIONS
49
+ ),
50
+ mode=SafeRunInBackgroundModes.async_task
51
+ )
52
+
53
+ self._logger.info("finish")
54
+
55
+
56
+ class ShutdownAPIEvent(BaseShutdownAPIEvent):
57
+ def __init__(self, transmitted_api_data: TransmittedAPIData):
58
+ super().__init__()
59
+ self.transmitted_api_data = transmitted_api_data
60
+
61
+ async def async_on_shutdown(self, *args, **kwargs):
62
+ self._logger.info("start")
63
+ self._logger.info("finish")
@@ -3,6 +3,9 @@ from fastapi import APIRouter
3
3
  from src.api.router.v1.main_router import main_v1_api_router
4
4
 
5
5
  main_api_router = APIRouter()
6
+
7
+ # API Error Info
8
+
6
9
  main_api_router.include_router(
7
10
  router=main_v1_api_router,
8
11
  prefix="/api/v1"
@@ -12,6 +12,7 @@ api_router = APIRouter()
12
12
 
13
13
  @api_router.get(
14
14
  "",
15
+ name="Get API Error info",
15
16
  response_model=APIErrorInfoSO | ErrorSO,
16
17
  status_code=status.HTTP_200_OK
17
18
  )
@@ -4,8 +4,12 @@ from src.api.router.v1 import get_api_error_info
4
4
 
5
5
  main_v1_api_router = APIRouter()
6
6
 
7
+ # API Error Info
8
+
7
9
  main_v1_api_router.include_router(
8
10
  router=get_api_error_info.api_router,
9
11
  prefix="/get_api_error_info",
10
12
  tags=["API Error Info"]
11
13
  )
14
+
15
+ # ...
@@ -4,3 +4,5 @@ from arpakitlib.ar_fastapi_util import BaseSO
4
4
  class APIErrorInfoSO(BaseSO):
5
5
  api_error_codes: list[str] = []
6
6
  api_error_specification_codes: list[str] = []
7
+
8
+ # ...
@@ -1,4 +1,5 @@
1
1
  from arpakitlib.ar_fastapi_util import BaseTransmittedAPIData
2
+ from arpakitlib.ar_file_storage_in_dir_util import FileStorageInDir
2
3
  from arpakitlib.ar_sqlalchemy_util import SQLAlchemyDB
3
4
 
4
5
  from src.core.settings import Settings
@@ -7,3 +8,8 @@ from src.core.settings import Settings
7
8
  class TransmittedAPIData(BaseTransmittedAPIData):
8
9
  settings: Settings
9
10
  sqlalchemy_db: SQLAlchemyDB | None = None
11
+ media_file_storage_in_dir: FileStorageInDir | None = None
12
+ cache_file_storage_in_dir: FileStorageInDir | None = None
13
+ dump_file_storage_in_dir: FileStorageInDir | None = None
14
+
15
+ # ...
@@ -0,0 +1,15 @@
1
+ import logging
2
+
3
+ from src.core.util import setup_logging
4
+
5
+ _logger = logging.getLogger(__name__)
6
+
7
+
8
+ def hello_world() -> str:
9
+ _logger.info("hello world")
10
+ return "Hello world"
11
+
12
+
13
+ if __name__ == '__main__':
14
+ setup_logging()
15
+ hello_world()