arpakitlib 1.7.231__tar.gz → 1.7.233__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 (207) hide show
  1. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/PKG-INFO +1 -1
  2. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/db/util.py +9 -2
  3. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_arpakit_schedule_uust_api_client_util.py +127 -93
  4. arpakitlib-1.7.233/arpakitlib/ar_arpakit_schedule_uust_site_util.py +68 -0
  5. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_dream_ai_api_client_util.py +3 -2
  6. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_util.py +39 -4
  7. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_http_request_util.py +9 -9
  8. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_schedule_uust_api_client_util.py +3 -1
  9. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_sqlalchemy_util.py +3 -7
  10. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_yookassa_api_client_util.py +6 -0
  11. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/pyproject.toml +1 -1
  12. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/LICENSE +0 -0
  13. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/README.md +0 -0
  14. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/__init__.py +0 -0
  15. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/.gitignore +0 -0
  16. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/.python-version +0 -0
  17. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/ARPAKITLIB +0 -0
  18. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/LICENSE +0 -0
  19. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/README.md +0 -0
  20. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/example.env +0 -0
  21. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/__init__.py +0 -0
  22. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/docker_ps.sh +0 -0
  23. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/docker_ps_a.sh +0 -0
  24. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/docker_run_postgres.sh +0 -0
  25. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/docker_start_postgres.sh +0 -0
  26. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/docker_stop_postgres.sh +0 -0
  27. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_branch.sh +0 -0
  28. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_commit.sh +0 -0
  29. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_company_github_1.sh +0 -0
  30. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_company_gitlab_1.sh +0 -0
  31. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_github_1.sh +0 -0
  32. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_gitlab_1.sh +0 -0
  33. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_remote_v.sh +0 -0
  34. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_set_arpakit_company_origin.sh +0 -0
  35. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_set_arpakit_origin.sh +0 -0
  36. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/git_status.sh +0 -0
  37. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/hello_world.py +0 -0
  38. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/json_beautify.py +0 -0
  39. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/note/__init__.py +0 -0
  40. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/note/note_1.txt +0 -0
  41. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/note/note_2.txt +0 -0
  42. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/note/note_3.txt +0 -0
  43. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/note/note_4.txt +0 -0
  44. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/note/note_5.txt +0 -0
  45. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_add_plugin_export.sh +0 -0
  46. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_check.sh +0 -0
  47. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_clear_cache.sh +0 -0
  48. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_config.sh +0 -0
  49. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_config_virtualenvs_in_project_true.sh +0 -0
  50. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_install.sh +0 -0
  51. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_lock.sh +0 -0
  52. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_remove_and_add_arpakitlib.sh +0 -0
  53. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_self_add_plugin_export.sh +0 -0
  54. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_show.sh +0 -0
  55. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_show_arpakitlib.sh +0 -0
  56. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_update.sh +0 -0
  57. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/poetry_update_arpakitlib.sh +0 -0
  58. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/__init__.py +0 -0
  59. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py +0 -0
  60. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py +0 -0
  61. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py +0 -0
  62. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py +0 -0
  63. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py +0 -0
  64. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py +0 -0
  65. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_7.py +0 -0
  66. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_8.sh +0 -0
  67. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_9.sh +0 -0
  68. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/resource/__init__.py +0 -0
  69. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/resource/static/__init__.py +0 -0
  70. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/resource/static/healthcheck +0 -0
  71. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/resource/static/helloworld +0 -0
  72. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/__init__.py +0 -0
  73. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/additional_model/__init__.py +0 -0
  74. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py +0 -0
  75. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/admin1/__init__.py +0 -0
  76. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py +0 -0
  77. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/admin1/admin_auth.py +0 -0
  78. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/admin1/model_view.py +0 -0
  79. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/__init__.py +0 -0
  80. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/_start_api_with_reload.py +0 -0
  81. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/_start_api_without_reload.py +0 -0
  82. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/asgi.py +0 -0
  83. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/auth.py +0 -0
  84. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/const.py +0 -0
  85. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/create_api_app.py +0 -0
  86. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/event.py +0 -0
  87. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/router/__init__.py +0 -0
  88. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/router/main_router.py +0 -0
  89. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/router/v1/__init__.py +0 -0
  90. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py +0 -0
  91. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py +0 -0
  92. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/schema/__init__.py +0 -0
  93. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/schema/v1/__init__.py +0 -0
  94. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py +0 -0
  95. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py +0 -0
  96. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py +0 -0
  97. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/api/util.py +0 -0
  98. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/business_service/__init__.py +0 -0
  99. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/business_service/hello_world.py +0 -0
  100. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/core/__init__.py +0 -0
  101. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/core/_check_logging.py +0 -0
  102. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/core/_check_settings.py +0 -0
  103. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/core/_generate_settings_env_example.py +0 -0
  104. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/core/const.py +0 -0
  105. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/core/settings.py +0 -0
  106. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/core/util.py +0 -0
  107. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/db/__init__.py +0 -0
  108. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/db/_check_conn_sqlalchemy_db.py +0 -0
  109. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/db/_init_sqlalchemy_db.py +0 -0
  110. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/db/_reinit_sqlalchemy_db.py +0 -0
  111. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/db/const.py +0 -0
  112. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/db/sqlalchemy_model.py +0 -0
  113. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/operation_execution/__init__.py +0 -0
  114. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/operation_execution/_remove_operations.py +0 -0
  115. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/operation_execution/_start_operation_executor_worker.py +0 -0
  116. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/operation_execution/_start_scheduled_operation_creator_worker.py +0 -0
  117. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/operation_execution/const.py +0 -0
  118. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py +0 -0
  119. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py +0 -0
  120. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/operation_execution/util.py +0 -0
  121. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/test_data/__init__.py +0 -0
  122. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py +0 -0
  123. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py +0 -0
  124. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py +0 -0
  125. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py +0 -0
  126. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py +0 -0
  127. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/__init__.py +0 -0
  128. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/event.py +0 -0
  129. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/filter/__init__.py +0 -0
  130. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/filter/not_prod_mode.py +0 -0
  131. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/filter/prod_mode.py +0 -0
  132. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/handler/__init__.py +0 -0
  133. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/handler/cmd_arpakitlib.py +0 -0
  134. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/handler/cmd_healthcheck.py +0 -0
  135. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/kb/__init__.py +0 -0
  136. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/kb/inline_/__init__.py +0 -0
  137. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/kb/inline_/callback.py +0 -0
  138. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/kb/inline_/common.py +0 -0
  139. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/kb/static_/__init__.py +0 -0
  140. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/kb/static_/common.py +0 -0
  141. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/router/__init__.py +0 -0
  142. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/start_tg_bot.py +0 -0
  143. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/tg_bot/transmitted_tg_data.py +0 -0
  144. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/_arpakit_project_template/src/util/__init__.py +0 -0
  145. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_additional_model_util.py +0 -0
  146. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_aiogram_util.py +0 -0
  147. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_api_key_util.py +0 -0
  148. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_arpakit_lib_module_util.py +0 -0
  149. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_arpakit_project_template_util.py +0 -0
  150. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_arpakitlib_cli_util.py +0 -0
  151. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_base64_util.py +0 -0
  152. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_base_worker_util.py +0 -0
  153. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_cache_file_util.py +0 -0
  154. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_class_util.py +0 -0
  155. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_datetime_util.py +0 -0
  156. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_dict_util.py +0 -0
  157. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_encrypt_decrypt_util.py +0 -0
  158. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_enumeration_util.py +0 -0
  159. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_exception_util.py +0 -0
  160. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/healthcheck +0 -0
  161. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/redoc/redoc.standalone.js +0 -0
  162. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/favicon-16x16.png +0 -0
  163. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/favicon-32x32.png +0 -0
  164. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/index.css +0 -0
  165. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/index.html +0 -0
  166. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/oauth2-redirect.html +0 -0
  167. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-initializer.js +0 -0
  168. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-bundle.js +0 -0
  169. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-bundle.js.map +0 -0
  170. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle-core.js +0 -0
  171. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -0
  172. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle.js +0 -0
  173. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
  174. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-standalone-preset.js +0 -0
  175. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
  176. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css +0 -0
  177. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css.map +0 -0
  178. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js +0 -0
  179. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js.map +0 -0
  180. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_file_storage_in_dir_util.py +0 -0
  181. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_file_util.py +0 -0
  182. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_func_util.py +0 -0
  183. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_hash_util.py +0 -0
  184. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_ip_util.py +0 -0
  185. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_json_db_util.py +0 -0
  186. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_json_util.py +0 -0
  187. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_jwt_util.py +0 -0
  188. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_list_of_dicts_to_xlsx.py +0 -0
  189. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_list_util.py +0 -0
  190. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_logging_util.py +0 -0
  191. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_mongodb_util.py +0 -0
  192. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_need_type_util.py +0 -0
  193. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_openai_api_client_util.py +0 -0
  194. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_operation_execution_util.py +0 -0
  195. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_parse_command.py +0 -0
  196. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_postgresql_util.py +0 -0
  197. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_rat_func_util.py +0 -0
  198. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_retry_func_util.py +0 -0
  199. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_run_cmd_util.py +0 -0
  200. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_settings_util.py +0 -0
  201. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_sleep_util.py +0 -0
  202. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_sqladmin_util.py +0 -0
  203. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_sqlalchemy_model_util.py +0 -0
  204. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_ssh_runner_util.py +0 -0
  205. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_str_util.py +0 -0
  206. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_type_util.py +0 -0
  207. {arpakitlib-1.7.231 → arpakitlib-1.7.233}/arpakitlib/ar_zabbix_api_client_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.7.231
