arpakitlib 1.8.19__py3-none-any.whl → 1.8.21__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/example.env +1 -3
- arpakitlib/_arpakit_project_template_v_5/project/additional_model/common.py +0 -3
- arpakitlib/_arpakit_project_template_v_5/project/api/auth.py +170 -206
- arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py +2 -7
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_arpakitlib_project_template_info.py +11 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_auth_data.py +10 -8
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_story_log.py +46 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/main_router.py +28 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_fake_error.py +31 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/reinit_sqlalchemy_db.py +35 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/client/get_current_user.py +33 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/client/get_current_user_token.py +33 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/client/get_errors_info.py +6 -8
- arpakitlib/_arpakit_project_template_v_5/project/api/router/client/main_router.py +17 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/general/main_router.py +5 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/router/{client → general}/now_utc_datetime.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/common.py +7 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/operation.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/story_log.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/common.py +7 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/{admin → client}/user.py +6 -6
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/client/user_token.py +14 -0
- arpakitlib/_arpakit_project_template_v_5/project/core/settings.py +3 -19
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/operation.py +13 -3
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +19 -4
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_api_keys.py +35 -0
- arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_1.py +4 -2
- arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_2.py +4 -2
- arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_3.py +4 -2
- arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_4.py +4 -2
- arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_5.py +4 -2
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/client.py +14 -6
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/const.py +1 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/about.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/general/author.py +31 -0
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/support.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/main_router.py +4 -3
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/set_tg_bot_commands.py +8 -0
- {arpakitlib-1.8.19.dist-info → arpakitlib-1.8.21.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.19.dist-info → arpakitlib-1.8.21.dist-info}/RECORD +55 -49
- arpakitlib/_arpakit_project_template_v_5/project/api/auth2.py +0 -218
- arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/admin/user_token.py +0 -14
- /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/__init__.py +0 -0
- /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/error_handler.py +0 -0
- /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/healthcheck.py +0 -0
- /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/hello_world.py +0 -0
- /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/raw_callback_query.py +0 -0
- /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/raw_inline_query.py +0 -0
- /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/raw_message.py +0 -0
- /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/remove_message.py +0 -0
- /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/{client → general}/start.py +0 -0
- {arpakitlib-1.8.19.dist-info → arpakitlib-1.8.21.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.19.dist-info → arpakitlib-1.8.21.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.19.dist-info → arpakitlib-1.8.21.dist-info}/entry_points.txt +0 -0
@@ -1,3 +1,31 @@
|
|
1
1
|
from fastapi import APIRouter
|
2
2
|
|
3
|
+
from project.api.router.admin import get_auth_data, get_arpakitlib_project_template_info, raise_fake_error, \
|
4
|
+
reinit_sqlalchemy_db, get_story_log
|
5
|
+
|
3
6
|
main_admin_api_router = APIRouter()
|
7
|
+
|
8
|
+
main_admin_api_router.include_router(
|
9
|
+
router=get_arpakitlib_project_template_info.api_router,
|
10
|
+
prefix="/get_arpakitlib_project_template_info"
|
11
|
+
)
|
12
|
+
|
13
|
+
main_admin_api_router.include_router(
|
14
|
+
router=get_auth_data.api_router,
|
15
|
+
prefix="/get_auth_data"
|
16
|
+
)
|
17
|
+
|
18
|
+
main_admin_api_router.include_router(
|
19
|
+
router=raise_fake_error.api_router,
|
20
|
+
prefix="/raise_fake_error"
|
21
|
+
)
|
22
|
+
|
23
|
+
main_admin_api_router.include_router(
|
24
|
+
router=reinit_sqlalchemy_db.api_router,
|
25
|
+
prefix="/reinit_sqlalchemy_db"
|
26
|
+
)
|
27
|
+
|
28
|
+
main_admin_api_router.include_router(
|
29
|
+
router=get_story_log.api_router,
|
30
|
+
prefix="/get_story_log"
|
31
|
+
)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import fastapi.requests
|
2
|
+
from fastapi import APIRouter
|
3
|
+
|
4
|
+
from project.api.auth import APIAuthData, api_auth, require_user_token_dbm_api_middleware, \
|
5
|
+
require_correct_api_key_or_api_key_dbm_api_middleware
|
6
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
7
|
+
from project.api.schema.out.common.raw_data import RawDataCommonSO
|
8
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
9
|
+
|
10
|
+
api_router = APIRouter()
|
11
|
+
|
12
|
+
|
13
|
+
@api_router.get(
|
14
|
+
path="",
|
15
|
+
name="Raise fake error",
|
16
|
+
status_code=fastapi.status.HTTP_200_OK,
|
17
|
+
response_model=RawDataCommonSO | ErrorCommonSO,
|
18
|
+
)
|
19
|
+
async def _(
|
20
|
+
*,
|
21
|
+
request: fastapi.requests.Request,
|
22
|
+
response: fastapi.responses.Response,
|
23
|
+
api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
|
24
|
+
require_correct_api_key_or_api_key_dbm_api_middleware(require_active_api_key_dbm=True),
|
25
|
+
require_user_token_dbm_api_middleware(
|
26
|
+
require_active_user_token=True,
|
27
|
+
require_user_roles=[UserDBM.Roles.admin]
|
28
|
+
)
|
29
|
+
]))
|
30
|
+
):
|
31
|
+
raise Exception("fake error")
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import fastapi.requests
|
2
|
+
from fastapi import APIRouter
|
3
|
+
|
4
|
+
from project.api.auth import APIAuthData, api_auth, require_user_token_dbm_api_middleware, \
|
5
|
+
require_not_prod_mode_api_middleware, \
|
6
|
+
require_correct_api_key_or_api_key_dbm_api_middleware
|
7
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
8
|
+
from project.api.schema.out.common.raw_data import RawDataCommonSO
|
9
|
+
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
10
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
11
|
+
|
12
|
+
api_router = APIRouter()
|
13
|
+
|
14
|
+
|
15
|
+
@api_router.get(
|
16
|
+
path="",
|
17
|
+
name="Reinit sqlalchemy db",
|
18
|
+
status_code=fastapi.status.HTTP_200_OK,
|
19
|
+
response_model=RawDataCommonSO | ErrorCommonSO,
|
20
|
+
)
|
21
|
+
async def _(
|
22
|
+
*,
|
23
|
+
request: fastapi.requests.Request,
|
24
|
+
response: fastapi.responses.Response,
|
25
|
+
api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
|
26
|
+
require_not_prod_mode_api_middleware(),
|
27
|
+
require_correct_api_key_or_api_key_dbm_api_middleware(require_active_api_key_dbm=True),
|
28
|
+
require_user_token_dbm_api_middleware(
|
29
|
+
require_active_user_token=True,
|
30
|
+
require_user_roles=[UserDBM.Roles.admin],
|
31
|
+
),
|
32
|
+
]))
|
33
|
+
):
|
34
|
+
get_cached_sqlalchemy_db().reinit()
|
35
|
+
return RawDataCommonSO()
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import fastapi.requests
|
2
|
+
from fastapi import APIRouter
|
3
|
+
|
4
|
+
from project.api.auth import APIAuthData, api_auth, require_user_token_dbm_api_middleware, \
|
5
|
+
require_correct_api_key_or_api_key_dbm_api_middleware
|
6
|
+
from project.api.schema.out.client.user import UserClientSO
|
7
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
8
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
9
|
+
|
10
|
+
api_router = APIRouter()
|
11
|
+
|
12
|
+
|
13
|
+
@api_router.get(
|
14
|
+
"",
|
15
|
+
name="Get current user",
|
16
|
+
status_code=fastapi.status.HTTP_200_OK,
|
17
|
+
response_model=UserClientSO | ErrorCommonSO,
|
18
|
+
)
|
19
|
+
async def _(
|
20
|
+
*,
|
21
|
+
request: fastapi.requests.Request,
|
22
|
+
response: fastapi.responses.Response,
|
23
|
+
api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
|
24
|
+
require_correct_api_key_or_api_key_dbm_api_middleware(require_active_api_key_dbm=True),
|
25
|
+
require_user_token_dbm_api_middleware(
|
26
|
+
require_active_user_token=True,
|
27
|
+
require_user_roles=[UserDBM.Roles.client]
|
28
|
+
)
|
29
|
+
]))
|
30
|
+
):
|
31
|
+
return UserClientSO.from_dbm(
|
32
|
+
simple_dbm=api_auth_data.user_token_dbm.user
|
33
|
+
)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import fastapi.requests
|
2
|
+
from fastapi import APIRouter
|
3
|
+
|
4
|
+
from project.api.auth import APIAuthData, api_auth, require_user_token_dbm_api_middleware, \
|
5
|
+
require_correct_api_key_or_api_key_dbm_api_middleware
|
6
|
+
from project.api.schema.out.client.user_token import UserTokenClientSO
|
7
|
+
from project.api.schema.out.common.error import ErrorCommonSO
|
8
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
9
|
+
|
10
|
+
api_router = APIRouter()
|
11
|
+
|
12
|
+
|
13
|
+
@api_router.get(
|
14
|
+
"",
|
15
|
+
name="Get current user token",
|
16
|
+
status_code=fastapi.status.HTTP_200_OK,
|
17
|
+
response_model=UserTokenClientSO | ErrorCommonSO,
|
18
|
+
)
|
19
|
+
async def _(
|
20
|
+
*,
|
21
|
+
request: fastapi.requests.Request,
|
22
|
+
response: fastapi.responses.Response,
|
23
|
+
api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
|
24
|
+
require_correct_api_key_or_api_key_dbm_api_middleware(require_active_api_key_dbm=True),
|
25
|
+
require_user_token_dbm_api_middleware(
|
26
|
+
require_active_user_token=True,
|
27
|
+
require_user_roles=[UserDBM.Roles.client]
|
28
|
+
)
|
29
|
+
]))
|
30
|
+
):
|
31
|
+
return UserTokenClientSO.from_dbm(
|
32
|
+
simple_dbm=api_auth_data.user_token_dbm
|
33
|
+
)
|
@@ -1,9 +1,8 @@
|
|
1
1
|
import fastapi.requests
|
2
2
|
from fastapi import APIRouter
|
3
3
|
|
4
|
-
from project.api.
|
5
|
-
|
6
|
-
try_find_user_token_dbm_api_middleware
|
4
|
+
from project.api.auth import APIAuthData, api_auth, require_user_token_dbm_api_middleware, \
|
5
|
+
require_correct_api_key_or_api_key_dbm_api_middleware
|
7
6
|
from project.api.const import APIErrorCodes, APIErrorSpecificationCodes
|
8
7
|
from project.api.schema.out.common.error import ErrorCommonSO
|
9
8
|
from project.api.schema.out.general.errors_info_general import ErrorsInfoGeneralSO
|
@@ -22,11 +21,10 @@ async def _(
|
|
22
21
|
request: fastapi.requests.Request,
|
23
22
|
response: fastapi.responses.Response,
|
24
23
|
api_auth_data: APIAuthData = fastapi.Depends(api_auth(middlewares=[
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
require_correct_api_key_or_api_key_dbm_api_middleware(require_active_api_key_dbm=True),
|
25
|
+
require_user_token_dbm_api_middleware(
|
26
|
+
require_active_user_token=True
|
27
|
+
)
|
30
28
|
]))
|
31
29
|
):
|
32
30
|
return ErrorsInfoGeneralSO(
|
@@ -1,3 +1,20 @@
|
|
1
1
|
from fastapi import APIRouter
|
2
2
|
|
3
|
+
from project.api.router.client import get_errors_info, get_current_user, get_current_user_token
|
4
|
+
|
3
5
|
main_client_api_router = APIRouter()
|
6
|
+
|
7
|
+
main_client_api_router.include_router(
|
8
|
+
router=get_errors_info.api_router,
|
9
|
+
prefix="/get_errors_info"
|
10
|
+
)
|
11
|
+
|
12
|
+
main_client_api_router.include_router(
|
13
|
+
router=get_current_user.api_router,
|
14
|
+
prefix="/get_current_user"
|
15
|
+
)
|
16
|
+
|
17
|
+
main_client_api_router.include_router(
|
18
|
+
router=get_current_user_token.api_router,
|
19
|
+
prefix="/get_current_user_token"
|
20
|
+
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from fastapi import APIRouter
|
2
2
|
|
3
|
-
from project.api.router.general import healthcheck
|
3
|
+
from project.api.router.general import healthcheck, now_utc_datetime
|
4
4
|
|
5
5
|
main_general_api_router = APIRouter()
|
6
6
|
|
@@ -8,3 +8,7 @@ main_general_api_router.include_router(
|
|
8
8
|
router=healthcheck.api_router,
|
9
9
|
prefix="/healthcheck"
|
10
10
|
)
|
11
|
+
main_general_api_router.include_router(
|
12
|
+
router=now_utc_datetime.api_router,
|
13
|
+
prefix="/now_utc_datetime"
|
14
|
+
)
|
@@ -1,6 +1,9 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import datetime as dt
|
2
4
|
|
3
5
|
from project.api.schema.common import BaseSO
|
6
|
+
from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
|
4
7
|
|
5
8
|
|
6
9
|
class SimpleDBMAdminSO(BaseSO):
|
@@ -8,3 +11,7 @@ class SimpleDBMAdminSO(BaseSO):
|
|
8
11
|
long_id: str
|
9
12
|
slug: str | None
|
10
13
|
creation_dt: dt.datetime
|
14
|
+
|
15
|
+
@classmethod
|
16
|
+
def from_dbm(cls, *, simple_dbm: SimpleDBM) -> SimpleDBMAdminSO:
|
17
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties())
|
@@ -19,5 +19,5 @@ class OperationAdminSO(SimpleDBMAdminSO):
|
|
19
19
|
duration_total_seconds: float | None
|
20
20
|
|
21
21
|
@classmethod
|
22
|
-
def
|
23
|
-
return cls.model_validate(
|
22
|
+
def from_dbm(cls, *, simple_dbm: OperationDBM) -> OperationAdminSO:
|
23
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties())
|
@@ -13,5 +13,5 @@ class StoryLogAdminSO(SimpleDBMAdminSO):
|
|
13
13
|
data: dict[str, Any]
|
14
14
|
|
15
15
|
@classmethod
|
16
|
-
def
|
17
|
-
return cls.model_validate(
|
16
|
+
def from_dbm(cls, *, simple_dbm: StoryLogDBM) -> StoryLogAdminSO:
|
17
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties())
|
@@ -1,6 +1,9 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import datetime as dt
|
2
4
|
|
3
5
|
from project.api.schema.common import BaseSO
|
6
|
+
from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
|
4
7
|
|
5
8
|
|
6
9
|
class SimpleDBMClientSO(BaseSO):
|
@@ -8,3 +11,7 @@ class SimpleDBMClientSO(BaseSO):
|
|
8
11
|
long_id: str
|
9
12
|
slug: str | None
|
10
13
|
creation_dt: dt.datetime
|
14
|
+
|
15
|
+
@classmethod
|
16
|
+
def from_dbm(cls, *, simple_dbm: SimpleDBM) -> SimpleDBMClientSO:
|
17
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties())
|
@@ -3,14 +3,14 @@ from __future__ import annotations
|
|
3
3
|
import datetime as dt
|
4
4
|
from typing import Any
|
5
5
|
|
6
|
-
from project.api.schema.out.
|
6
|
+
from project.api.schema.out.client.common import SimpleDBMClientSO
|
7
7
|
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
8
8
|
|
9
9
|
|
10
|
-
class
|
11
|
-
|
10
|
+
class UserClientSO(SimpleDBMClientSO):
|
11
|
+
email: str | None
|
12
12
|
roles: list[str]
|
13
|
-
|
13
|
+
is_active: bool
|
14
14
|
tg_id: int | None
|
15
15
|
tg_bot_last_action_dt: dt.datetime | None
|
16
16
|
tg_data: dict[str, Any] | None
|
@@ -18,5 +18,5 @@ class UserDBMSAdminSO(SimpleDBMAdminSO):
|
|
18
18
|
roles_has_client: bool
|
19
19
|
|
20
20
|
@classmethod
|
21
|
-
def
|
22
|
-
return cls.model_validate(
|
21
|
+
def from_dbm(cls, *, simple_dbm: UserDBM) -> UserClientSO:
|
22
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties())
|
@@ -0,0 +1,14 @@
|
|
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 UserTokenClientSO(SimpleDBMClientSO):
|
8
|
+
value: str
|
9
|
+
user_id: int
|
10
|
+
is_active: bool
|
11
|
+
|
12
|
+
@classmethod
|
13
|
+
def from_dbm(cls, *, simple_dbm: UserTokenDBM) -> UserTokenClientSO:
|
14
|
+
return cls.model_validate(simple_dbm.simple_dict_with_sd_properties())
|
@@ -84,24 +84,10 @@ class Settings(SimpleSettings):
|
|
84
84
|
|
85
85
|
api_init_json_db: bool = False
|
86
86
|
|
87
|
-
|
87
|
+
api_correct_api_keys: list[str] | None = ["1"]
|
88
88
|
|
89
|
-
@field_validator("
|
90
|
-
def
|
91
|
-
if isinstance(v, str):
|
92
|
-
v = [v]
|
93
|
-
if isinstance(v, int):
|
94
|
-
v = [str(v)]
|
95
|
-
if isinstance(v, list):
|
96
|
-
for i, v_ in enumerate(v):
|
97
|
-
if isinstance(v_, int):
|
98
|
-
v[i] = str(v_)
|
99
|
-
return v
|
100
|
-
|
101
|
-
api_user_tokens: list[str] | None = ["1"]
|
102
|
-
|
103
|
-
@field_validator("api_user_tokens", mode="before")
|
104
|
-
def validate_api_tokens(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
|
89
|
+
@field_validator("api_correct_api_keys", mode="before")
|
90
|
+
def validate_api_correct_api_keys(cls, v: Any, validation_info: ValidationInfo, **kwargs) -> list[str] | None:
|
105
91
|
if isinstance(v, str):
|
106
92
|
v = [v]
|
107
93
|
if isinstance(v, int):
|
@@ -118,8 +104,6 @@ class Settings(SimpleSettings):
|
|
118
104
|
|
119
105
|
api_start_scheduled_operation_creator_worker: bool = False
|
120
106
|
|
121
|
-
api_create_story_log_func_before_in_api_exception_handler: bool = False
|
122
|
-
|
123
107
|
sqladmin_secret_key: str | None = "85a9583cb91c4de7a78d7eb1e5306a04418c9c43014c447ea8ec8dd5deb4cf71"
|
124
108
|
|
125
109
|
sqladmin_auth_keys: list[str] | None = ["1"]
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/operation.py
CHANGED
@@ -34,9 +34,19 @@ class OperationDBM(SimpleDBM):
|
|
34
34
|
type: Mapped[str] = mapped_column(
|
35
35
|
sqlalchemy.TEXT, index=True, insert_default=Types.healthcheck_, nullable=False
|
36
36
|
)
|
37
|
-
title: Mapped[str | None] = mapped_column(
|
38
|
-
|
39
|
-
|
37
|
+
title: Mapped[str | None] = mapped_column(
|
38
|
+
sqlalchemy.TEXT,
|
39
|
+
insert_default=None,
|
40
|
+
nullable=True
|
41
|
+
)
|
42
|
+
execution_start_dt: Mapped[datetime | None] = mapped_column(
|
43
|
+
sqlalchemy.TIMESTAMP(timezone=True),
|
44
|
+
nullable=True
|
45
|
+
)
|
46
|
+
execution_finish_dt: Mapped[datetime | None] = mapped_column(
|
47
|
+
sqlalchemy.TIMESTAMP(timezone=True),
|
48
|
+
nullable=True
|
49
|
+
)
|
40
50
|
input_data: Mapped[dict[str, Any]] = mapped_column(
|
41
51
|
postgresql.JSON,
|
42
52
|
insert_default={},
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py
CHANGED
@@ -27,12 +27,27 @@ class StoryLogDBM(SimpleDBM):
|
|
27
27
|
error_in_tg_bot = "error_in_tg_bot"
|
28
28
|
|
29
29
|
level: Mapped[str] = mapped_column(
|
30
|
-
sqlalchemy.TEXT,
|
30
|
+
sqlalchemy.TEXT,
|
31
|
+
insert_default=Levels.info,
|
32
|
+
server_default=Levels.info,
|
33
|
+
index=True,
|
34
|
+
nullable=False
|
35
|
+
)
|
36
|
+
type: Mapped[str | None] = mapped_column(
|
37
|
+
sqlalchemy.TEXT,
|
38
|
+
index=True,
|
39
|
+
insert_default=None,
|
40
|
+
nullable=True)
|
41
|
+
title: Mapped[str | None] = mapped_column(
|
42
|
+
sqlalchemy.TEXT,
|
43
|
+
insert_default=None,
|
44
|
+
nullable=True
|
31
45
|
)
|
32
|
-
type: Mapped[str | None] = mapped_column(sqlalchemy.TEXT, index=True, insert_default=None, nullable=True)
|
33
|
-
title: Mapped[str | None] = mapped_column(sqlalchemy.TEXT, insert_default=None, nullable=True)
|
34
46
|
data: Mapped[dict[str, Any]] = mapped_column(
|
35
|
-
postgresql.JSON,
|
47
|
+
postgresql.JSON,
|
48
|
+
insert_default={},
|
49
|
+
server_default="{}",
|
50
|
+
nullable=False
|
36
51
|
)
|
37
52
|
|
38
53
|
|
@@ -21,7 +21,7 @@ class UserDBM(SimpleDBM):
|
|
21
21
|
admin = "admin"
|
22
22
|
client = "client"
|
23
23
|
|
24
|
-
|
24
|
+
email: Mapped[str | None] = mapped_column(
|
25
25
|
sqlalchemy.TEXT,
|
26
26
|
index=True,
|
27
27
|
insert_default=None,
|
@@ -33,7 +33,7 @@ class UserDBM(SimpleDBM):
|
|
33
33
|
index=True,
|
34
34
|
nullable=False
|
35
35
|
)
|
36
|
-
|
36
|
+
is_active: Mapped[bool] = mapped_column(
|
37
37
|
sqlalchemy.Boolean,
|
38
38
|
index=True,
|
39
39
|
insert_default=True,
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import asyncio
|
2
|
+
import logging
|
3
|
+
|
4
|
+
from project.core.settings import get_cached_settings
|
5
|
+
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
6
|
+
from project.sqlalchemy_db_.sqlalchemy_model import ApiKeyDBM
|
7
|
+
|
8
|
+
_logger = logging.getLogger(__name__)
|
9
|
+
|
10
|
+
|
11
|
+
def make_test_data_1():
|
12
|
+
get_cached_settings().raise_if_prod_mode()
|
13
|
+
with get_cached_sqlalchemy_db().new_session() as session:
|
14
|
+
for i in range(10):
|
15
|
+
api_key = ApiKeyDBM(value=str(i))
|
16
|
+
session.add(api_key)
|
17
|
+
_logger.info(api_key)
|
18
|
+
session.commit()
|
19
|
+
|
20
|
+
|
21
|
+
async def async_make_test_data_1():
|
22
|
+
get_cached_settings().raise_if_prod_mode()
|
23
|
+
|
24
|
+
|
25
|
+
def __example():
|
26
|
+
make_test_data_1()
|
27
|
+
|
28
|
+
|
29
|
+
async def __async_example():
|
30
|
+
await async_make_test_data_1()
|
31
|
+
|
32
|
+
|
33
|
+
if __name__ == '__main__':
|
34
|
+
__example()
|
35
|
+
asyncio.run(__async_example())
|
@@ -1,12 +1,14 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
|
+
from project.core.settings import get_cached_settings
|
4
|
+
|
3
5
|
|
4
6
|
def make_test_data_1():
|
5
|
-
|
7
|
+
get_cached_settings().raise_if_prod_mode()
|
6
8
|
|
7
9
|
|
8
10
|
async def async_make_test_data_1():
|
9
|
-
|
11
|
+
get_cached_settings().raise_if_prod_mode()
|
10
12
|
|
11
13
|
|
12
14
|
def __example():
|
@@ -1,12 +1,14 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
|
+
from project.core.settings import get_cached_settings
|
4
|
+
|
3
5
|
|
4
6
|
def make_test_data_2():
|
5
|
-
|
7
|
+
get_cached_settings().raise_if_prod_mode()
|
6
8
|
|
7
9
|
|
8
10
|
async def async_make_test_data_2():
|
9
|
-
|
11
|
+
get_cached_settings().raise_if_prod_mode()
|
10
12
|
|
11
13
|
|
12
14
|
def __example():
|
@@ -1,12 +1,14 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
|
+
from project.core.settings import get_cached_settings
|
4
|
+
|
3
5
|
|
4
6
|
def make_test_data_3():
|
5
|
-
|
7
|
+
get_cached_settings().raise_if_prod_mode()
|
6
8
|
|
7
9
|
|
8
10
|
async def async_make_test_data_3():
|
9
|
-
|
11
|
+
get_cached_settings().raise_if_prod_mode()
|
10
12
|
|
11
13
|
|
12
14
|
def __example():
|
@@ -1,12 +1,14 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
|
+
from project.core.settings import get_cached_settings
|
4
|
+
|
3
5
|
|
4
6
|
def make_test_data_4():
|
5
|
-
|
7
|
+
get_cached_settings().raise_if_prod_mode()
|
6
8
|
|
7
9
|
|
8
10
|
async def async_make_test_data_4():
|
9
|
-
|
11
|
+
get_cached_settings().raise_if_prod_mode()
|
10
12
|
|
11
13
|
|
12
14
|
def __example():
|
@@ -1,12 +1,14 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
|
+
from project.core.settings import get_cached_settings
|
4
|
+
|
3
5
|
|
4
6
|
def make_test_data_5():
|
5
|
-
|
7
|
+
get_cached_settings().raise_if_prod_mode()
|
6
8
|
|
7
9
|
|
8
10
|
async def async_make_test_data_5():
|
9
|
-
|
11
|
+
get_cached_settings().raise_if_prod_mode()
|
10
12
|
|
11
13
|
|
12
14
|
def __example():
|
@@ -10,7 +10,8 @@ class ClientTgBotBlank(SimpleBlankTgBot):
|
|
10
10
|
def command_to_desc(self) -> dict[str, str]:
|
11
11
|
return {
|
12
12
|
ClientTgBotCommands.start: emojize(":waving_hand: Начать"),
|
13
|
-
ClientTgBotCommands.about: emojize(":information: О проекте")
|
13
|
+
ClientTgBotCommands.about: emojize(":information: О проекте"),
|
14
|
+
ClientTgBotCommands.author: emojize(":bust_in_silhouette: Авторы"),
|
14
15
|
}
|
15
16
|
|
16
17
|
def but_hello_world(self) -> str:
|
@@ -31,24 +32,31 @@ class ClientTgBotBlank(SimpleBlankTgBot):
|
|
31
32
|
res = "healthcheck"
|
32
33
|
return emojize(res.strip())
|
33
34
|
|
35
|
+
def author(self) -> str:
|
36
|
+
res = "<b>ARPAKIT Company</b>"
|
37
|
+
res += "\n\n<i>Мы создаём качественные IT продукты<i>"
|
38
|
+
res += "\n\n:link: https://arpakit.com/"
|
39
|
+
res += "\n\n:e-mail: support@arpakit.com"
|
40
|
+
return emojize(res.strip())
|
41
|
+
|
34
42
|
def welcome(self) -> str:
|
35
43
|
res = ":waving_hand: <b>Welcome</b> :waving_hand:"
|
36
44
|
return emojize(res.strip())
|
37
45
|
|
38
46
|
def raw_message(self) -> str:
|
39
|
-
res = ":warning: <b
|
47
|
+
res = ":warning: <b>Сообщение не обработано</b> :warning:"
|
40
48
|
return emojize(res.strip())
|
41
49
|
|
42
|
-
def
|
50
|
+
def about(self) -> str:
|
43
51
|
res = ":information: <b>О проекте</b>"
|
44
52
|
return emojize(res.strip())
|
45
53
|
|
46
|
-
def
|
54
|
+
def support(self) -> str:
|
47
55
|
res = ":red_heart: <b>Поддержка</b>"
|
48
56
|
return emojize(res.strip())
|
49
57
|
|
50
58
|
def keyboard_is_old(self) -> str:
|
51
|
-
res = ":information:
|
59
|
+
res = ":information: Эта клавиатура устарела :information:"
|
52
60
|
return emojize(res.strip())
|
53
61
|
|
54
62
|
|
@@ -62,7 +70,7 @@ def get_cached_client_tg_bot_blank() -> ClientTgBotBlank:
|
|
62
70
|
|
63
71
|
|
64
72
|
def __example():
|
65
|
-
print(get_cached_client_tg_bot_blank().
|
73
|
+
print(get_cached_client_tg_bot_blank().author())
|
66
74
|
|
67
75
|
|
68
76
|
if __name__ == '__main__':
|