arpakitlib 1.8.36__py3-none-any.whl → 1.8.37__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/command/emojize.py +9 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py +12 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/create_operation.py +78 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_arpakitlib_project_template_info.py +8 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_auth_data.py +8 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_operation.py +63 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_operation_allowed_statuses.py +40 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_operation_allowed_types.py +40 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_sqlalchemy_db_table_name_to_amount.py +39 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_story_log.py +14 -4
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/init_sqlalchemy_db.py +8 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/main_router.py +27 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_fake_error.py +1 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/reinit_sqlalchemy_db.py +8 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/router/client/get_current_user.py +11 -3
- arpakitlib/_arpakit_project_template_v_5/project/api/router/client/get_current_user_token.py +10 -3
- arpakitlib/_arpakit_project_template_v_5/project/api/router/client/main_router.py +1 -11
- arpakitlib/_arpakit_project_template_v_5/project/api/router/general/check_authorization.py +46 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/{client → general}/get_current_api_key.py +9 -3
- arpakitlib/_arpakit_project_template_v_5/project/api/router/{client → general}/get_errors_info.py +10 -8
- arpakitlib/_arpakit_project_template_v_5/project/api/router/general/healthcheck.py +12 -3
- arpakitlib/_arpakit_project_template_v_5/project/api/router/general/main_router.py +18 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/router/general/now_utc_datetime.py +14 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/common.py +11 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/common.py +1 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/operation.py +6 -3
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/story_log.py +8 -6
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/common.py +3 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/user.py +14 -5
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/user_token.py +5 -3
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/{client → general}/api_key.py +5 -3
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/user.py +31 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/user_token.py +16 -0
- arpakitlib/_arpakit_project_template_v_5/project/operation_execution/operation_executor_worker.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/operation_execution/scheduled_operation_creator_worker.py +2 -1
- arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_1.py +6 -1
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/api_key.py +4 -11
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/operation.py +6 -18
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/story_log.py +5 -15
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py +5 -15
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user_token.py +5 -11
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/operation.py +6 -1
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +6 -9
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py +30 -30
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +4 -0
- arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_api_keys.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/{client.py → general.py} +7 -6
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/const.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/client/hello_world.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/static_/client/hello_world.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/about.py +4 -4
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/author.py +4 -4
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/error_handler.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/healthcheck.py +3 -3
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/hello_world.py +3 -3
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/raw_callback_query.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/raw_message.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/start.py +4 -4
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/support.py +4 -4
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/set_tg_bot_commands.py +14 -14
- arpakitlib/ar_enumeration_util.py +2 -2
- arpakitlib/ar_sqlalchemy_util.py +52 -24
- arpakitlib/ar_str_util.py +6 -0
- arpakitlib/ar_zabbix_api_client_util.py +43 -3
- {arpakitlib-1.8.36.dist-info → arpakitlib-1.8.37.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.36.dist-info → arpakitlib-1.8.37.dist-info}/RECORD +71 -64
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/errors_info_general.py +0 -6
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/healthcheck.py +0 -5
- {arpakitlib-1.8.36.dist-info → arpakitlib-1.8.37.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.36.dist-info → arpakitlib-1.8.37.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.36.dist-info → arpakitlib-1.8.37.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,46 @@
|
|
1
|
+
import fastapi.requests
|
2
|
+
from fastapi import APIRouter
|
3
|
+
|
4
|
+
from project.api.authorize import APIAuthorizeData, api_authorize
|
5
|
+
from project.api.schema.common import BaseRouteSO
|
6
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
7
|
+
from project.api.schema.out.general.api_key import ApiKeyGeneral1SO
|
8
|
+
from project.api.schema.out.general.user import UserGeneral1SO
|
9
|
+
from project.api.schema.out.general.user_token import UserTokenGeneral1SO
|
10
|
+
|
11
|
+
|
12
|
+
class CheckAuthorizationGeneralRouteSO(BaseRouteSO):
|
13
|
+
is_current_api_key_ok: bool = False
|
14
|
+
is_current_user_token_ok: bool = False
|
15
|
+
current_api_key: ApiKeyGeneral1SO | None = None
|
16
|
+
current_user_token: UserTokenGeneral1SO | None = None
|
17
|
+
current_user: UserGeneral1SO | None = None
|
18
|
+
|
19
|
+
|
20
|
+
api_router = APIRouter()
|
21
|
+
|
22
|
+
|
23
|
+
@api_router.get(
|
24
|
+
"",
|
25
|
+
name="Check authorization",
|
26
|
+
status_code=fastapi.status.HTTP_200_OK,
|
27
|
+
response_model=CheckAuthorizationGeneralRouteSO | ErrorCommonSO,
|
28
|
+
)
|
29
|
+
async def _(
|
30
|
+
*,
|
31
|
+
request: fastapi.requests.Request,
|
32
|
+
response: fastapi.responses.Response,
|
33
|
+
api_auth_data: APIAuthorizeData = fastapi.Depends(api_authorize())
|
34
|
+
):
|
35
|
+
return CheckAuthorizationGeneralRouteSO(
|
36
|
+
is_current_api_key_ok=api_auth_data.api_key_dbm is not None,
|
37
|
+
is_current_user_token_ok=api_auth_data.user_token_dbm is not None,
|
38
|
+
current_api_key=ApiKeyGeneral1SO.from_dbm(simple_dbm=api_auth_data.api_key_dbm),
|
39
|
+
current_user_token=UserTokenGeneral1SO.from_dbm(
|
40
|
+
simple_dbm=api_auth_data.user_token_dbm
|
41
|
+
) if api_auth_data.user_token_dbm is not None else None
|
42
|
+
,
|
43
|
+
current_user=UserGeneral1SO.from_dbm(
|
44
|
+
simple_dbm=api_auth_data.user_token_dbm.user
|
45
|
+
) if api_auth_data.user_token_dbm is not None else None
|
46
|
+
)
|
@@ -3,10 +3,16 @@ from fastapi import APIRouter
|
|
3
3
|
|
4
4
|
from project.api.authorize import APIAuthorizeData, api_authorize, require_user_token_dbm_api_authorize_middleware, \
|
5
5
|
require_api_key_dbm_api_authorize_middleware
|
6
|
-
from project.api.schema.
|
6
|
+
from project.api.schema.common import BaseRouteSO
|
7
7
|
from project.api.schema.out.common.error import ErrorCommonSO
|
8
|
+
from project.api.schema.out.general.api_key import ApiKeyGeneral1SO
|
8
9
|
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
9
10
|
|
11
|
+
|
12
|
+
class GetCurrentApiKeyRouteSO(BaseRouteSO, ApiKeyGeneral1SO):
|
13
|
+
pass
|
14
|
+
|
15
|
+
|
10
16
|
api_router = APIRouter()
|
11
17
|
|
12
18
|
|
@@ -14,7 +20,7 @@ api_router = APIRouter()
|
|
14
20
|
"",
|
15
21
|
name="Get current api key",
|
16
22
|
status_code=fastapi.status.HTTP_200_OK,
|
17
|
-
response_model=
|
23
|
+
response_model=GetCurrentApiKeyRouteSO | str | ErrorCommonSO,
|
18
24
|
)
|
19
25
|
async def _(
|
20
26
|
*,
|
@@ -30,6 +36,6 @@ async def _(
|
|
30
36
|
)
|
31
37
|
]))
|
32
38
|
):
|
33
|
-
return
|
39
|
+
return GetCurrentApiKeyRouteSO.from_dbm(
|
34
40
|
simple_dbm=api_auth_data.api_key_dbm
|
35
41
|
)
|
arpakitlib/_arpakit_project_template_v_5/project/api/router/{client → general}/get_errors_info.py
RENAMED
@@ -1,11 +1,16 @@
|
|
1
1
|
import fastapi.requests
|
2
2
|
from fastapi import APIRouter
|
3
3
|
|
4
|
-
from project.api.authorize import APIAuthorizeData, api_authorize,
|
5
|
-
require_api_key_dbm_api_authorize_middleware
|
4
|
+
from project.api.authorize import APIAuthorizeData, api_authorize, require_api_key_dbm_api_authorize_middleware
|
6
5
|
from project.api.const import APIErrorCodes, APIErrorSpecificationCodes
|
6
|
+
from project.api.schema.common import BaseRouteSO
|
7
7
|
from project.api.schema.out.common.error import ErrorCommonSO
|
8
|
-
|
8
|
+
|
9
|
+
|
10
|
+
class GetErrorsInfoRouteSO(BaseRouteSO):
|
11
|
+
api_error_codes: list[str] = []
|
12
|
+
api_error_specification_codes: list[str] = []
|
13
|
+
|
9
14
|
|
10
15
|
api_router = APIRouter()
|
11
16
|
|
@@ -14,7 +19,7 @@ api_router = APIRouter()
|
|
14
19
|
"",
|
15
20
|
name="Get errors info",
|
16
21
|
status_code=fastapi.status.HTTP_200_OK,
|
17
|
-
response_model=
|
22
|
+
response_model=GetErrorsInfoRouteSO | ErrorCommonSO,
|
18
23
|
)
|
19
24
|
async def _(
|
20
25
|
*,
|
@@ -23,13 +28,10 @@ async def _(
|
|
23
28
|
api_auth_data: APIAuthorizeData = fastapi.Depends(api_authorize(middlewares=[
|
24
29
|
require_api_key_dbm_api_authorize_middleware(
|
25
30
|
require_active=True
|
26
|
-
),
|
27
|
-
require_user_token_dbm_api_authorize_middleware(
|
28
|
-
require_active_user_token=True
|
29
31
|
)
|
30
32
|
]))
|
31
33
|
):
|
32
|
-
return
|
34
|
+
return GetErrorsInfoRouteSO(
|
33
35
|
api_error_codes=APIErrorCodes.values_list(),
|
34
36
|
api_error_specification_codes=APIErrorSpecificationCodes.values_list()
|
35
37
|
)
|
@@ -1,8 +1,17 @@
|
|
1
|
+
import datetime as dt
|
2
|
+
|
1
3
|
import fastapi
|
2
4
|
from fastapi import APIRouter
|
3
5
|
|
6
|
+
from project.api.schema.common import BaseRouteSO
|
4
7
|
from project.api.schema.out.common.error import ErrorCommonSO
|
5
|
-
from project.
|
8
|
+
from project.core.util import now_local_dt
|
9
|
+
|
10
|
+
|
11
|
+
class HealthcheckRouteSO(BaseRouteSO):
|
12
|
+
is_ok: bool = True
|
13
|
+
datetime: dt.datetime
|
14
|
+
|
6
15
|
|
7
16
|
api_router = APIRouter()
|
8
17
|
|
@@ -11,11 +20,11 @@ api_router = APIRouter()
|
|
11
20
|
"",
|
12
21
|
name="Healthcheck",
|
13
22
|
status_code=fastapi.status.HTTP_200_OK,
|
14
|
-
response_model=
|
23
|
+
response_model=HealthcheckRouteSO | ErrorCommonSO,
|
15
24
|
)
|
16
25
|
async def _(
|
17
26
|
*,
|
18
27
|
request: fastapi.requests.Request,
|
19
28
|
response: fastapi.responses.Response
|
20
29
|
):
|
21
|
-
return
|
30
|
+
return HealthcheckRouteSO(is_ok=True, datetime=now_local_dt())
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from fastapi import APIRouter
|
2
2
|
|
3
|
-
from project.api.router.general import healthcheck, now_utc_datetime
|
3
|
+
from project.api.router.general import healthcheck, now_utc_datetime, get_current_api_key, check_authorization, \
|
4
|
+
get_errors_info
|
4
5
|
|
5
6
|
main_general_api_router = APIRouter()
|
6
7
|
|
@@ -8,7 +9,23 @@ main_general_api_router.include_router(
|
|
8
9
|
router=healthcheck.api_router,
|
9
10
|
prefix="/healthcheck"
|
10
11
|
)
|
12
|
+
|
11
13
|
main_general_api_router.include_router(
|
12
14
|
router=now_utc_datetime.api_router,
|
13
15
|
prefix="/now_utc_datetime"
|
14
16
|
)
|
17
|
+
|
18
|
+
main_general_api_router.include_router(
|
19
|
+
router=get_current_api_key.api_router,
|
20
|
+
prefix="/get_current_api_key"
|
21
|
+
)
|
22
|
+
|
23
|
+
main_general_api_router.include_router(
|
24
|
+
router=check_authorization.api_router,
|
25
|
+
prefix="/check_authorization"
|
26
|
+
)
|
27
|
+
|
28
|
+
main_general_api_router.include_router(
|
29
|
+
router=get_errors_info.api_router,
|
30
|
+
prefix="/get_errors_info"
|
31
|
+
)
|
@@ -2,9 +2,16 @@ import fastapi
|
|
2
2
|
from fastapi import APIRouter
|
3
3
|
|
4
4
|
from arpakitlib.ar_datetime_util import now_utc_dt
|
5
|
+
from project.api.authorize import require_api_key_dbm_api_authorize_middleware, APIAuthorizeData, api_authorize
|
6
|
+
from project.api.schema.common import BaseRouteSO
|
5
7
|
from project.api.schema.out.common.datetime_ import DatetimeCommonSO
|
6
8
|
from project.api.schema.out.common.error import ErrorCommonSO
|
7
9
|
|
10
|
+
|
11
|
+
class NowUTCDatetimeRouteSO(BaseRouteSO, DatetimeCommonSO):
|
12
|
+
pass
|
13
|
+
|
14
|
+
|
8
15
|
api_router = APIRouter()
|
9
16
|
|
10
17
|
|
@@ -12,11 +19,16 @@ api_router = APIRouter()
|
|
12
19
|
"",
|
13
20
|
name="Now UTC datetime",
|
14
21
|
status_code=fastapi.status.HTTP_200_OK,
|
15
|
-
response_model=
|
22
|
+
response_model=NowUTCDatetimeRouteSO | ErrorCommonSO,
|
16
23
|
)
|
17
24
|
async def _(
|
18
25
|
*,
|
19
26
|
request: fastapi.requests.Request,
|
20
27
|
response: fastapi.responses.Response,
|
28
|
+
api_auth_data: APIAuthorizeData = fastapi.Depends(api_authorize(middlewares=[
|
29
|
+
require_api_key_dbm_api_authorize_middleware(
|
30
|
+
require_active=True
|
31
|
+
)
|
32
|
+
]))
|
21
33
|
):
|
22
|
-
return
|
34
|
+
return NowUTCDatetimeRouteSO.from_datetime(datetime_=now_utc_dt())
|
@@ -24,3 +24,14 @@ class BaseSI(BaseSchema):
|
|
24
24
|
|
25
25
|
class BaseSO(BaseSchema):
|
26
26
|
pass
|
27
|
+
|
28
|
+
|
29
|
+
class BaseRouteSO(BaseSchema):
|
30
|
+
@classmethod
|
31
|
+
def __pydantic_init_subclass__(cls, **kwargs: Any) -> None:
|
32
|
+
if not (
|
33
|
+
cls.__name__.endswith("RouteSO")
|
34
|
+
or cls.__name__.endswith("RouteSchemaOut")
|
35
|
+
):
|
36
|
+
raise ValueError("Route APISchema class should ends with RouteSO | RouteSchemaOut")
|
37
|
+
super().__init_subclass__(**kwargs)
|
@@ -7,7 +7,7 @@ from project.api.schema.out.admin.common import SimpleDBMAdminSO
|
|
7
7
|
from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
|
8
8
|
|
9
9
|
|
10
|
-
class
|
10
|
+
class OperationAdmin1SO(SimpleDBMAdminSO):
|
11
11
|
execution_start_dt: dt.datetime | None
|
12
12
|
execution_finish_dt: dt.datetime | None
|
13
13
|
status: str
|
@@ -16,10 +16,13 @@ class OperationAdminSO(SimpleDBMAdminSO):
|
|
16
16
|
input_data: dict[str, Any]
|
17
17
|
output_data: dict[str, Any]
|
18
18
|
error_data: dict[str, Any]
|
19
|
+
|
19
20
|
duration_total_seconds: float | None
|
20
21
|
allowed_statuses: list[str]
|
21
22
|
allowed_types: list[str]
|
22
23
|
|
23
24
|
@classmethod
|
24
|
-
def from_dbm(cls, *, simple_dbm: OperationDBM) ->
|
25
|
-
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
25
|
+
def from_dbm(cls, *, simple_dbm: OperationDBM) -> OperationAdmin1SO:
|
26
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
27
|
+
only_columns_and_sd_properties=cls.model_fields.keys()
|
28
|
+
))
|
@@ -1,17 +1,19 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from typing import Any
|
4
|
-
|
5
3
|
from project.api.schema.out.admin.common import SimpleDBMAdminSO
|
6
4
|
from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
|
7
5
|
|
8
6
|
|
9
|
-
class
|
7
|
+
class StoryLogAdmin1SO(SimpleDBMAdminSO):
|
10
8
|
level: str
|
11
9
|
type: str | None
|
12
10
|
title: str | None
|
13
|
-
|
11
|
+
|
12
|
+
allowed_levels: list[str]
|
13
|
+
allowed_types: list[str]
|
14
14
|
|
15
15
|
@classmethod
|
16
|
-
def from_dbm(cls, *, simple_dbm: StoryLogDBM) ->
|
17
|
-
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
16
|
+
def from_dbm(cls, *, simple_dbm: StoryLogDBM) -> StoryLogAdmin1SO:
|
17
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
18
|
+
only_columns_and_sd_properties=cls.model_fields.keys()
|
19
|
+
))
|
@@ -15,4 +15,6 @@ class SimpleDBMClientSO(BaseSO):
|
|
15
15
|
|
16
16
|
@classmethod
|
17
17
|
def from_dbm(cls, *, simple_dbm: SimpleDBM) -> SimpleDBMClientSO:
|
18
|
-
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
18
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
19
|
+
only_columns_and_sd_properties=cls.model_fields.keys()
|
20
|
+
))
|
@@ -1,22 +1,31 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import datetime as dt
|
4
|
-
from typing import Any
|
5
4
|
|
6
5
|
from project.api.schema.out.client.common import SimpleDBMClientSO
|
7
6
|
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
8
7
|
|
9
8
|
|
10
|
-
class
|
9
|
+
class UserClient1SO(SimpleDBMClientSO):
|
11
10
|
email: str | None
|
12
11
|
roles: list[str]
|
13
12
|
is_active: bool
|
14
13
|
tg_id: int | None
|
15
14
|
tg_bot_last_action_dt: dt.datetime | None
|
16
|
-
|
15
|
+
|
17
16
|
roles_has_admin: bool
|
18
17
|
roles_has_client: bool
|
18
|
+
allowed_roles: list[str]
|
19
|
+
tg_data_first_name: str | None
|
20
|
+
tg_data_last_name: str | None
|
21
|
+
tg_data_language_code: str | None
|
22
|
+
tg_data_username: str | None
|
23
|
+
tg_data_at_username: str | None
|
24
|
+
tg_data_fullname: str | None
|
25
|
+
tg_data_link_by_username: str | None
|
19
26
|
|
20
27
|
@classmethod
|
21
|
-
def from_dbm(cls, *, simple_dbm: UserDBM) ->
|
22
|
-
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
28
|
+
def from_dbm(cls, *, simple_dbm: UserDBM) -> UserClient1SO:
|
29
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
30
|
+
only_columns_and_sd_properties=cls.model_fields.keys()
|
31
|
+
))
|
@@ -4,11 +4,13 @@ from project.api.schema.out.client.common import SimpleDBMClientSO
|
|
4
4
|
from project.sqlalchemy_db_.sqlalchemy_model import UserTokenDBM
|
5
5
|
|
6
6
|
|
7
|
-
class
|
7
|
+
class UserTokenClient1SO(SimpleDBMClientSO):
|
8
8
|
value: str
|
9
9
|
user_id: int
|
10
10
|
is_active: bool
|
11
11
|
|
12
12
|
@classmethod
|
13
|
-
def from_dbm(cls, *, simple_dbm: UserTokenDBM) ->
|
14
|
-
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
13
|
+
def from_dbm(cls, *, simple_dbm: UserTokenDBM) -> UserTokenClient1SO:
|
14
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
15
|
+
only_columns_and_sd_properties=cls.model_fields.keys()
|
16
|
+
))
|
arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/{client → general}/api_key.py
RENAMED
@@ -4,11 +4,13 @@ from project.api.schema.out.client.common import SimpleDBMClientSO
|
|
4
4
|
from project.sqlalchemy_db_.sqlalchemy_model import ApiKeyDBM
|
5
5
|
|
6
6
|
|
7
|
-
class
|
7
|
+
class ApiKeyGeneral1SO(SimpleDBMClientSO):
|
8
8
|
title: str | None
|
9
9
|
value: str
|
10
10
|
is_active: bool
|
11
11
|
|
12
12
|
@classmethod
|
13
|
-
def from_dbm(cls, *, simple_dbm: ApiKeyDBM) ->
|
14
|
-
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
13
|
+
def from_dbm(cls, *, simple_dbm: ApiKeyDBM) -> ApiKeyGeneral1SO:
|
14
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
15
|
+
only_columns_and_sd_properties=cls.model_fields.keys()
|
16
|
+
))
|
@@ -0,0 +1,31 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import datetime as dt
|
4
|
+
|
5
|
+
from project.api.schema.out.client.common import SimpleDBMClientSO
|
6
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
7
|
+
|
8
|
+
|
9
|
+
class UserGeneral1SO(SimpleDBMClientSO):
|
10
|
+
email: str | None
|
11
|
+
roles: list[str]
|
12
|
+
is_active: bool
|
13
|
+
tg_id: int | None
|
14
|
+
tg_bot_last_action_dt: dt.datetime | None
|
15
|
+
|
16
|
+
roles_has_admin: bool
|
17
|
+
roles_has_client: bool
|
18
|
+
allowed_roles: list[str]
|
19
|
+
tg_data_first_name: str | None
|
20
|
+
tg_data_last_name: str | None
|
21
|
+
tg_data_language_code: str | None
|
22
|
+
tg_data_username: str | None
|
23
|
+
tg_data_at_username: str | None
|
24
|
+
tg_data_fullname: str | None
|
25
|
+
tg_data_link_by_username: str | None
|
26
|
+
|
27
|
+
@classmethod
|
28
|
+
def from_dbm(cls, *, simple_dbm: UserDBM) -> UserGeneral1SO:
|
29
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
30
|
+
only_columns_and_sd_properties=cls.model_fields.keys()
|
31
|
+
))
|
@@ -0,0 +1,16 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from project.api.schema.out.client.common import SimpleDBMClientSO
|
4
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserTokenDBM
|
5
|
+
|
6
|
+
|
7
|
+
class UserTokenGeneral1SO(SimpleDBMClientSO):
|
8
|
+
value: str
|
9
|
+
user_id: int
|
10
|
+
is_active: bool
|
11
|
+
|
12
|
+
@classmethod
|
13
|
+
def from_dbm(cls, *, simple_dbm: UserTokenDBM) -> UserTokenGeneral1SO:
|
14
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties(
|
15
|
+
only_columns_and_sd_properties=cls.model_fields.keys()
|
16
|
+
))
|
arpakitlib/_arpakit_project_template_v_5/project/operation_execution/operation_executor_worker.py
CHANGED
@@ -140,7 +140,7 @@ class OperationExecutorWorker(BaseWorker):
|
|
140
140
|
f", operation_id={operation_dbm.id}"
|
141
141
|
f", operation_type={operation_dbm.type}"
|
142
142
|
),
|
143
|
-
|
143
|
+
extra_data={
|
144
144
|
"operation_id": operation_dbm.id,
|
145
145
|
"operation_type": operation_dbm.type,
|
146
146
|
}
|
@@ -236,7 +236,7 @@ class OperationExecutorWorker(BaseWorker):
|
|
236
236
|
f", operation_id={operation_dbm.id}"
|
237
237
|
f", operation_type={operation_dbm.type}"
|
238
238
|
),
|
239
|
-
|
239
|
+
extra_data={
|
240
240
|
"operation_id": operation_dbm.id,
|
241
241
|
"operation_type": operation_dbm.type,
|
242
242
|
}
|
@@ -45,7 +45,8 @@ class ScheduledOperationCreatorWorker(BaseWorker):
|
|
45
45
|
with self.sqlalchemy_db.new_session() as session:
|
46
46
|
operation_dbm = OperationDBM(
|
47
47
|
type=scheduled_operation.type,
|
48
|
-
input_data=scheduled_operation.input_data
|
48
|
+
input_data=scheduled_operation.input_data,
|
49
|
+
status=OperationDBM.Statuses.waiting_for_execution
|
49
50
|
)
|
50
51
|
session.add(operation_dbm)
|
51
52
|
session.commit()
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import sqlalchemy
|
2
|
+
|
1
3
|
from project.sqladmin_.model_view.common import SimpleMV
|
2
4
|
from project.sqlalchemy_db_.sqlalchemy_model import ApiKeyDBM
|
3
5
|
|
@@ -5,21 +7,14 @@ from project.sqlalchemy_db_.sqlalchemy_model import ApiKeyDBM
|
|
5
7
|
class ApiKeyMV(SimpleMV, model=ApiKeyDBM):
|
6
8
|
name = "ApiKey"
|
7
9
|
name_plural = "ApiKeys"
|
8
|
-
column_list =
|
9
|
-
ApiKeyDBM.id,
|
10
|
-
ApiKeyDBM.long_id,
|
11
|
-
ApiKeyDBM.slug,
|
12
|
-
ApiKeyDBM.creation_dt,
|
13
|
-
ApiKeyDBM.title,
|
14
|
-
ApiKeyDBM.value,
|
15
|
-
ApiKeyDBM.is_active,
|
16
|
-
]
|
10
|
+
column_list = sqlalchemy.inspect(ApiKeyDBM).columns
|
17
11
|
form_columns = [
|
18
12
|
ApiKeyDBM.slug,
|
19
13
|
ApiKeyDBM.title,
|
20
14
|
ApiKeyDBM.value,
|
21
15
|
ApiKeyDBM.is_active,
|
22
16
|
]
|
17
|
+
column_sortable_list = sqlalchemy.inspect(ApiKeyDBM).columns
|
23
18
|
column_default_sort = [
|
24
19
|
(ApiKeyDBM.creation_dt, True)
|
25
20
|
]
|
@@ -27,7 +22,5 @@ class ApiKeyMV(SimpleMV, model=ApiKeyDBM):
|
|
27
22
|
ApiKeyDBM.id,
|
28
23
|
ApiKeyDBM.long_id,
|
29
24
|
ApiKeyDBM.slug,
|
30
|
-
ApiKeyDBM.title,
|
31
25
|
ApiKeyDBM.value,
|
32
|
-
ApiKeyDBM.is_active,
|
33
26
|
]
|
@@ -8,7 +8,7 @@ class SimpleMV(ModelView):
|
|
8
8
|
can_view_details = True
|
9
9
|
can_export = True
|
10
10
|
page_size = 50
|
11
|
-
page_size_options = [50, 100, 200]
|
11
|
+
page_size_options = [50, 100, 200, 500, 750, 1000]
|
12
12
|
save_as = True
|
13
13
|
save_as_continue = True
|
14
14
|
export_types = ["xlsx", "csv", "json"]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import sqlalchemy
|
2
|
+
|
1
3
|
from project.sqladmin_.model_view.common import SimpleMV
|
2
4
|
from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
|
3
5
|
|
@@ -5,20 +7,7 @@ from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
|
|
5
7
|
class OperationMV(SimpleMV, model=OperationDBM):
|
6
8
|
name = "Operation"
|
7
9
|
name_plural = "Operations"
|
8
|
-
column_list =
|
9
|
-
OperationDBM.id,
|
10
|
-
OperationDBM.long_id,
|
11
|
-
OperationDBM.slug,
|
12
|
-
OperationDBM.creation_dt,
|
13
|
-
OperationDBM.status,
|
14
|
-
OperationDBM.type,
|
15
|
-
OperationDBM.title,
|
16
|
-
OperationDBM.execution_start_dt,
|
17
|
-
OperationDBM.execution_finish_dt,
|
18
|
-
OperationDBM.input_data,
|
19
|
-
OperationDBM.output_data,
|
20
|
-
OperationDBM.error_data
|
21
|
-
]
|
10
|
+
column_list = sqlalchemy.inspect(OperationDBM).columns
|
22
11
|
form_columns = [
|
23
12
|
OperationDBM.slug,
|
24
13
|
OperationDBM.status,
|
@@ -28,8 +17,10 @@ class OperationMV(SimpleMV, model=OperationDBM):
|
|
28
17
|
OperationDBM.execution_finish_dt,
|
29
18
|
OperationDBM.input_data,
|
30
19
|
OperationDBM.output_data,
|
31
|
-
OperationDBM.error_data
|
20
|
+
OperationDBM.error_data,
|
21
|
+
OperationDBM.extra_data
|
32
22
|
]
|
23
|
+
column_sortable_list = sqlalchemy.inspect(OperationDBM).columns
|
33
24
|
column_default_sort = [
|
34
25
|
(OperationDBM.creation_dt, True)
|
35
26
|
]
|
@@ -37,7 +28,4 @@ class OperationMV(SimpleMV, model=OperationDBM):
|
|
37
28
|
OperationDBM.id,
|
38
29
|
OperationDBM.long_id,
|
39
30
|
OperationDBM.slug,
|
40
|
-
OperationDBM.status,
|
41
|
-
OperationDBM.type,
|
42
|
-
OperationDBM.title
|
43
31
|
]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import sqlalchemy
|
2
|
+
|
1
3
|
from project.sqladmin_.model_view.common import SimpleMV
|
2
4
|
from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
|
3
5
|
|
@@ -5,23 +7,15 @@ from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
|
|
5
7
|
class StoryLogMV(SimpleMV, model=StoryLogDBM):
|
6
8
|
name = "StoryLog"
|
7
9
|
name_plural = "StoryLogs"
|
8
|
-
column_list =
|
9
|
-
StoryLogDBM.id,
|
10
|
-
StoryLogDBM.long_id,
|
11
|
-
StoryLogDBM.slug,
|
12
|
-
StoryLogDBM.creation_dt,
|
13
|
-
StoryLogDBM.level,
|
14
|
-
StoryLogDBM.type,
|
15
|
-
StoryLogDBM.title,
|
16
|
-
StoryLogDBM.data
|
17
|
-
]
|
10
|
+
column_list = sqlalchemy.inspect(StoryLogDBM).columns
|
18
11
|
form_columns = [
|
19
12
|
StoryLogDBM.slug,
|
20
13
|
StoryLogDBM.level,
|
21
14
|
StoryLogDBM.type,
|
22
15
|
StoryLogDBM.title,
|
23
|
-
StoryLogDBM.
|
16
|
+
StoryLogDBM.extra_data
|
24
17
|
]
|
18
|
+
column_sortable_list = sqlalchemy.inspect(StoryLogDBM).columns
|
25
19
|
column_default_sort = [
|
26
20
|
(StoryLogDBM.creation_dt, True)
|
27
21
|
]
|
@@ -29,8 +23,4 @@ class StoryLogMV(SimpleMV, model=StoryLogDBM):
|
|
29
23
|
StoryLogDBM.id,
|
30
24
|
StoryLogDBM.long_id,
|
31
25
|
StoryLogDBM.slug,
|
32
|
-
StoryLogDBM.level,
|
33
|
-
StoryLogDBM.type,
|
34
|
-
StoryLogDBM.title,
|
35
|
-
StoryLogDBM.data
|
36
26
|
]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import sqlalchemy
|
2
|
+
|
1
3
|
from project.sqladmin_.model_view.common import SimpleMV
|
2
4
|
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
3
5
|
|
@@ -5,18 +7,7 @@ from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
|
5
7
|
class UserMV(SimpleMV, model=UserDBM):
|
6
8
|
name = "User"
|
7
9
|
name_plural = "Users"
|
8
|
-
column_list =
|
9
|
-
UserDBM.id,
|
10
|
-
UserDBM.long_id,
|
11
|
-
UserDBM.slug,
|
12
|
-
UserDBM.creation_dt,
|
13
|
-
UserDBM.email,
|
14
|
-
UserDBM.roles,
|
15
|
-
UserDBM.is_active,
|
16
|
-
UserDBM.tg_id,
|
17
|
-
UserDBM.tg_bot_last_action_dt,
|
18
|
-
UserDBM.tg_data,
|
19
|
-
]
|
10
|
+
column_list = sqlalchemy.inspect(UserDBM).columns
|
20
11
|
form_columns = [
|
21
12
|
UserDBM.slug,
|
22
13
|
UserDBM.email,
|
@@ -25,7 +16,9 @@ class UserMV(SimpleMV, model=UserDBM):
|
|
25
16
|
UserDBM.tg_id,
|
26
17
|
UserDBM.tg_bot_last_action_dt,
|
27
18
|
UserDBM.tg_data,
|
19
|
+
UserDBM.extra_data
|
28
20
|
]
|
21
|
+
column_sortable_list = sqlalchemy.inspect(UserDBM).columns
|
29
22
|
column_default_sort = [
|
30
23
|
(UserDBM.creation_dt, True)
|
31
24
|
]
|
@@ -33,8 +26,5 @@ class UserMV(SimpleMV, model=UserDBM):
|
|
33
26
|
UserDBM.id,
|
34
27
|
UserDBM.long_id,
|
35
28
|
UserDBM.slug,
|
36
|
-
UserDBM.email,
|
37
|
-
UserDBM.roles,
|
38
|
-
UserDBM.is_active,
|
39
29
|
UserDBM.tg_id,
|
40
30
|
]
|