3
+ Version: 1.7.233
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
@@ -1,18 +1,25 @@
1
1
  import importlib
2
2
  from contextlib import suppress
3
3
  from functools import lru_cache
4
+ from typing import Any
4
5
 
5
6
  from arpakitlib.ar_sqlalchemy_util import SQLAlchemyDB
6
7
  from src.core.settings import get_cached_settings
7
8
 
8
9
 
9
- def create_sqlalchemy_db() -> SQLAlchemyDB:
10
+ def get_base_dbm() -> Any:
10
11
  with suppress(Exception):
11
12
  importlib.import_module("src.db.sqlalchemy_model")
12
13
 
14
+ from arpakitlib.ar_sqlalchemy_model_util import BaseDBM
15
+ return BaseDBM
16
+
17
+
18
+ def create_sqlalchemy_db() -> SQLAlchemyDB:
13
19
  return SQLAlchemyDB(
14
20
  db_url=get_cached_settings().sql_db_url,
15
- db_echo=get_cached_settings().sql_db_echo
21
+ db_echo=get_cached_settings().sql_db_echo,
22
+ base_declarative_base=get_base_dbm()
16
23
  )
17
24
 
18
25
 
@@ -3,8 +3,8 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import asyncio
6
+ import datetime as dt
6
7
  import logging
