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.
@@ -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,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
 
@@ -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.104
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=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
@@ -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=5sZpn3tVxnmcuIVRD5sbBhiMY5SAqPCc4tHzoNzDe4c,619
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=wEplkGcSCA9PV2-BgUNHRpuZnaC6z4FouyzVT-UFm48,886
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=EFRh5WrB_iaqwxy0rGAtnyGtA6JkNCan-Y_Y6XWb4UY,1583
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.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.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,,