arpakitlib 1.7.104__py3-none-any.whl → 1.7.105__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.
@@ -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, DEFAULT_CONTACT, \
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: arpakitlib
3
- Version: 1.7.104
3
+ Version: 1.7.105
4
4
  Summary: arpakitlib
5
5
  Home-page: https://github.com/ARPAKIT-Company/arpakitlib
6
6
  License: Apache-2.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=lDE77W6WkeAeRB_vJY3TXRTa3HeiO-t26eTtG7v8j6U,4594
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=S1WPgnFWiRNjCXLllZHq6xp3AiyzzqnRBubg02iRkvo,2238
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
@@ -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.104.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
183
- arpakitlib-1.7.104.dist-info/METADATA,sha256=JkI3l68BFAfOhPnMjek_HkOOogL0wUt-i1A88ReVYf0,2825
184
- arpakitlib-1.7.104.dist-info/NOTICE,sha256=95aUzaPJjVpDsGAsNzVnq7tHTxAl0s5UFznCTkVCau4,763
185
- arpakitlib-1.7.104.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
186
- arpakitlib-1.7.104.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
187
- arpakitlib-1.7.104.dist-info/RECORD,,
186
+ arpakitlib-1.7.105.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
187
+ arpakitlib-1.7.105.dist-info/METADATA,sha256=D5IJfRiZhi5JdIZ22aW6at2YKBKLpyw59nD5433YF-k,3140
188
+ arpakitlib-1.7.105.dist-info/NOTICE,sha256=95aUzaPJjVpDsGAsNzVnq7tHTxAl0s5UFznCTkVCau4,763
189
+ arpakitlib-1.7.105.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
190
+ arpakitlib-1.7.105.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
191
+ arpakitlib-1.7.105.dist-info/RECORD,,