7
- from datetime import timedelta, datetime, time
8
8
  from typing import Any
9
9
  from urllib.parse import urljoin
10
10
 
@@ -45,33 +45,33 @@ class Months(Enumeration):
45
45
 
46
46
 
47
47
  class BaseAPIModel(BaseModel):
48
- model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, from_attributes=True)
48
+ model_config = ConfigDict(extra="ignore", arbitrary_types_allowed=True, from_attributes=True)
49
49
 
50
50
 
51
51
  class CurrentSemesterAPIModel(BaseAPIModel):
52
52
  id: int
53
53
  long_id: str
54
- creation_dt: datetime
54
+ creation_dt: dt.datetime
55
55
  entity_type: str
56
- actualization_dt: datetime
56
+ actualization_dt: dt.datetime
57
57
  value: str
58
58
 
59
59
 
60
60
  class CurrentWeekAPIModel(BaseAPIModel):
61
61
  id: int
62
62
  long_id: str
63
- creation_dt: datetime
63
+ creation_dt: dt.datetime
64
64
  entity_type: str
65
- actualization_dt: datetime
65
+ actualization_dt: dt.datetime
66
66
  value: int
67
67
 
68
68
 
69
69
  class GroupAPIModel(BaseAPIModel):
70
70
  id: int
71
71
  long_id: str
72
- creation_dt: datetime
72
+ creation_dt: dt.datetime
73
73
  entity_type: str
74
- actualization_dt: datetime
74
+ actualization_dt: dt.datetime
75
75
  uust_api_id: int
76
76
  title: str
77
77
  faculty: str | None
@@ -83,9 +83,9 @@ class GroupAPIModel(BaseAPIModel):
83
83
  class TeacherAPIModel(BaseAPIModel):
84
84
  id: int
85
85
  long_id: str
86
- creation_dt: datetime
86
+ creation_dt: dt.datetime
87
87
  entity_type: str
88
- actualization_dt: datetime
88
+ actualization_dt: dt.datetime
89
89
  uust_api_id: int
90
90
  name: str | None
91
91
  surname: str | None
@@ -103,9 +103,9 @@ class TeacherAPIModel(BaseAPIModel):
103
103
  class GroupLessonAPIModel(BaseAPIModel):
104
104
  id: int
105
105
  long_id: str
106
- creation_dt: datetime
106
+ creation_dt: dt.datetime
107
107
  entity_type: str
108
- actualization_dt: datetime
108
+ actualization_dt: dt.datetime
109
109
  uust_api_id: int
110
110
  type: str
111
111
  title: str
@@ -113,8 +113,8 @@ class GroupLessonAPIModel(BaseAPIModel):
113
113
  weekday: int
114
114
  comment: str | None
115
115
  time_title: str | None
116
- time_start: time | None
117
- time_end: time | None
116
+ time_start: dt.time | None
117
+ time_end: dt.time | None
118
118
  numbers: list[int]
119
119
  location: str | None
