arpakitlib 1.7.104__py3-none-any.whl → 1.7.106__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/src/admin1/__init__.py +0 -0
- arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py +23 -0
- arpakitlib/_arpakit_project_template/src/admin1/admin_auth.py +32 -0
- arpakitlib/_arpakit_project_template/src/admin1/model_view.py +14 -0
- arpakitlib/_arpakit_project_template/src/api/create_api_app.py +5 -2
- arpakitlib/_arpakit_project_template/src/core/settings.py +4 -0
- arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py +6 -4
- arpakitlib/_arpakit_project_template/src/operation_execution/util.py +1 -3
- arpakitlib/ar_settings_util.py +1 -1
- {arpakitlib-1.7.104.dist-info → arpakitlib-1.7.106.dist-info}/METADATA +11 -4
- {arpakitlib-1.7.104.dist-info → arpakitlib-1.7.106.dist-info}/RECORD +15 -11
- {arpakitlib-1.7.104.dist-info → arpakitlib-1.7.106.dist-info}/LICENSE +0 -0
- {arpakitlib-1.7.104.dist-info → arpakitlib-1.7.106.dist-info}/NOTICE +0 -0
- {arpakitlib-1.7.104.dist-info → arpakitlib-1.7.106.dist-info}/WHEEL +0 -0
- {arpakitlib-1.7.104.dist-info → arpakitlib-1.7.106.dist-info}/entry_points.txt +0 -0
File without changes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
from fastapi import FastAPI
|
2
|
+
from sqladmin import Admin
|
3
|
+
|
4
|
+
from src.admin1.admin_auth import AdminAuth
|
5
|
+
from src.api.transmitted_api_data import TransmittedAPIData
|
6
|
+
|
7
|
+
|
8
|
+
def add_admin1_in_app(*, app: FastAPI) -> FastAPI:
|
9
|
+
transmitted_api_data: TransmittedAPIData = app.state.transmitted_api_data
|
10
|
+
|
11
|
+
authentication_backend = AdminAuth()
|
12
|
+
|
13
|
+
admin = Admin(
|
14
|
+
app=app,
|
15
|
+
engine=transmitted_api_data.sqlalchemy_db.engine,
|
16
|
+
base_url="/admin1",
|
17
|
+
authentication_backend=authentication_backend,
|
18
|
+
title="{PROJECT_NAME}"
|
19
|
+
)
|
20
|
+
|
21
|
+
# admin.add_model_view(CurrentSemesterMV)
|
22
|
+
|
23
|
+
return app
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from sqladmin.authentication import AuthenticationBackend
|
4
|
+
from starlette.requests import Request
|
5
|
+
|
6
|
+
from src.core.settings import get_cached_settings
|
7
|
+
|
8
|
+
|
9
|
+
class AdminAuth(AuthenticationBackend):
|
10
|
+
def __init__(self):
|
11
|
+
self._logger = logging.getLogger(self.__class__.__name__)
|
12
|
+
super().__init__(secret_key=get_cached_settings().sec)
|
13
|
+
|
14
|
+
async def login(self, request: Request) -> bool:
|
15
|
+
form = await request.form()
|
16
|
+
|
17
|
+
# ...
|
18
|
+
|
19
|
+
# request.session.update(...)
|
20
|
+
|
21
|
+
return True
|
22
|
+
|
23
|
+
async def logout(self, request: Request) -> bool:
|
24
|
+
request.session.clear()
|
25
|
+
return True
|
26
|
+
|
27
|
+
async def authenticate(self, request: Request) -> bool:
|
28
|
+
# request.session.get("...")
|
29
|
+
|
30
|
+
# ...
|
31
|
+
|
32
|
+
return True
|
@@ -0,0 +1,14 @@
|
|
1
|
+
from sqladmin import ModelView
|
2
|
+
|
3
|
+
|
4
|
+
class BaseModelView(ModelView):
|
5
|
+
can_create = True
|
6
|
+
can_edit = True
|
7
|
+
can_delete = True
|
8
|
+
can_view_details = True
|
9
|
+
can_export = True
|
10
|
+
page_size = 50
|
11
|
+
page_size_options = [25, 50, 100, 200]
|
12
|
+
save_as = True
|
13
|
+
save_as_continue = True
|
14
|
+
export_types = ["xlsx", "csv", "json"]
|
@@ -2,7 +2,7 @@ from fastapi import FastAPI
|
|
2
2
|
|
3
3
|
from arpakitlib.ar_base_worker_util import SafeRunInBackgroundModes
|
4
4
|
from arpakitlib.ar_fastapi_util import create_fastapi_app, InitSqlalchemyDBStartupAPIEvent, InitFileStoragesInDir, \
|
5
|
-
create_handle_exception, create_story_log_before_response_in_handle_exception,
|
5
|
+
create_handle_exception, create_story_log_before_response_in_handle_exception, \
|
6
6
|
SafeRunWorkerStartupAPIEvent
|
7
7
|
from arpakitlib.ar_operation_execution_util import OperationExecutorWorker, ScheduledOperationCreatorWorker
|
8
8
|
from arpakitlib.ar_sqlalchemy_util import SQLAlchemyDB
|
@@ -105,11 +105,14 @@ def create_api_app() -> FastAPI:
|
|
105
105
|
shutdown_api_events=shutdown_api_events,
|
106
106
|
transmitted_api_data=transmitted_api_data,
|
107
107
|
main_api_router=main_api_router,
|
108
|
-
contact=DEFAULT_CONTACT,
|
109
108
|
media_dirpath=settings.media_dirpath,
|
110
109
|
static_dirpath=STATIC_DIRPATH
|
111
110
|
)
|
112
111
|
|
112
|
+
if settings.api_enable_admin1:
|
113
|
+
from src.admin1.add_admin_in_app import add_admin1_in_app
|
114
|
+
add_admin1_in_app(app=api_app)
|
115
|
+
|
113
116
|
return api_app
|
114
117
|
|
115
118
|
|
@@ -37,6 +37,8 @@ class Settings(SimpleSettings):
|
|
37
37
|
|
38
38
|
api_correct_token: str | None = "1"
|
39
39
|
|
40
|
+
api_enable_admin1: bool = True
|
41
|
+
|
40
42
|
var_dirname: str | None = "var"
|
41
43
|
|
42
44
|
var_dirpath: str | None = os.path.join(BASE_DIRPATH, var_dirname)
|
@@ -63,6 +65,8 @@ class Settings(SimpleSettings):
|
|
63
65
|
def local_timezone_as_pytz(self) -> Any:
|
64
66
|
return pytz.timezone(self.local_timezone)
|
65
67
|
|
68
|
+
admin1_secret_key: str | None = "85a9583cb91c4de7a78d7eb1e5306a04418c9c43014c447ea8ec8dd5deb4cf71"
|
69
|
+
|
66
70
|
# ...
|
67
71
|
|
68
72
|
|
@@ -1,14 +1,16 @@
|
|
1
|
+
from sqlalchemy.orm import Session
|
2
|
+
|
1
3
|
from arpakitlib.ar_operation_execution_util import BaseOperationExecutor
|
2
4
|
from arpakitlib.ar_sqlalchemy_model_util import OperationDBM
|
3
5
|
|
4
6
|
|
5
7
|
class OperationExecutor(BaseOperationExecutor):
|
6
|
-
def sync_execute_operation(self, operation_dbm: OperationDBM) -> OperationDBM:
|
8
|
+
def sync_execute_operation(self, operation_dbm: OperationDBM, session: Session) -> OperationDBM:
|
7
9
|
# ...
|
8
|
-
operation_dbm = super().sync_execute_operation(operation_dbm=operation_dbm)
|
10
|
+
operation_dbm = super().sync_execute_operation(operation_dbm=operation_dbm, session=session)
|
9
11
|
return operation_dbm
|
10
12
|
|
11
|
-
async def async_execute_operation(self, operation_dbm: OperationDBM) -> OperationDBM:
|
13
|
+
async def async_execute_operation(self, operation_dbm: OperationDBM, session: Session) -> OperationDBM:
|
12
14
|
# ...
|
13
|
-
operation_dbm = await super().async_execute_operation(operation_dbm=operation_dbm)
|
15
|
+
operation_dbm = await super().async_execute_operation(operation_dbm=operation_dbm, session=session)
|
14
16
|
return operation_dbm
|
@@ -9,9 +9,7 @@ def create_scheduled_operation_creator_worker() -> ScheduledOperationCreatorWork
|
|
9
9
|
from src.operation_execution.scheduled_operations import ALL_SCHEDULED_OPERATIONS
|
10
10
|
scheduled_operation_creator_worker = ScheduledOperationCreatorWorker(
|
11
11
|
sqlalchemy_db=get_cached_sqlalchemy_db(),
|
12
|
-
scheduled_operations=ALL_SCHEDULED_OPERATIONS
|
13
|
-
timeout_after_run=timedelta(seconds=0.1).total_seconds(),
|
14
|
-
timeout_after_err_in_run=timedelta(seconds=1).total_seconds()
|
12
|
+
scheduled_operations=ALL_SCHEDULED_OPERATIONS
|
15
13
|
)
|
16
14
|
return scheduled_operation_creator_worker
|
17
15
|
|
arpakitlib/ar_settings_util.py
CHANGED
@@ -33,7 +33,7 @@ class SimpleSettings(BaseSettings):
|
|
33
33
|
@field_validator("mode_type")
|
34
34
|
@classmethod
|
35
35
|
def validate_mode_type(cls, v: str):
|
36
|
-
cls.ModeTypes.parse_and_validate_values(v)
|
36
|
+
cls.ModeTypes.parse_and_validate_values(v.lower().strip())
|
37
37
|
return v
|
38
38
|
|
39
39
|
@property
|
@@ -1,21 +1,21 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: arpakitlib
|
3
|
-
Version: 1.7.
|
3
|
+
Version: 1.7.106
|
4
4
|
Summary: arpakitlib
|
5
5
|
Home-page: https://github.com/ARPAKIT-Company/arpakitlib
|
6
6
|
License: Apache-2.0
|
7
7
|
Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
|
8
8
|
Author: arpakit
|
9
9
|
Author-email: arpakit@gmail.com
|
10
|
-
Requires-Python: >=3.12,<4.0
|
10
|
+
Requires-Python: >=3.12.4,<4.0
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
12
12
|
Classifier: Intended Audience :: Developers
|
13
13
|
Classifier: License :: OSI Approved :: Apache Software License
|
14
14
|
Classifier: Operating System :: OS Independent
|
15
15
|
Classifier: Programming Language :: Python
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
17
|
-
Classifier: Programming Language :: Python :: 3.12
|
18
17
|
Classifier: Programming Language :: Python :: 3.13
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
19
19
|
Classifier: Topic :: Software Development :: Libraries
|
20
20
|
Requires-Dist: aiogram (>=3.15.0,<4.0.0)
|
21
21
|
Requires-Dist: aiohttp-socks (>=0.9.1,<0.10.0)
|
@@ -46,7 +46,7 @@ Requires-Dist: pytz (>=2024.2,<2025.0)
|
|
46
46
|
Requires-Dist: pyzabbix (>=1.3.1,<2.0.0)
|
47
47
|
Requires-Dist: redis (>=5.2.0,<6.0.0)
|
48
48
|
Requires-Dist: requests[socks] (>=2.32.3,<3.0.0)
|
49
|
-
Requires-Dist: sqladmin (>=0.20.1,<0.21.0)
|
49
|
+
Requires-Dist: sqladmin[full] (>=0.20.1,<0.21.0)
|
50
50
|
Requires-Dist: sqlalchemy (>=2.0.36,<3.0.0)
|
51
51
|
Requires-Dist: twine (>=6.0.1,<7.0.0)
|
52
52
|
Requires-Dist: uvicorn (>=0.32.1,<0.33.0)
|
@@ -80,6 +80,13 @@ poetry add arpakitlib
|
|
80
80
|
pip install arpakitlib
|
81
81
|
```
|
82
82
|
|
83
|
+
### Init template
|
84
|
+
|
85
|
+
```
|
86
|
+
# poetry run arpakitlib -c help
|
87
|
+
poetry run arpakitlib -c init_arpakit_project_template -project_dirpath ./ -overwrite_if_exists true -project_name ... -sql_db_port ... (optional) -api_port ... (optional) -ignore_paths_startswith ... (optional) -only_paths_startswith ...(optional)
|
88
|
+
```
|
89
|
+
|
83
90
|
---
|
84
91
|
|
85
92
|
### Links
|
@@ -71,11 +71,15 @@ arpakitlib/_arpakit_project_template/resource/static/helloworld,sha256=eH7Hbcr9I
|
|
71
71
|
arpakitlib/_arpakit_project_template/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
72
|
arpakitlib/_arpakit_project_template/src/additional_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73
73
|
arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py,sha256=4KCOvto9Hj5eMYpvfaJChghhR9bkCvKluGGPWrTezoY,134
|
74
|
+
arpakitlib/_arpakit_project_template/src/admin1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
|
+
arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py,sha256=mI4wPh49aEtylunAg4jL7YuCbKGs9RIk1vpmzrlX828,611
|
76
|
+
arpakitlib/_arpakit_project_template/src/admin1/admin_auth.py,sha256=8ONlFhGzja2grk9R8rlSTFY8P5VJKr06iP-p_C1bFiw,765
|
77
|
+
arpakitlib/_arpakit_project_template/src/admin1/model_view.py,sha256=jZLvrPfSHuxNu_Z54jG-CXi97ol6ILSMErgzYTSd8ig,331
|
74
78
|
arpakitlib/_arpakit_project_template/src/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
79
|
arpakitlib/_arpakit_project_template/src/api/asgi.py,sha256=a5UBxOyNC8NG3E0ayhiDo3t5tPoB3WtOf2gbZJFWBAA,74
|
76
80
|
arpakitlib/_arpakit_project_template/src/api/auth.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
|
77
81
|
arpakitlib/_arpakit_project_template/src/api/const.py,sha256=7d4qD5hedqr7QxVzbfsA7E1bNZn2Pm2U8joXGtpANu0,287
|
78
|
-
arpakitlib/_arpakit_project_template/src/api/create_api_app.py,sha256=
|
82
|
+
arpakitlib/_arpakit_project_template/src/api/create_api_app.py,sha256=dyQ27STh002v1TJsozJr9dM0r0WOU4jjR3_iaYWkq7w,4685
|
79
83
|
arpakitlib/_arpakit_project_template/src/api/event.py,sha256=58wCVyVSIe_kydWi44M0Wvp7bTnV8xvO30gMXzjbFYc,750
|
80
84
|
arpakitlib/_arpakit_project_template/src/api/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81
85
|
arpakitlib/_arpakit_project_template/src/api/router/main_router.py,sha256=Yv699WCJDcdiJMXFg1kPTvolqj-NAGoXfqe-vzbMzIU,228
|
@@ -93,7 +97,7 @@ arpakitlib/_arpakit_project_template/src/api/util.py,sha256=47DEQpj8HBSa-_TImW-5
|
|
93
97
|
arpakitlib/_arpakit_project_template/src/business_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
94
98
|
arpakitlib/_arpakit_project_template/src/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
95
99
|
arpakitlib/_arpakit_project_template/src/core/const.py,sha256=CZZew674y7LhCAlYhvuF5cV4Zb9nQ17j2Tcuj2GEBf4,1232
|
96
|
-
arpakitlib/_arpakit_project_template/src/core/settings.py,sha256=
|
100
|
+
arpakitlib/_arpakit_project_template/src/core/settings.py,sha256=Q58I0qHbVCfPtZxGcFKPdFMC8KGWiSR0OsxP_kr4-nc,2378
|
97
101
|
arpakitlib/_arpakit_project_template/src/core/util.py,sha256=5R8gvcZdvuDQes45FBnLC2IDv2Jhajp1VhJJYNKYjMQ,1539
|
98
102
|
arpakitlib/_arpakit_project_template/src/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
99
103
|
arpakitlib/_arpakit_project_template/src/db/const.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -101,11 +105,11 @@ arpakitlib/_arpakit_project_template/src/db/sqlalchemy_model.py,sha256=nXtayUkBa
|
|
101
105
|
arpakitlib/_arpakit_project_template/src/db/util.py,sha256=8Jg9TtTwvyxVYIN_W5_lk9y-Pyh8To1aMRFUKCRDuuA,550
|
102
106
|
arpakitlib/_arpakit_project_template/src/operation_execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
103
107
|
arpakitlib/_arpakit_project_template/src/operation_execution/const.py,sha256=HjupGEDUWVijQlbzxZPI9vBbAVOETUYzYU9pdnc9IcI,176
|
104
|
-
arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py,sha256=
|
108
|
+
arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py,sha256=TuAlF3QPJq-Zsq693NHQ00dvCWAzuwce2q6ozesWFYY,725
|
105
109
|
arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py,sha256=hBPZIOJAX7ym54s2tJ2QRky15FqqDF9r4yTr8Nh2YqI,985
|
106
110
|
arpakitlib/_arpakit_project_template/src/operation_execution/start_operation_executor_worker_for_dev.py,sha256=uC9KxA3n9ul4YVg2bD4626ikUIv_kLc6TqyUQV_tWtc,626
|
107
111
|
arpakitlib/_arpakit_project_template/src/operation_execution/start_scheduled_operation_creator_worker_for_dev.py,sha256=qZFXZqdrL_vMSeajwhVFZrWhAlyU9G1PjKYMMgZn4sA,597
|
108
|
-
arpakitlib/_arpakit_project_template/src/operation_execution/util.py,sha256=
|
112
|
+
arpakitlib/_arpakit_project_template/src/operation_execution/util.py,sha256=WfpeiHS-L6xTIoYI63Xw9mrADTgFJQlt4fG0U4wNAt4,749
|
109
113
|
arpakitlib/_arpakit_project_template/src/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
110
114
|
arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py,sha256=3WVPgRsNCIxWpA-6t_Phe-nFULdHPhS1S_DO11XRmqk,80
|
111
115
|
arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py,sha256=MVDc71sj5I1muWin50GwrSxMwYtOOSDOtRmeFErHcXs,80
|
@@ -170,7 +174,7 @@ arpakitlib/ar_parse_command.py,sha256=-s61xcATIsfw1eV_iD3xi-grsitbGzSDoAFc5V0OFy
|
|
170
174
|
arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
|
171
175
|
arpakitlib/ar_run_cmd_util.py,sha256=D_rPavKMmWkQtwvZFz-Io5Ak8eSODHkcFeLPzNVC68g,1072
|
172
176
|
arpakitlib/ar_schedule_uust_api_client_util.py,sha256=0Ns0mMEXYEkVmP6YTAXHyNcrhNsvCJ8X-G_5XwILhJ4,6855
|
173
|
-
arpakitlib/ar_settings_util.py,sha256=
|
177
|
+
arpakitlib/ar_settings_util.py,sha256=eZhZ-zwSataBC07dKp0A5TAOb-RnrzZNHaIx16O6Fv8,1599
|
174
178
|
arpakitlib/ar_sleep_util.py,sha256=OaLtRaJQWMkGjfj_mW1RB2P4RaSWsAIH8LUoXqsH0zM,1061
|
175
179
|
arpakitlib/ar_sqlalchemy_model_util.py,sha256=nKJGN32eg3Gn5kmJwHdVJznPT5TydLsfUfwJGdypdUo,6264
|
176
180
|
arpakitlib/ar_sqlalchemy_util.py,sha256=Hcg1THrDsSR_-8dsY1CG3NWPEv0FqCbkPXFXLtjlSJ0,4207
|
@@ -179,9 +183,9 @@ arpakitlib/ar_str_util.py,sha256=tFoGSDYoGpfdVHWor5Li9pEOFmDFlHkX-Z8iOy1LK7Y,353
|
|
179
183
|
arpakitlib/ar_type_util.py,sha256=7eqhkRcRpTIsIP_9EvnU-WoySLt1o1Ro88-5ZJui600,3719
|
180
184
|
arpakitlib/ar_yookassa_api_client_util.py,sha256=sh4fcUkAkdOetFn9JYoTvjcSXP-M1wU04KEY-ECLfLg,5137
|
181
185
|
arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
|
182
|
-
arpakitlib-1.7.
|
183
|
-
arpakitlib-1.7.
|
184
|
-
arpakitlib-1.7.
|
185
|
-
arpakitlib-1.7.
|
186
|
-
arpakitlib-1.7.
|
187
|
-
arpakitlib-1.7.
|
186
|
+
arpakitlib-1.7.106.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
187
|
+
arpakitlib-1.7.106.dist-info/METADATA,sha256=sdsXzQDEJhpTe69aCeJKLVBc3slMeSOGDIsFF41Gm9E,3142
|
188
|
+
arpakitlib-1.7.106.dist-info/NOTICE,sha256=95aUzaPJjVpDsGAsNzVnq7tHTxAl0s5UFznCTkVCau4,763
|
189
|
+
arpakitlib-1.7.106.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
190
|
+
arpakitlib-1.7.106.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
191
|
+
arpakitlib-1.7.106.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|