arpakitlib 1.6.90__tar.gz → 1.6.92__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.
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/PKG-INFO +1 -1
- arpakitlib-1.6.92/arpakitlib/_arpakit_project_template/manage/check_logging.py +13 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_aiogram_util.py +10 -9
- arpakitlib-1.6.92/arpakitlib/ar_dream_ai_api_client_util.py +92 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_util.py +23 -7
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_logging_util.py +3 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_schedule_uust_api_client_util.py +2 -2
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/pyproject.toml +1 -1
- arpakitlib-1.6.90/arpakitlib/ar_dream_ai_api_client_util.py +0 -122
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/LICENSE +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/NOTICE +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/README.md +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/.env_example +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/.gitignore +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/.python-version +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/AUTHOR.md +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/LICENSE +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/NOTICE +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/README.md +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/beutify_json.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/check_settings.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/docker_ps.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/generate_env_example.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/git_commit.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_company_github_1.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/git_push_arpakit_company_gitlab_1.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/git_remote_v.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/git_set_arpakit_company_origin.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/git_status.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/hello_world.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_1.txt +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_2.txt +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_3.txt +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_4.txt +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_5.txt +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_add_plugin_export.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_check.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_clear_cache.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_config_virtualenvs_in_project_true.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_generate_requirements.txt.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_install.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_lock.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_remove_and_add_arpakitlib.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_show.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_update.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_update_arpakitlib.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_7.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_8.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_9.sh +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/pyproject.toml.example +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/resource/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/resource/static/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/additional_model/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/business_service/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/core/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/core/const.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/core/settings.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/core/util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/test_data/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/util/__init__.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_additional_model_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_arpakit_lib_module_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_arpakit_schedule_uust_api_client_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_arpakitlib_cli.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_base64_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_base_worker_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_cache_file_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_datetime_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_dict_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_encrypt_decrypt_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_enumeration_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/redoc/redoc.standalone.js +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/favicon-16x16.png +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/favicon-32x32.png +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/index.css +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/index.html +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/oauth2-redirect.html +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-initializer.js +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-bundle.js +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-bundle.js.map +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle-core.js +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle-core.js.map +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle.js +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-es-bundle.js.map +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-standalone-preset.js +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-standalone-preset.js.map +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css.map +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js.map +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_file_storage_in_dir_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_file_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_hash_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_hello_world.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_http_request_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_ip_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_json_db_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_json_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_jwt_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_list_of_dicts_to_xlsx.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_list_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_mongodb_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_need_type_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_openai_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_operation_execution_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_parse_command.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_postgresql_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_project_template_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_run_cmd_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_settings_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_sleep_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_sqlalchemy_model_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_sqlalchemy_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_ssh_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_str_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_type_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_yookassa_api_client_util.py +0 -0
- {arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_zabbix_util.py +0 -0
@@ -326,19 +326,20 @@ class BaseTransmittedTgBotData(BaseModel):
|
|
326
326
|
model_config = ConfigDict(extra="ignore", arbitrary_types_allowed=True, from_attributes=True)
|
327
327
|
|
328
328
|
|
329
|
-
def create_aiogram_tg_bot(*, tg_bot_token: str, tg_bot_proxy_url: str | None = None) -> Bot:
|
330
|
-
|
329
|
+
def create_aiogram_tg_bot(*, tg_bot_token: str, tg_bot_proxy_url: str | None = None, **kwargs) -> Bot:
|
330
|
+
kwargs["token"] = tg_bot_token
|
331
|
+
|
331
332
|
if tg_bot_proxy_url:
|
332
|
-
session = AiohttpSession(proxy=tg_bot_proxy_url)
|
333
|
-
|
334
|
-
|
335
|
-
default=DefaultBotProperties(
|
333
|
+
kwargs["session"] = AiohttpSession(proxy=tg_bot_proxy_url)
|
334
|
+
|
335
|
+
if kwargs.get("default") is None:
|
336
|
+
kwargs["default"] = DefaultBotProperties(
|
336
337
|
parse_mode=ParseMode.HTML,
|
337
338
|
disable_notification=False,
|
338
339
|
link_preview_is_disabled=True
|
339
|
-
)
|
340
|
-
|
341
|
-
)
|
340
|
+
)
|
341
|
+
|
342
|
+
tg_bot = Bot(**kwargs)
|
342
343
|
|
343
344
|
return tg_bot
|
344
345
|
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# arpakit
|
2
|
+
|
3
|
+
import asyncio
|
4
|
+
import logging
|
5
|
+
from typing import Any
|
6
|
+
from urllib.parse import urljoin
|
7
|
+
|
8
|
+
from aiohttp import ClientResponse
|
9
|
+
from pydantic import ConfigDict, BaseModel
|
10
|
+
|
11
|
+
from arpakitlib.ar_base64_util import convert_base64_string_to_bytes
|
12
|
+
from arpakitlib.ar_http_request_util import async_make_http_request
|
13
|
+
|
14
|
+
_ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
15
|
+
|
16
|
+
|
17
|
+
class BaseAPIModel(BaseModel):
|
18
|
+
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, from_attributes=True)
|
19
|
+
|
20
|
+
|
21
|
+
class GenerateImageFromNumberResApiModel(BaseAPIModel):
|
22
|
+
image_filename: str
|
23
|
+
image_url: str
|
24
|
+
image_base64: str
|
25
|
+
|
26
|
+
def save_file(self, filepath: str):
|
27
|
+
with open(filepath, mode="wb") as f:
|
28
|
+
f.write(convert_base64_string_to_bytes(base64_string=self.image_base64))
|
29
|
+
return filepath
|
30
|
+
|
31
|
+
|
32
|
+
class DreamAIAPIClient:
|
33
|
+
def __init__(
|
34
|
+
self,
|
35
|
+
*,
|
36
|
+
base_url: str = "https://api.dream_ai.arpakit.com/api/v1",
|
37
|
+
api_key: str | None = "1"
|
38
|
+
):
|
39
|
+
self._logger = logging.getLogger(__name__)
|
40
|
+
self.api_key = api_key
|
41
|
+
base_url = base_url.strip()
|
42
|
+
if not base_url.endswith("/"):
|
43
|
+
base_url += "/"
|
44
|
+
self.base_url = base_url
|
45
|
+
self.headers = {"Content-Type": "application/json"}
|
46
|
+
if api_key is not None:
|
47
|
+
self.headers.update({"apikey": api_key})
|
48
|
+
|
49
|
+
async def _async_make_http_request(
|
50
|
+
self, *, method: str = "GET", url: str, params: dict[str, Any] | None = None
|
51
|
+
) -> ClientResponse:
|
52
|
+
response = await async_make_http_request(
|
53
|
+
method=method,
|
54
|
+
url=url,
|
55
|
+
headers=self.headers,
|
56
|
+
params=params
|
57
|
+
)
|
58
|
+
response.raise_for_status()
|
59
|
+
return response
|
60
|
+
|
61
|
+
async def healthcheck(self) -> bool:
|
62
|
+
response = await self._async_make_http_request(method="GET", url=urljoin(self.base_url, "healthcheck"))
|
63
|
+
json_data = await response.json()
|
64
|
+
return json_data["data"]["healthcheck"] == "healthcheck"
|
65
|
+
|
66
|
+
async def is_healthcheck_good(self) -> bool:
|
67
|
+
try:
|
68
|
+
return await self.healthcheck()
|
69
|
+
except Exception as exception:
|
70
|
+
self._logger.error(exception)
|
71
|
+
return False
|
72
|
+
|
73
|
+
async def generate_image_from_number(self, *, number: int) -> GenerateImageFromNumberResApiModel:
|
74
|
+
response = await self._async_make_http_request(
|
75
|
+
method="GET", url=urljoin(self.base_url, "generate_image_from_number"),
|
76
|
+
params={"number": number}
|
77
|
+
)
|
78
|
+
json_data = await response.json()
|
79
|
+
return GenerateImageFromNumberResApiModel.model_validate(json_data)
|
80
|
+
|
81
|
+
|
82
|
+
def __example():
|
83
|
+
pass
|
84
|
+
|
85
|
+
|
86
|
+
async def __async_example():
|
87
|
+
pass
|
88
|
+
|
89
|
+
|
90
|
+
if __name__ == '__main__':
|
91
|
+
__example()
|
92
|
+
asyncio.run(__async_example())
|
@@ -27,6 +27,7 @@ from starlette.staticfiles import StaticFiles
|
|
27
27
|
from arpakitlib.ar_base_worker_util import BaseWorker
|
28
28
|
from arpakitlib.ar_dict_util import combine_dicts
|
29
29
|
from arpakitlib.ar_enumeration_util import Enumeration
|
30
|
+
from arpakitlib.ar_file_storage_in_dir_util import FileStorageInDir
|
30
31
|
from arpakitlib.ar_json_util import safely_transfer_to_json_str_to_json_obj
|
31
32
|
from arpakitlib.ar_logging_util import setup_normal_logging
|
32
33
|
from arpakitlib.ar_sqlalchemy_model_util import StoryLogDBM
|
@@ -396,18 +397,29 @@ class InitSqlalchemyDBStartupAPIEvent(BaseStartupAPIEvent):
|
|
396
397
|
super().__init__()
|
397
398
|
self.sqlalchemy_db = sqlalchemy_db
|
398
399
|
|
399
|
-
def async_on_startup(self, *args, **kwargs):
|
400
|
+
async def async_on_startup(self, *args, **kwargs):
|
400
401
|
self.sqlalchemy_db.init()
|
401
402
|
|
402
403
|
|
403
404
|
class SafeRunWorkerStartupAPIEvent(BaseStartupAPIEvent):
|
404
|
-
def __init__(self,
|
405
|
+
def __init__(self, workers: list[BaseWorker], safe_run_in_background_mode: str):
|
405
406
|
super().__init__()
|
406
|
-
self.
|
407
|
+
self.workers = workers
|
407
408
|
self.safe_run_in_background_mode = safe_run_in_background_mode
|
408
409
|
|
409
|
-
def async_on_startup(self, *args, **kwargs):
|
410
|
-
|
410
|
+
async def async_on_startup(self, *args, **kwargs):
|
411
|
+
for worker in self.workers:
|
412
|
+
_ = worker.safe_run_in_background(safe_run_in_background_mode=self.safe_run_in_background_mode)
|
413
|
+
|
414
|
+
|
415
|
+
class InitFileStoragesInDir(BaseStartupAPIEvent):
|
416
|
+
def __init__(self, file_storages_in_dir: list[FileStorageInDir]):
|
417
|
+
super().__init__()
|
418
|
+
self.file_storages_in_dir = file_storages_in_dir
|
419
|
+
|
420
|
+
async def async_on_startup(self, *args, **kwargs):
|
421
|
+
for file_storage_in_dir in self.file_storages_in_dir:
|
422
|
+
file_storage_in_dir.init()
|
411
423
|
|
412
424
|
|
413
425
|
class BaseTransmittedAPIData(BaseModel):
|
@@ -422,7 +434,7 @@ class BaseAPIAuthData(BaseModel):
|
|
422
434
|
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, from_attributes=True)
|
423
435
|
|
424
436
|
require_api_key_string: bool = False
|
425
|
-
require_token_string: bool =
|
437
|
+
require_token_string: bool = False
|
426
438
|
|
427
439
|
token_string: str | None = None
|
428
440
|
api_key_string: str | None = None
|
@@ -567,7 +579,8 @@ def create_fastapi_app(
|
|
567
579
|
shutdown_api_events: list[BaseShutdownAPIEvent] | None = None,
|
568
580
|
transmitted_api_data: BaseTransmittedAPIData = BaseTransmittedAPIData(),
|
569
581
|
main_api_router: APIRouter = simple_api_router_for_testing(),
|
570
|
-
contact: dict[str, Any] | None = None
|
582
|
+
contact: dict[str, Any] | None = None,
|
583
|
+
media_dirpath: str | None = None
|
571
584
|
):
|
572
585
|
if contact is None:
|
573
586
|
contact = _DEFAULT_CONTACT
|
@@ -591,6 +604,9 @@ def create_fastapi_app(
|
|
591
604
|
contact=contact
|
592
605
|
)
|
593
606
|
|
607
|
+
if media_dirpath is not None:
|
608
|
+
app.mount("/media", StaticFiles(directory=media_dirpath), name="media")
|
609
|
+
|
594
610
|
app.state.transmitted_api_data = transmitted_api_data
|
595
611
|
|
596
612
|
add_cors_to_app(app=app)
|
@@ -8,6 +8,9 @@ _ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
|
8
8
|
|
9
9
|
|
10
10
|
def init_log_file(*, log_filepath: str):
|
11
|
+
directory = os.path.dirname(log_filepath)
|
12
|
+
if directory and not os.path.exists(directory):
|
13
|
+
os.makedirs(directory, exist_ok=True)
|
11
14
|
if not os.path.exists(path=log_filepath):
|
12
15
|
with open(file=log_filepath, mode="w") as file:
|
13
16
|
file.write("")
|
@@ -76,11 +76,11 @@ class ScheduleUUSTAPIClient:
|
|
76
76
|
self,
|
77
77
|
*,
|
78
78
|
url: str,
|
79
|
-
params: dict | None = None
|
79
|
+
params: dict[str, Any] | None = None
|
80
80
|
) -> dict[str, Any]:
|
81
81
|
response = await async_make_http_request(
|
82
|
-
url=url,
|
83
82
|
method="GET",
|
83
|
+
url=url,
|
84
84
|
params=combine_dicts(params, self.auth_params()),
|
85
85
|
proxy_url_=self.api_proxy_url,
|
86
86
|
max_tries_=9,
|
@@ -1,122 +0,0 @@
|
|
1
|
-
# arpakit
|
2
|
-
|
3
|
-
import asyncio
|
4
|
-
import logging
|
5
|
-
from datetime import timedelta
|
6
|
-
from urllib.parse import urljoin
|
7
|
-
|
8
|
-
import aiohttp
|
9
|
-
from aiohttp import ClientResponseError, ClientResponse, ClientTimeout
|
10
|
-
from pydantic import ConfigDict, BaseModel
|
11
|
-
|
12
|
-
from arpakitlib.ar_base64_util import convert_base64_string_to_bytes
|
13
|
-
from arpakitlib.ar_json_util import safely_transfer_to_json_str
|
14
|
-
from arpakitlib.ar_sleep_util import async_safe_sleep
|
15
|
-
|
16
|
-
_ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
17
|
-
|
18
|
-
|
19
|
-
class BaseAPIModel(BaseModel):
|
20
|
-
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, from_attributes=True)
|
21
|
-
|
22
|
-
def simple_json(self) -> str:
|
23
|
-
return safely_transfer_to_json_str(self.model_dump(mode="json"))
|
24
|
-
|
25
|
-
|
26
|
-
class GenerateImageFromNumberResApiModel(BaseAPIModel):
|
27
|
-
image_filename: str
|
28
|
-
image_url: str
|
29
|
-
image_base64: str
|
30
|
-
|
31
|
-
def save_file(self, filepath: str):
|
32
|
-
with open(filepath, mode="wb") as f:
|
33
|
-
f.write(convert_base64_string_to_bytes(base64_string=self.image_base64))
|
34
|
-
return filepath
|
35
|
-
|
36
|
-
|
37
|
-
class DreamAIAPIClient:
|
38
|
-
def __init__(
|
39
|
-
self,
|
40
|
-
*,
|
41
|
-
base_url: str = "https://api.dream_ai.arpakit.com/api/v1",
|
42
|
-
api_key: str | None = None
|
43
|
-
):
|
44
|
-
self._logger = logging.getLogger(__name__)
|
45
|
-
self.api_key = api_key
|
46
|
-
base_url = base_url.strip()
|
47
|
-
if not base_url.endswith("/"):
|
48
|
-
base_url += "/"
|
49
|
-
self.base_url = base_url
|
50
|
-
self.headers = {"Content-Type": "application/json"}
|
51
|
-
if api_key is not None:
|
52
|
-
self.headers.update({"apikey": api_key})
|
53
|
-
|
54
|
-
async def _async_make_request(self, *, method: str = "GET", url: str, **kwargs) -> ClientResponse:
|
55
|
-
max_tries = 7
|
56
|
-
tries = 0
|
57
|
-
|
58
|
-
kwargs["url"] = url
|
59
|
-
kwargs["method"] = method
|
60
|
-
kwargs["timeout"] = ClientTimeout(total=timedelta(seconds=15).total_seconds())
|
61
|
-
kwargs["headers"] = self.headers
|
62
|
-
|
63
|
-
while True:
|
64
|
-
tries += 1
|
65
|
-
self._logger.info(f"{method} {url}")
|
66
|
-
try:
|
67
|
-
async with aiohttp.ClientSession() as session:
|
68
|
-
async with session.request(**kwargs) as response:
|
69
|
-
await response.read()
|
70
|
-
return response
|
71
|
-
except Exception as err:
|
72
|
-
self._logger.warning(f"{tries}/{max_tries} {err} {method} {url}")
|
73
|
-
if tries >= max_tries:
|
74
|
-
raise err
|
75
|
-
await async_safe_sleep(timedelta(seconds=0.1).total_seconds())
|
76
|
-
continue
|
77
|
-
|
78
|
-
async def healthcheck(self) -> bool:
|
79
|
-
response = await self._async_make_request(method="GET", url=urljoin(self.base_url, "healthcheck"))
|
80
|
-
response.raise_for_status()
|
81
|
-
json_data = await response.json()
|
82
|
-
return json_data["data"]["healthcheck"]
|
83
|
-
|
84
|
-
async def is_healthcheck_good(self) -> bool:
|
85
|
-
try:
|
86
|
-
return await self.healthcheck()
|
87
|
-
except ClientResponseError:
|
88
|
-
return False
|
89
|
-
|
90
|
-
async def auth_healthcheck(self) -> bool:
|
91
|
-
response = await self._async_make_request(method="GET", url=urljoin(self.base_url, "auth_healthcheck"))
|
92
|
-
response.raise_for_status()
|
93
|
-
json_data = await response.json()
|
94
|
-
return json_data["data"]["auth_healthcheck"]
|
95
|
-
|
96
|
-
async def is_auth_healthcheck_good(self) -> bool:
|
97
|
-
try:
|
98
|
-
return await self.auth_healthcheck()
|
99
|
-
except ClientResponseError:
|
100
|
-
return False
|
101
|
-
|
102
|
-
async def generate_image_from_number(self, *, number: int) -> GenerateImageFromNumberResApiModel:
|
103
|
-
response = await self._async_make_request(
|
104
|
-
method="GET", url=urljoin(self.base_url, "generate_image_from_number"),
|
105
|
-
params={"number": number}
|
106
|
-
)
|
107
|
-
response.raise_for_status()
|
108
|
-
json_data = await response.json()
|
109
|
-
return GenerateImageFromNumberResApiModel.model_validate(json_data)
|
110
|
-
|
111
|
-
|
112
|
-
def __example():
|
113
|
-
pass
|
114
|
-
|
115
|
-
|
116
|
-
async def __async_example():
|
117
|
-
pass
|
118
|
-
|
119
|
-
|
120
|
-
if __name__ == '__main__':
|
121
|
-
__example()
|
122
|
-
asyncio.run(__async_example())
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/.python-version
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/__init__.py
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/beutify_json.py
RENAMED
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/docker_ps.sh
RENAMED
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/git_commit.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/git_remote_v.sh
RENAMED
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/git_status.sh
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/hello_world.py
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/__init__.py
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_1.txt
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_2.txt
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_3.txt
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_4.txt
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/note/note_5.txt
RENAMED
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_check.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_lock.sh
RENAMED
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_show.sh
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/manage/poetry_update.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/pyproject.toml.example
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/resource/__init__.py
RENAMED
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/core/__init__.py
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/core/const.py
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/core/settings.py
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/core/util.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/_arpakit_project_template/src/util/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_arpakit_schedule_uust_api_client_util.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/redoc/redoc.standalone.js
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/favicon-16x16.png
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/favicon-32x32.png
RENAMED
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/oauth2-redirect.html
RENAMED
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui-bundle.js
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css.map
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js
RENAMED
File without changes
|
{arpakitlib-1.6.90 → arpakitlib-1.6.92}/arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js.map
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|