120
120
  teacher_uust_api_id: int | None
@@ -141,9 +141,9 @@ class GroupLessonAPIModel(BaseAPIModel):
141
141
  class TeacherLessonAPIModel(BaseAPIModel):
142
142
  id: int
143
143
  long_id: str
144
- creation_dt: datetime
144
+ creation_dt: dt.datetime
145
145
  entity_type: str
146
- actualization_dt: datetime
146
+ actualization_dt: dt.datetime
147
147
  uust_api_id: int
148
148
  type: str
149
149
  title: str
@@ -151,8 +151,8 @@ class TeacherLessonAPIModel(BaseAPIModel):
151
151
  weekday: int
152
152
  comment: str | None
153
153
  time_title: str | None
154
- time_start: time | None
155
- time_end: time | None
154
+ time_start: dt.time | None
155
+ time_end: dt.time | None
156
156
  numbers: list[int]
157
157
  location: str | None
158
158
  group_uust_api_ids: list[int]
@@ -181,13 +181,25 @@ class WeatherInUfaAPIModel(BaseAPIModel):
181
181
  temperature_feels_like: float
182
182
  description: str
183
183
  wind_speed: float
184
- sunrise_dt: datetime
185
- sunset_dt: datetime
184
+ sunrise_dt: dt.datetime
185
+ sunset_dt: dt.datetime
186
186
  has_rain: bool
187
187
  has_snow: bool
188
188
  data: dict
189
189
 
190
190
 
191
+ class DatetimeAPIModel(BaseAPIModel):
192
+ date: dt.date
193
+ datetime: dt.datetime | None = None
194
+ year: int
195
+ month: int
196
+ day: int
197
+ hour: int | None = None
198
+ minute: int | None = None
199
+ second: int | None = None
200
+ microsecond: int | None = None
201
+
202
+
191
203
  class ARPAKITScheduleUUSTAPIClient:
192
204
  def __init__(
193
205
  self,
@@ -195,7 +207,7 @@ class ARPAKITScheduleUUSTAPIClient:
195
207
  base_url: str = "https://api.schedule-uust.arpakit.com/api/v1",
196
208
  api_key: str | None = "viewer",
197
209
  use_cache: bool = False,
198
- cache_ttl: timedelta | None = timedelta(minutes=10)
210
+ cache_ttl: dt.timedelta | None = dt.timedelta(minutes=10)
199
211
  ):
200
212
  self._logger = logging.getLogger(__name__)
201
213
  self.api_key = api_key
@@ -236,7 +248,9 @@ class ARPAKITScheduleUUSTAPIClient:
236
248
  return response
237
249
 
238
250
  async def check_auth(self) -> dict[str, Any]:
239
- response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "check_auth"))
251
+ response = await self._async_make_http_request(
252
+ method="GET", url=urljoin(self.base_url, "check_auth")
253
+ )
240
254
  json_data = await response.json()
241
255
  return json_data
242
256
 
@@ -265,13 +279,24 @@ class ARPAKITScheduleUUSTAPIClient:
265
279
  json_data = await response.json()
266
280
  return WeatherInUfaAPIModel.model_validate(json_data)
267
281
 
282
+ async def get_now_datetime_in_ufa(self) -> DatetimeAPIModel:
283
+ response = await self._async_make_http_request(
284
+ method="GET", url=urljoin(self.base_url, "get_now_datetime_in_ufa")
285
+ )
286
+ json_data = await response.json()
287
+ return DatetimeAPIModel.model_validate(json_data)
288
+
268
289
  async def get_log_file_content(self) -> str | None:
269
- response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "get_log_file"))
290
+ response = await self._async_make_http_request(
291
+ method="GET", url=urljoin(self.base_url, "get_log_file")
292
+ )
270
293
  text_data = await response.text()
271
294
  return text_data
272
295
 
273
296
  async def get_groups(self) -> list[GroupAPIModel]:
274
- response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "get_groups"))
297
+ response = await self._async_make_http_request(
298
+ method="GET", url=urljoin(self.base_url, "get_groups")
299
+ )
275
300
  json_data = await response.json()
276
301
  return [GroupAPIModel.model_validate(d) for d in json_data]
277
302
 
@@ -283,8 +308,8 @@ class ARPAKITScheduleUUSTAPIClient:
283
308
  params["filter_id"] = filter_id
284
309
  if filter_uust_api_id is not None:
285
310
  params["filter_uust_api_id"] = filter_uust_api_id
286
- response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "get_group"),
287
- params=params)
311
+ response = await self._async_make_http_request(
312
+ method="GET", url=urljoin(self.base_url, "get_group"), params=params)
288
313
  json_data = await response.json()
289
314
  if json_data is None:
