arpakitlib 1.8.107__py3-none-any.whl → 1.8.109__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arpakitlib/_arpakit_project_template_v_5/project/core/easy_openai_api_client.py +45 -0
- arpakitlib/_arpakit_project_template_v_5/project/core/settings.py +4 -0
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/api_key.py +20 -3
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/operation.py +26 -3
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py +10 -0
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user_token.py +9 -1
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/verification_code.py +11 -3
- {arpakitlib-1.8.107.dist-info → arpakitlib-1.8.109.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.107.dist-info → arpakitlib-1.8.109.dist-info}/RECORD +12 -11
- {arpakitlib-1.8.107.dist-info → arpakitlib-1.8.109.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.107.dist-info → arpakitlib-1.8.109.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.107.dist-info → arpakitlib-1.8.109.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
import asyncio
|
2
|
+
from functools import lru_cache
|
3
|
+
|
4
|
+
import httpx
|
5
|
+
from arpakitlib.ar_logging_util import setup_normal_logging
|
6
|
+
from arpakitlib.ar_openai_api_client_util import EasyOpenAIAPIClient
|
7
|
+
from openai import OpenAI, AsyncOpenAI
|
8
|
+
|
9
|
+
from project.core.settings import get_cached_settings
|
10
|
+
|
11
|
+
|
12
|
+
def create_easy_openai_api_client() -> EasyOpenAIAPIClient | None:
|
13
|
+
if get_cached_settings().openai_api_key is None:
|
14
|
+
return None
|
15
|
+
|
16
|
+
return EasyOpenAIAPIClient(
|
17
|
+
open_ai=OpenAI(
|
18
|
+
api_key=get_cached_settings().openai_api_key,
|
19
|
+
base_url=get_cached_settings().openai_api_base_url,
|
20
|
+
timeout=httpx.Timeout(
|
21
|
+
timeout=60,
|
22
|
+
connect=15,
|
23
|
+
read=60,
|
24
|
+
write=60,
|
25
|
+
pool=15
|
26
|
+
)
|
27
|
+
),
|
28
|
+
async_open_ai=AsyncOpenAI(
|
29
|
+
api_key=get_cached_settings().openai_api_key,
|
30
|
+
base_url=get_cached_settings().openai_api_base_url
|
31
|
+
)
|
32
|
+
)
|
33
|
+
|
34
|
+
|
35
|
+
@lru_cache()
|
36
|
+
def get_cached_easy_openai_api_client() -> EasyOpenAIAPIClient | None:
|
37
|
+
return create_easy_openai_api_client()
|
38
|
+
|
39
|
+
|
40
|
+
async def __async_example():
|
41
|
+
setup_normal_logging()
|
42
|
+
|
43
|
+
|
44
|
+
if __name__ == '__main__':
|
45
|
+
asyncio.run(__async_example())
|
@@ -173,6 +173,10 @@ class Settings(SimpleSettings):
|
|
173
173
|
raise_for_type(self.local_timezone, str)
|
174
174
|
return pytz.timezone(self.local_timezone)
|
175
175
|
|
176
|
+
openai_api_key: str | None = None
|
177
|
+
|
178
|
+
openai_api_base_url: str | None = "https://api.proxyapi.ru/openai/v1"
|
179
|
+
|
176
180
|
|
177
181
|
@lru_cache()
|
178
182
|
def get_cached_settings() -> Settings:
|
@@ -9,7 +9,26 @@ class ApiKeyMV(SimpleMV, model=ApiKeyDBM):
|
|
9
9
|
name = "ApiKey"
|
10
10
|
name_plural = "ApiKeys"
|
11
11
|
icon = "fa-solid fa-key"
|
12
|
-
column_list =
|
12
|
+
column_list = [
|
13
|
+
ApiKeyDBM.id,
|
14
|
+
ApiKeyDBM.long_id,
|
15
|
+
ApiKeyDBM.slug,
|
16
|
+
ApiKeyDBM.creation_dt,
|
17
|
+
ApiKeyDBM.title,
|
18
|
+
ApiKeyDBM.value,
|
19
|
+
ApiKeyDBM.is_active,
|
20
|
+
ApiKeyDBM.extra_data
|
21
|
+
]
|
22
|
+
column_details_list = [
|
23
|
+
ApiKeyDBM.id,
|
24
|
+
ApiKeyDBM.long_id,
|
25
|
+
ApiKeyDBM.slug,
|
26
|
+
ApiKeyDBM.creation_dt,
|
27
|
+
ApiKeyDBM.title,
|
28
|
+
ApiKeyDBM.value,
|
29
|
+
ApiKeyDBM.is_active,
|
30
|
+
ApiKeyDBM.extra_data
|
31
|
+
]
|
13
32
|
form_columns = [
|
14
33
|
ApiKeyDBM.slug,
|
15
34
|
ApiKeyDBM.title,
|
@@ -22,8 +41,6 @@ class ApiKeyMV(SimpleMV, model=ApiKeyDBM):
|
|
22
41
|
]
|
23
42
|
column_searchable_list = [
|
24
43
|
ApiKeyDBM.id,
|
25
|
-
ApiKeyDBM.long_id,
|
26
|
-
ApiKeyDBM.slug,
|
27
44
|
ApiKeyDBM.value,
|
28
45
|
]
|
29
46
|
column_formatters = {
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import sqlalchemy
|
2
|
+
from sqladmin.fields import SelectField
|
2
3
|
|
3
4
|
from project.sqladmin_.model_view.common import SimpleMV
|
4
5
|
from project.sqladmin_.util.etc import format_datetime_, format_json_for_preview_, format_json_
|
@@ -9,7 +10,21 @@ class OperationMV(SimpleMV, model=OperationDBM):
|
|
9
10
|
name = "Operation"
|
10
11
|
name_plural = "Operations"
|
11
12
|
icon = "fa-solid fa-gears"
|
12
|
-
column_list =
|
13
|
+
column_list = [
|
14
|
+
OperationDBM.id,
|
15
|
+
OperationDBM.long_id,
|
16
|
+
OperationDBM.slug,
|
17
|
+
OperationDBM.creation_dt,
|
18
|
+
OperationDBM.status,
|
19
|
+
OperationDBM.type,
|
20
|
+
OperationDBM.title,
|
21
|
+
OperationDBM.execution_start_dt,
|
22
|
+
OperationDBM.execution_finish_dt,
|
23
|
+
OperationDBM.input_data,
|
24
|
+
OperationDBM.output_data,
|
25
|
+
OperationDBM.error_data,
|
26
|
+
OperationDBM.extra_data
|
27
|
+
]
|
13
28
|
form_columns = [
|
14
29
|
OperationDBM.slug,
|
15
30
|
OperationDBM.status,
|
@@ -22,14 +37,22 @@ class OperationMV(SimpleMV, model=OperationDBM):
|
|
22
37
|
OperationDBM.error_data,
|
23
38
|
OperationDBM.extra_data
|
24
39
|
]
|
40
|
+
form_overrides = {
|
41
|
+
OperationDBM.status.key: SelectField
|
42
|
+
}
|
43
|
+
form_args = {
|
44
|
+
OperationDBM.status.key: {
|
45
|
+
"choices": [(status, status) for status in OperationDBM.Statuses.values_list()],
|
46
|
+
"description": "Выберите статус"
|
47
|
+
}
|
48
|
+
}
|
25
49
|
column_sortable_list = sqlalchemy.inspect(OperationDBM).columns
|
26
50
|
column_default_sort = [
|
27
51
|
(OperationDBM.creation_dt, True)
|
28
52
|
]
|
29
53
|
column_searchable_list = [
|
30
54
|
OperationDBM.id,
|
31
|
-
OperationDBM.long_id
|
32
|
-
OperationDBM.slug,
|
55
|
+
OperationDBM.long_id
|
33
56
|
]
|
34
57
|
column_formatters = {
|
35
58
|
OperationDBM.creation_dt: lambda m, _: format_datetime_(m.creation_dt),
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import sqlalchemy
|
2
|
+
from wtforms import SelectMultipleField
|
2
3
|
|
3
4
|
from project.sqladmin_.model_view.common import SimpleMV
|
4
5
|
from project.sqladmin_.util.etc import format_datetime_, format_json_for_preview_, format_json_
|
@@ -36,6 +37,15 @@ class UserMV(SimpleMV, model=UserDBM):
|
|
36
37
|
UserDBM.tg_bot_last_action_dt,
|
37
38
|
UserDBM.extra_data
|
38
39
|
]
|
40
|
+
form_overrides = {
|
41
|
+
UserDBM.roles.key: SelectMultipleField
|
42
|
+
}
|
43
|
+
form_args = {
|
44
|
+
UserDBM.roles.key: {
|
45
|
+
"choices": [(role, role) for role in UserDBM.Roles.values_list()],
|
46
|
+
"description": "Выберите роли пользователя"
|
47
|
+
}
|
48
|
+
}
|
39
49
|
column_sortable_list = sqlalchemy.inspect(UserDBM).columns
|
40
50
|
column_default_sort = [
|
41
51
|
(UserDBM.creation_dt, True)
|
@@ -2,7 +2,7 @@ import sqlalchemy
|
|
2
2
|
|
3
3
|
from project.sqladmin_.model_view.common import SimpleMV
|
4
4
|
from project.sqladmin_.util.etc import format_datetime_, format_json_for_preview_, format_json_
|
5
|
-
from project.sqlalchemy_db_.sqlalchemy_model import UserTokenDBM
|
5
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserTokenDBM, UserDBM
|
6
6
|
|
7
7
|
|
8
8
|
class UserTokenMV(SimpleMV, model=UserTokenDBM):
|
@@ -45,3 +45,11 @@ class UserTokenMV(SimpleMV, model=UserTokenDBM):
|
|
45
45
|
UserTokenDBM.creation_dt: lambda m, _: format_datetime_(m.creation_dt),
|
46
46
|
UserTokenDBM.extra_data: lambda m, a: format_json_(m.extra_data),
|
47
47
|
}
|
48
|
+
form_ajax_refs = {
|
49
|
+
UserTokenDBM.user.key: {
|
50
|
+
"fields": [UserDBM.id.key, UserDBM.email.key],
|
51
|
+
"placeholder": 'Search by id or email',
|
52
|
+
"minimum_input_length": 1,
|
53
|
+
"page_size": 10,
|
54
|
+
}
|
55
|
+
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import sqlalchemy
|
4
|
+
from sqladmin.fields import SelectField
|
4
5
|
|
5
6
|
from project.sqladmin_.model_view import SimpleMV
|
6
7
|
from project.sqladmin_.util.etc import format_datetime_, format_json_for_preview_, format_json_
|
@@ -32,16 +33,23 @@ class VerificationCodeMV(SimpleMV, model=VerificationCodeDBM):
|
|
32
33
|
VerificationCodeDBM.is_active,
|
33
34
|
VerificationCodeDBM.extra_data
|
34
35
|
]
|
36
|
+
form_overrides = {
|
37
|
+
VerificationCodeDBM.type.key: SelectField
|
38
|
+
}
|
39
|
+
form_args = {
|
40
|
+
VerificationCodeDBM.type.key: {
|
41
|
+
"choices": [(status, status) for status in VerificationCodeDBM.Types.values_list()],
|
42
|
+
"description": "Выберите тип"
|
43
|
+
}
|
44
|
+
}
|
35
45
|
column_sortable_list = sqlalchemy.inspect(VerificationCodeDBM).columns
|
36
46
|
column_default_sort = [
|
37
47
|
(VerificationCodeDBM.creation_dt, True)
|
38
48
|
]
|
39
49
|
column_searchable_list = [
|
40
50
|
VerificationCodeDBM.id,
|
41
|
-
VerificationCodeDBM.long_id,
|
42
|
-
VerificationCodeDBM.slug,
|
43
51
|
VerificationCodeDBM.value,
|
44
|
-
VerificationCodeDBM.recipient
|
52
|
+
VerificationCodeDBM.recipient
|
45
53
|
]
|
46
54
|
column_formatters = {
|
47
55
|
VerificationCodeDBM.creation_dt: lambda m, _: format_datetime_(m.creation_dt),
|
@@ -168,9 +168,10 @@ arpakitlib/_arpakit_project_template_v_5/project/core/__init__.py,sha256=47DEQpj
|
|
168
168
|
arpakitlib/_arpakit_project_template_v_5/project/core/cache_file_storage_in_dir.py,sha256=0lKPKvrs30DlAZwNS5ydPsQ9ETFLBjZqEcNv8LoQVCU,623
|
169
169
|
arpakitlib/_arpakit_project_template_v_5/project/core/const.py,sha256=hgiiPIYL9543-eEnNAhZWYgX7ZzLKjOqRD0skkROSOw,951
|
170
170
|
arpakitlib/_arpakit_project_template_v_5/project/core/dump_file_storage_in_dir.py,sha256=u3-vStMGaseMsRLuJmQK04UDhaez9vw6o5jyHb1fwNg,617
|
171
|
+
arpakitlib/_arpakit_project_template_v_5/project/core/easy_openai_api_client.py,sha256=NAwu0e7m4m2OVcZC0KBbgjiNxKmpIUofBzwTRbC1GBQ,1219
|
171
172
|
arpakitlib/_arpakit_project_template_v_5/project/core/jinja2_templates.py,sha256=jCNLaBauGC7YNvZdTLNHuPp7hmRGt94O23Skg6ewo7o,352
|
172
173
|
arpakitlib/_arpakit_project_template_v_5/project/core/media_file_storage_in_dir.py,sha256=fMofTsfJtA8pp5lEUhucEUu3PBsmj-elaRZzExDsdLI,623
|
173
|
-
arpakitlib/_arpakit_project_template_v_5/project/core/settings.py,sha256=
|
174
|
+
arpakitlib/_arpakit_project_template_v_5/project/core/settings.py,sha256=NlbGFZCR98hytoigP4E5TjazIUJt8NPSI0NZOmQ365A,5995
|
174
175
|
arpakitlib/_arpakit_project_template_v_5/project/core/util.py,sha256=1ha9UrguVPsTSjoMHhVZVCD0_mNBfhIDGEvcG1nA4Zw,667
|
175
176
|
arpakitlib/_arpakit_project_template_v_5/project/json_db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
176
177
|
arpakitlib/_arpakit_project_template_v_5/project/json_db/json_db.py,sha256=tBML-z4Y7uY8f_0ggcxvlDNt15Sf93Jr_OUeHwWxqOA,724
|
@@ -231,13 +232,13 @@ arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/asgi.py,sha256=DRlRPk
|
|
231
232
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/create_sqladmin_app.py,sha256=x5F8--5KA4cmTrb6kAAmp6fVd2TiqxPOzxqUkSEhSG4,1298
|
232
233
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/event.py,sha256=LjAUYNlsX9Sj_QLMzYuTQbbYYbIMHhbsSjTXt-G7lOE,849
|
233
234
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/__init__.py,sha256=dc_swzjkRDj85SWQ3cGGgsrp_cq5evUYQYUg0g7C5nw,435
|
234
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/api_key.py,sha256=
|
235
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/api_key.py,sha256=VZKCG2GQworbmB_PPHPU10qMf5IThP0LN27k50XlHlg,1570
|
235
236
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py,sha256=US1tueTCPvAdse6TLT6yRLUHbvwGGagApYhFJzE_6Yc,576
|
236
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/operation.py,sha256=
|
237
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/operation.py,sha256=hvgKAQgNJWTcvu_ZI9Ony4I-Mm_4rZBtQ4iqnoHZc2Q,2801
|
237
238
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/story_log.py,sha256=8N9ahbCzNVczqgO_g0luRqP8luCv5bmCLoz66UYZ0mU,1427
|
238
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py,sha256=
|
239
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user_token.py,sha256=
|
240
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/verification_code.py,sha256=
|
239
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py,sha256=KFiEFa0EDTxPa79B870fB5Jw-mabR-Ly8nZY9PwuAu0,2017
|
240
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user_token.py,sha256=X2oZzcHHGQmdZwfK4agxxjH8_qRTyZvGvhq8yKZbsJg,1789
|
241
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/verification_code.py,sha256=h5gTdihFjxhIfys55yJhQQcjukO_pJzWAmsf_k1ibQI,2171
|
241
242
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
242
243
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/util/etc.py,sha256=jm65ZB0K8e6WpgcL2Y6pxcIuQjioIyMtBIOOFbbWfgk,1070
|
243
244
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -391,8 +392,8 @@ arpakitlib/ar_ssh_runner_util.py,sha256=yvAwza480MkHKvLkDEsR7JNh2bYNs6P9rCVo4NA8
|
|
391
392
|
arpakitlib/ar_str_util.py,sha256=CAv0wH8nP5Ja59S-hEdmNhNrM_Fwy935d0zntLpJkx8,4309
|
392
393
|
arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,4049
|
393
394
|
arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrIMsdpNK-AUlm0,5347
|
394
|
-
arpakitlib-1.8.
|
395
|
-
arpakitlib-1.8.
|
396
|
-
arpakitlib-1.8.
|
397
|
-
arpakitlib-1.8.
|
398
|
-
arpakitlib-1.8.
|
395
|
+
arpakitlib-1.8.109.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
396
|
+
arpakitlib-1.8.109.dist-info/METADATA,sha256=Uag9wA0Xs2FDQoDvgU3s4g1FSQ8uKU1ZeZ1kmIK_hn8,3566
|
397
|
+
arpakitlib-1.8.109.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
398
|
+
arpakitlib-1.8.109.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
399
|
+
arpakitlib-1.8.109.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|