290
315
  return None
@@ -293,13 +318,16 @@ class ARPAKITScheduleUUSTAPIClient:
293
318
  async def find_groups(
294
319
  self, *, q: str
295
320
  ) -> list[GroupAPIModel]:
296
- response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "find_groups"),
297
- params={"q": q.strip()})
321
+ response = await self._async_make_http_request(
322
+ method="GET", url=urljoin(self.base_url, "find_groups"), params={"q": q.strip()}
323
+ )
298
324
  json_data = await response.json()
299
325
  return [GroupAPIModel.model_validate(d) for d in json_data]
300
326
 
301
327
  async def get_teachers(self) -> list[TeacherAPIModel]:
302
- response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "get_teachers"))
328
+ response = await self._async_make_http_request(
329
+ method="GET", url=urljoin(self.base_url, "get_teachers")
330
+ )
303
331
  json_data = await response.json()
304
332
  return [TeacherAPIModel.model_validate(d) for d in json_data]
305
333
 
@@ -311,8 +339,9 @@ class ARPAKITScheduleUUSTAPIClient:
311
339
  params["filter_id"] = filter_id
312
340
  if filter_uust_api_id is not None:
313
341
  params["filter_uust_api_id"] = filter_uust_api_id
314
- response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "get_teacher"),
315
- params=params)
342
+ response = await self._async_make_http_request(
343
+ method="GET", url=urljoin(self.base_url, "get_teacher"), params=params
344
+ )
316
345
  json_data = await response.json()
317
346
  if json_data is None:
318
347
  return None
@@ -321,24 +350,26 @@ class ARPAKITScheduleUUSTAPIClient:
321
350
  async def find_teachers(
322
351
  self, *, q: str
323
352
  ) -> list[TeacherAPIModel]:
324
- response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "find_teachers"),
325
- params={"q": q.strip()})
353
+ response = await self._async_make_http_request(
354
+ method="GET", url=urljoin(self.base_url, "find_teachers"), params={"q": q.strip()}
355
+ )
326
356
  json_data = await response.json()
327
357
  return [TeacherAPIModel.model_validate(d) for d in json_data]
328
358
 
329
359
  async def find_any(
330
360
  self, *, q: str
331
361
  ) -> list[TeacherAPIModel | GroupLessonAPIModel]:
332
- response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "find_any"),
333
- params={"q": q.strip()})
362
+ response = await self._async_make_http_request(
363
+ method="GET", url=urljoin(self.base_url, "find_any"), params={"q": q.strip()}
364
+ )
334
365
  json_data = await response.json()
335
366
 
336
367
  results = []
337
- for i in json_data:
338
- if i.get("entity_type") == "group":
339
- results.append(GroupAPIModel.model_validate(i))
340
- elif i.get("entity_type") == "teacher":
341
- results.append(TeacherAPIModel.model_validate(i))
368
+ for d in json_data:
369
+ if d["entity_type"] == "group":
370
+ results.append(GroupAPIModel.model_validate(d))
371
+ elif d["entity_type"] == "teacher":
372
+ results.append(TeacherAPIModel.model_validate(d))
342
373
  else:
343
374
  pass
344
375
  return results
@@ -391,59 +422,62 @@ async def __async_example():
391
422
  print(f"get_weather_in_ufa")
392
423
  print(safely_transfer_obj_to_json_str((await client.get_weather_in_ufa()).model_dump()))
393
424
 
394
- print(f"get_current_week")
395
- print(safely_transfer_obj_to_json_str((await client.get_current_week()).model_dump()))
396
-
397
- print(f"get_current_semester")
398
- print(safely_transfer_obj_to_json_str((await client.get_current_semester()).model_dump()))
399
-
400
- # Group
401
- print(f"get_groups")
402
- print(safely_transfer_obj_to_json_str((await client.get_groups())))
403
-
404
- print(f"get_group")
405
- if await client.get_group(filter_id=25285, filter_uust_api_id=6674):
406
- print(safely_transfer_obj_to_json_str(
407
- (await client.get_group(filter_id=25285, filter_uust_api_id=6674)).model_dump()))
408
- else:
409
- print("Group is none")
410
-
411
- print(f"find_groups")
412
- print(safely_transfer_obj_to_json_str((await client.find_groups(q="ПИ-427Б"))))
413
-
414
- # Teacher
415
- print(f"get_teachers")
416
- print(safely_transfer_obj_to_json_str((await client.get_teachers())))
417
-
418
- print(f"get_teacher")
419
- if await client.get_teacher(filter_id=16975, filter_uust_api_id=112978):
420
- print(safely_transfer_obj_to_json_str(
421
- (await client.get_teacher(filter_id=16975, filter_uust_api_id=112978)).model_dump()))
422
- else:
423
- print("Teacher is none")
424
-
425
- print(f"find_teachers")
426
- print(safely_transfer_obj_to_json_str((await client.find_teachers(q="Казанцев"))))
427
-
428
- # Group Lesson
429
- print(f"get_group_lessons")
430
- if await client.get_group_lessons(filter_group_id=25285, filter_group_uust_api_id=6674):
431
- print(safely_transfer_obj_to_json_str((await client.get_group_lessons(filter_group_id=25285,
432
- filter_group_uust_api_id=6674))))
433
- else:
434
- print("Group lessons is none")
435
-
436
- # Teacher Lesson
437
- print(f"get_teacher_lessons")
438
- if await client.get_teacher_lessons(filter_teacher_id=16975, filter_teacher_uust_api_id=112978):
439
- print(safely_transfer_obj_to_json_str((await client.get_teacher_lessons(filter_teacher_id=16975,
440
- filter_teacher_uust_api_id=112978))))
441
- else:
442
- print("Teacher lessons is none")
443
-
444
- # Find Any
445
- print(f"find_any")
446
- print(safely_transfer_obj_to_json_str((await client.find_any(q="ПИ"))))
425
+ print(f"get_now_datetime_in_ufa")
426
+ print(safely_transfer_obj_to_json_str((await client.get_now_datetime_in_ufa()).model_dump()))
427
+
428
+ # print(f"get_current_week")
429
+ # print(safely_transfer_obj_to_json_str((await client.get_current_week()).model_dump()))
430
+ #
431
+ # print(f"get_current_semester")
432
+ # print(safely_transfer_obj_to_json_str((await client.get_current_semester()).model_dump()))
433
+ #
434
+ # # Group
435
+ # print(f"get_groups")
436
+ # print(safely_transfer_obj_to_json_str((await client.get_groups())))
437
+ #
438
+ # print(f"get_group")
439
+ # if await client.get_group(filter_id=25285, filter_uust_api_id=6674):
440
+ # print(safely_transfer_obj_to_json_str(
441
+ # (await client.get_group(filter_id=25285, filter_uust_api_id=6674)).model_dump()))
442
+ # else:
443
+ # print("Group is none")
444
+ #
445
+ # print(f"find_groups")
446
+ # print(safely_transfer_obj_to_json_str((await client.find_groups(q="ПИ-427Б"))))
447
+ #
448
+ # # Teacher
449
+ # print(f"get_teachers")
450
+ # print(safely_transfer_obj_to_json_str((await client.get_teachers())))
451
+ #
452
+ # print(f"get_teacher")
453
+ # if await client.get_teacher(filter_id=16975, filter_uust_api_id=112978):
454
+ # print(safely_transfer_obj_to_json_str(
455
+ # (await client.get_teacher(filter_id=16975, filter_uust_api_id=112978)).model_dump()))
456
+ # else:
457
+ # print("Teacher is none")
458
+ #
459
+ # print(f"find_teachers")
460
+ # print(safely_transfer_obj_to_json_str((await client.find_teachers(q="Казанцев"))))
461
+ #
462
+ # # Group Lesson
463
+ # print(f"get_group_lessons")
464
+ # if await client.get_group_lessons(filter_group_id=25285, filter_group_uust_api_id=6674):
465
+ # print(safely_transfer_obj_to_json_str((await client.get_group_lessons(filter_group_id=25285,
466
+ # filter_group_uust_api_id=6674))))
467
+ # else:
468
+ # print("Group lessons is none")
469
+ #
470
+ # # Teacher Lesson
471
+ # print(f"get_teacher_lessons")
472
+ # if await client.get_teacher_lessons(filter_teacher_id=16975, filter_teacher_uust_api_id=112978):
473
+ # print(safely_transfer_obj_to_json_str((await client.get_teacher_lessons(filter_teacher_id=16975,
474
+ # filter_teacher_uust_api_id=112978))))
475
+ # else:
476
+ # print("Teacher lessons is none")
477
+ #
478
+ # # Find Any
479
+ # print(f"find_any")
480
+ # print(safely_transfer_obj_to_json_str((await client.find_any(q="ПИ"))))
447
481
 
448
482
 
449
483
  if __name__ == '__main__':
@@ -0,0 +1,68 @@
1
+ # arpakit
2
+
3
+ from urllib.parse import urlencode, urljoin
4
+
5
+ from arpakitlib.ar_type_util import raise_for_type
6
+
7
+ _ARPAKIT_LIB_MODULE_VERSION = "3.0"
8
+
9
+
10
+ def generate_arpakit_schedule_uust_site_url(
11
+ *,
12
+ base_url: str = "https://schedule-uust.arpakit.com",
13
+ entity_type: str | None = None,
14
+ uust_api_id: int | None = None,
15
+ session: bool | None = None,
16
+ week: int | None = None,
17
+ theme: str | None = None
18
+ ) -> str:
19
+ raise_for_type(base_url, str)
20
+
21
+ params = {}
22
+
23
+ if entity_type is not None: # group/teacher
24
+ raise_for_type(entity_type, str)
25
+ params["entity_type"] = entity_type
26
+
27
+ if uust_api_id is not None: # uust_api_id of group/teacher
28
+ raise_for_type(uust_api_id, int)
29
+ params["uust_api_id"] = uust_api_id
30
+
31
+ if session is not None: # true/false
32
+ raise_for_type(session, bool)
33
+ if session:
34
+ params["session"] = "true"
35
+ else:
36
+ params["session"] = "false"
37
+
38
+ if week is not None:
39
+ raise_for_type(week, int)
40
+ params["week"] = week
41
+
42
+ if theme is not None: # dark/light
43
+ raise_for_type(theme, str)
44
+ params["theme"] = theme
45
+
46
+ if params:
47
+ res = urljoin(base_url, f"schedule?{urlencode(params)}")
48
+ else:
49
+ res = base_url
50
+
51
+ return res
52
+
53
+
54
+ def __example():
55
+ base_url = "https://schedule-uust.arpakit.com"
56
+ url = generate_arpakit_schedule_uust_site_url(
57
+ base_url=base_url,
58
+ entity_type="group",
59
+ uust_api_id=6662,
60
+ session=True,
61
+ week=23,
62
+ theme="dark"
63
+ )
64
+ print(url)
65
+
66
+
67
+ if __name__ == '__main__':
68
+ __example()
@@ -15,7 +15,7 @@ _ARPAKIT_LIB_MODULE_VERSION = "3.0"
15
15
 
16
16
 
17
17
  class BaseAPIModel(BaseModel):
18
- model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, from_attributes=True)
18
+ model_config = ConfigDict(extra="ignore", arbitrary_types_allowed=True, from_attributes=True)
19
19
 
20
20
 
21
21
  class GenerateImageFromNumberResApiModel(BaseAPIModel):
@@ -76,7 +76,8 @@ class DREAMAIAPIClient:
76
76
 
77
77
  async def generate_image_from_number(self, *, number: int) -> GenerateImageFromNumberResApiModel:
78
78
  response = await self._async_make_http_request(
79
- method="GET", url=urljoin(self.base_url, "generate_image_from_number"),
79
+ method="GET",
80
+ url=urljoin(self.base_url, "generate_image_from_number"),
80
81
  params={"number": number}
81
82
  )
82
83
  json_data = await response.json()
@@ -3,12 +3,12 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import asyncio
6
+ import datetime as dt
6
7
  import logging
7
8
  import os.path
8
9
  import pathlib
9
10
  import traceback
10
11
  from contextlib import suppress
11
- from datetime import datetime
12
12
  from typing import Any, Callable
13
13
 
14
14
  import fastapi.exceptions
@@ -65,7 +65,7 @@ class BaseSO(BaseSchema):
65
65
  class SimpleSO(BaseSO):
66
66
  id: int
67
67
  long_id: str
68
- creation_dt: datetime
68
+ creation_dt: dt.datetime
69
69
 
70
70
 
71
71
  class BaseAPIErrorCodes(Enumeration):
@@ -91,6 +91,41 @@ class RawDataSO(BaseSO):
91
91
  data: dict[str, Any] = {}
92
92
 
93
93
 
94
+ class DatetimeSO(BaseSO):
95
+ date: dt.date
96
+ datetime: dt.datetime | None = None
97
+ year: int
98
+ month: int
99
+ day: int
100
+ hour: int | None = None
101
+ minute: int | None = None
102
+ second: int | None = None
103
+ microsecond: int | None = None
104
+
105
+ @classmethod
106
+ def from_datetime(cls, datetime_: dt.datetime):
107
+ return cls(
108
+ date=datetime_.date(),
109
+ datetime=datetime_,
110
+ year=datetime_.year,
111
+ month=datetime_.month,
112
+ day=datetime_.day,
113
+ hour=datetime_.hour,
114
+ minute=datetime_.minute,
115
+ second=datetime_.second,
116
+ microsecond=datetime_.microsecond
117
+ )
118
+
119
+ @classmethod
120
+ def from_date(cls, date_: dt.date):
121
+ return cls(
122
+ date=date_,
123
+ year=date_.year,
124
+ month=date_.month,
125
+ day=date_.day
126
+ )
127
+
128
+
94
129
  class StoryLogSO(SimpleSO):
95
130
  level: str
96
131
  title: str | None
@@ -102,8 +137,8 @@ class StoryLogSO(SimpleSO):
102
137
 
103
138
 
104
139
  class OperationSO(SimpleSO):
105
- execution_start_dt: datetime | None
106
- execution_finish_dt: datetime | None
140
+ execution_start_dt: dt.datetime | None
141
+ execution_finish_dt: dt.datetime | None
107
142
  status: str
108
143
  type: str
109
144
  input_data: dict[str, Any]
@@ -26,7 +26,7 @@ def sync_make_http_request(
26
26
  max_tries_: int = 9,
27
27
  proxy_url_: str | None = None,
28
28
  raise_for_status_: bool = False,
29
- not_raise_for_statuses: list[int] | None = None,
29
+ not_raise_for_statuses_: list[int] | None = None,
30
30
  timeout_: timedelta | float = timedelta(seconds=15).total_seconds(),
31
31
  enable_logging_: bool = False,
32
32
  **kwargs
@@ -61,9 +61,9 @@ def sync_make_http_request(
61
61
  try:
62
62
  response = requests.request(**kwargs)
63
63
  if raise_for_status_:
64
- if not_raise_for_statuses and response.status_code in not_raise_for_statuses:
64
+ if not_raise_for_statuses_ and response.status_code in not_raise_for_statuses_:
65
65
  if enable_logging_:
66
- _logger.info(f"ignored status {response.status_code} for http {method} {url} {params}")
66
+ _logger.info(f"ignored status {response.status_code} {method} {url} {params}")
67
67
  else:
68
68
  response.raise_for_status()
69
69
  if enable_logging_:
@@ -72,7 +72,7 @@ def sync_make_http_request(
72
72
  except Exception as exception:
73
73
  if enable_logging_:
74
74
  _logger.warning(
75
- f"{tries_counter}/{max_tries_}. retry {method} {url} {params}, exception={exception}"
75
+ f"{tries_counter}/{max_tries_}, bad try {method} {url} {params}, exception={exception}"
76
76
  )
77
77
  if tries_counter >= max_tries_:
78
78
  raise exception
@@ -89,7 +89,7 @@ async def async_make_http_request(
89
89
  max_tries_: int = 9,
90
90
  proxy_url_: str | None = None,
91
91
  raise_for_status_: bool = False,
92
- not_raise_for_statuses: list[int] | None = None,
92
+ not_raise_for_statuses_: list[int] | None = None,
93
93
  timeout_: timedelta | None = timedelta(seconds=15),
94
94
  enable_logging_: bool = False,
95
95
  **kwargs
@@ -120,21 +120,21 @@ async def async_make_http_request(
120
120
  async with aiohttp.ClientSession(connector=proxy_connector) as session:
121
121
  async with session.request(**kwargs) as response:
122
122
  if raise_for_status_:
123
- if not_raise_for_statuses and response.status in not_raise_for_statuses:
123
+ if not_raise_for_statuses_ and response.status in not_raise_for_statuses_:
124
124
  if enable_logging_:
125
125
  _logger.info(
126
- f"ignored status {response.status} for http {method} {url} {params}"
126
+ f"ignored status {response.status} {method} {url} {params}"
127
127
  )
128
128
  else:
129
129
  response.raise_for_status()
130
130
  await response.read()
131
131
  if enable_logging_:
132
- _logger.info(f"good try http {method} {url} {params}")
132
+ _logger.info(f"good try {method} {url} {params}")
133
133
  return response
134
134
  except Exception as exception:
135
135
  if enable_logging_:
136
136
  _logger.warning(
137
- f"{tries_counter}/{max_tries_}. retry http {method} {url} {params}, exception={exception}"
137
+ f"{tries_counter}/{max_tries_}, bad try {method} {url} {params}, exception={exception}"
138
138
  )
139
139
  if tries_counter >= max_tries_:
140
140
  raise exception
@@ -3,7 +3,7 @@
3
3
  import asyncio
4
4
  import hashlib
5
5
  import logging
6
- from datetime import datetime
6
+ from datetime import datetime, timedelta
7
7
  from typing import Any
8
8
 
9
9
  import pytz
@@ -85,8 +85,10 @@ class ScheduleUUSTAPIClient:
85
85
  url=url,
86
86
  headers=self.headers,
87
87
  params=combine_dicts(params, self.auth_params()),
88
+ max_tries_=9,
88
89
  proxy_url_=self.api_proxy_url,
89
90
  raise_for_status_=True,
91
+ timeout_=timedelta(seconds=15),
90
92
  **kwargs
91
93
  )
92
94
  json_data = await response.json()