arpakitlib 1.8.226__py3-none-any.whl → 1.8.228__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.
Files changed (18) hide show
  1. arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json +1 -1
  2. arpakitlib/_arpakit_project_template_v_5/project/api/{const.py → api_error_codes.py} +3 -0
  3. arpakitlib/_arpakit_project_template_v_5/project/api/authorize.py +1 -1
  4. arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py +2 -7
  5. arpakitlib/_arpakit_project_template_v_5/project/api/exception.py +1 -1
  6. arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py +2 -2
  7. arpakitlib/_arpakit_project_template_v_5/project/api/middleware/__init__.py +0 -0
  8. arpakitlib/_arpakit_project_template_v_5/project/api/middleware/add_api_middlewares.py +15 -0
  9. arpakitlib/_arpakit_project_template_v_5/project/api/middleware/limit_content_length.py +48 -0
  10. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_api_exception_3.py +1 -1
  11. arpakitlib/_arpakit_project_template_v_5/project/api/router/general/get_errors_info.py +1 -1
  12. arpakitlib/_arpakit_project_template_v_5/project/api/start_api.py +4 -1
  13. arpakitlib/_arpakit_project_template_v_5/project/core/settings.py +6 -0
  14. {arpakitlib-1.8.226.dist-info → arpakitlib-1.8.228.dist-info}/METADATA +1 -1
  15. {arpakitlib-1.8.226.dist-info → arpakitlib-1.8.228.dist-info}/RECORD +18 -15
  16. {arpakitlib-1.8.226.dist-info → arpakitlib-1.8.228.dist-info}/LICENSE +0 -0
  17. {arpakitlib-1.8.226.dist-info → arpakitlib-1.8.228.dist-info}/WHEEL +0 -0
  18. {arpakitlib-1.8.226.dist-info → arpakitlib-1.8.228.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "arpakitlib_project_template_version": "5",
3
- "arpakitlib_project_template_subversion": "55"
3
+ "arpakitlib_project_template_subversion": "57"
4
4
  }
@@ -7,6 +7,9 @@ class APIErrorCodes(Enumeration):
7
7
  error_in_request = "ERROR_IN_REQUEST"
8
8
  not_found = "NOT_FOUND"
9
9
 
10
+ class Common(Enumeration):
11
+ content_length_is_too_big = "content_length_is_too_big".upper()
12
+
10
13
 
11
14
  class APIErrorSpecificationCodes(Enumeration):
12
15
  pass
@@ -12,7 +12,7 @@ from sqlalchemy.orm import joinedload
12
12
 
13
13
  from arpakitlib.ar_func_util import is_async_func, is_sync_func
14
14
  from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
15
- from project.api.const import APIErrorCodes
15
+ from project.api.api_error_codes import APIErrorCodes
16
16
  from project.api.exception import APIException
17
17
  from project.core.settings import get_cached_settings
18
18
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
@@ -8,6 +8,7 @@ from fastapi.staticfiles import StaticFiles
8
8
 
9
9
  from project.api.event import get_startup_api_events, get_shutdown_api_events
10
10
  from project.api.exception_handler import add_exception_handler_to_api_app
11
+ from project.api.middleware.add_api_middlewares import add_api_middlewares
11
12
  from project.api.openapi_ui import add_local_openapi_ui_to_api_app
12
13
  from project.api.router.main_router import main_api_router
13
14
  from project.core.const import ProjectPaths
@@ -38,13 +39,7 @@ def create_api_app(*, prefix: str = "/api") -> FastAPI:
38
39
  },
39
40
  )
40
41
 
41
- api_app.add_middleware(
42
- CORSMiddleware,
43
- allow_origins=["*"],
44
- allow_credentials=True,
45
- allow_methods=["*"],
46
- allow_headers=["*"],
47
- )
42
+ add_api_middlewares(app=api_app)
48
43
 
49
44
  add_local_openapi_ui_to_api_app(
50
45
  app=api_app,
@@ -2,7 +2,7 @@ from typing import Any
2
2
 
3
3
  import fastapi.security
4
4
 
5
- from project.api.const import APIErrorCodes
5
+ from project.api.api_error_codes import APIErrorCodes
6
6
  from project.api.schema.out.common.error import ErrorCommonSO
7
7
 
8
8
 
@@ -11,7 +11,7 @@ from arpakitlib.ar_datetime_util import now_utc_dt
11
11
  from arpakitlib.ar_dict_util import combine_dicts
12
12
  from arpakitlib.ar_exception_util import exception_to_traceback_str
13
13
  from arpakitlib.ar_func_util import raise_if_not_async_func, is_async_func, is_sync_func
14
- from project.api.const import APIErrorCodes
14
+ from project.api.api_error_codes import APIErrorCodes
15
15
  from project.api.exception import APIException
16
16
  from project.api.response import APIJSONResponse
17
17
  from project.api.schema.out.common.error import ErrorCommonSO
@@ -175,7 +175,7 @@ def logging_func_before_in_api_exception_handler(
175
175
  return
176
176
 
177
177
  if isinstance(exception, APIException):
178
- if exception.kwargs_.get("logging") is False:
178
+ if exception.kwargs_.get("logging_full_error") is False:
179
179
  return
180
180
 
181
181
  _logger.exception(exception)
@@ -0,0 +1,15 @@
1
+ from fastapi import FastAPI
2
+ from starlette.middleware.cors import CORSMiddleware
3
+
4
+ from project.api.middleware.limit_content_length import LimitContentLengthMiddleware
5
+
6
+
7
+ def add_api_middlewares(*, app: FastAPI):
8
+ app.add_middleware(
9
+ CORSMiddleware,
10
+ allow_origins=["*"],
11
+ allow_credentials=True,
12
+ allow_methods=["*"],
13
+ allow_headers=["*"],
14
+ )
15
+ app.add_middleware(LimitContentLengthMiddleware, max_body_size=5 * 1024 * 1024)
@@ -0,0 +1,48 @@
1
+ import uvicorn
2
+ from fastapi import FastAPI, Request
3
+ from starlette import status
4
+ from starlette.middleware.base import BaseHTTPMiddleware
5
+ from starlette.responses import JSONResponse
6
+
7
+ from project.api.api_error_codes import APIErrorCodes
8
+ from project.api.schema.out.common.error import ErrorCommonSO
9
+
10
+
11
+ class LimitContentLengthMiddleware(BaseHTTPMiddleware):
12
+ def __init__(self, app, max_body_size: int = 5 * 1024 * 1024):
13
+ super().__init__(app)
14
+ self.max_body_size = max_body_size
15
+
16
+ async def dispatch(self, request: Request, call_next):
17
+ content_length = request.headers.get("content-length")
18
+ if content_length is None:
19
+ return await call_next(request)
20
+ if isinstance(content_length, str) and not content_length.isdigit():
21
+ return await call_next(request)
22
+ content_length = int(content_length)
23
+ if content_length > self.max_body_size:
24
+ return JSONResponse(
25
+ status_code=status.HTTP_413_REQUEST_ENTITY_TOO_LARGE,
26
+ content=ErrorCommonSO(
27
+ has_error=True,
28
+ error_code=APIErrorCodes.Common.content_length_is_too_big
29
+ ).model_dump_json()
30
+ )
31
+
32
+ return await call_next(request)
33
+
34
+
35
+ def __example():
36
+ app = FastAPI()
37
+ app.add_middleware(LimitContentLengthMiddleware, max_body_size=5 * 1024 * 1024) # 5 MB
38
+
39
+ @app.post("/upload")
40
+ async def upload_file(request: Request):
41
+ data = await request.body()
42
+ return {"size": len(data)}
43
+
44
+ uvicorn.run(app)
45
+
46
+
47
+ if __name__ == '__main__':
48
+ __example()
@@ -35,6 +35,6 @@ async def _(
35
35
  error_specification_code="3",
36
36
  error_description="Simple, logging=False",
37
37
  kwargs_={
38
- "logging": False
38
+ "logging_full_error": False
39
39
  }
40
40
  )
@@ -2,7 +2,7 @@ import fastapi.requests
2
2
  from fastapi import APIRouter
3
3
 
4
4
  from project.api.authorize import APIAuthorizeData, api_authorize, require_api_key_dbm_api_authorize_middleware
5
- from project.api.const import APIErrorCodes, APIErrorSpecificationCodes
5
+ from project.api.api_error_codes import APIErrorCodes, APIErrorSpecificationCodes
6
6
  from project.api.schema.common import BaseSO
7
7
  from project.api.schema.out.common.error import ErrorCommonSO
8
8
 
@@ -13,7 +13,10 @@ def start_api():
13
13
  port=get_cached_settings().api_port,
14
14
  host=get_cached_settings().api_host,
15
15
  workers=get_cached_settings().api_workers,
16
- reload=get_cached_settings().api_reload
16
+ reload=get_cached_settings().api_reload,
17
+ timeout_keep_alive=get_cached_settings().api_uvicorn_timeout_keep_alive,
18
+ limit_concurrency=get_cached_settings().api_uvicorn_limit_concurrency,
19
+ backlog=get_cached_settings().api_uvicorn_backlog,
17
20
  )
18
21
 
19
22
 
@@ -129,6 +129,12 @@ class Settings(SimpleSettings):
129
129
 
130
130
  api_openapi_url: str = "/secret/openapi"
131
131
 
132
+ api_uvicorn_timeout_keep_alive: int = 3
133
+
134
+ api_uvicorn_limit_concurrency: int = 1000
135
+
136
+ api_uvicorn_backlog: int = 2048
137
+
132
138
  sqladmin_secret_key: str | None = "85a9583cb91c4de7a78d7eb1e5306a04418c9c43014c447ea8ec8dd5deb4cf71"
133
139
 
134
140
  sqladmin_authorize_keys: list[str] | None = ["1"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.8.226
3
+ Version: 1.8.228
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
@@ -8,7 +8,7 @@ arpakitlib/_arpakit_project_template_v_5/alembic/env.py,sha256=Qesmnj5A2kB-Doeuf
8
8
  arpakitlib/_arpakit_project_template_v_5/alembic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
9
9
  arpakitlib/_arpakit_project_template_v_5/alembic/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  arpakitlib/_arpakit_project_template_v_5/alembic.ini,sha256=8fuyeEvGBiPGbxEFy8ISBV3xX_fgVmuhEGpB10_B5Uo,3733
11
- arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=gZOXWHexAQHHW5DKdaqdCpdaJx-0obJc76fydlyb-wk,98
11
+ arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=AMZUg5lysThHXU4rK2oLWeuoj3-3gVol9OCatBojUzY,98
12
12
  arpakitlib/_arpakit_project_template_v_5/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  arpakitlib/_arpakit_project_template_v_5/command/alembic_history.sh,sha256=OMnDNtHIksGh9iavWnzbtxcudZW4vjdcISsBXvzZSPw,22
14
14
  arpakitlib/_arpakit_project_template_v_5/command/alembic_revision_autogenerate.sh,sha256=yW2i-SBOtBx15Ya0poVQqKkJM5t2JZp06r9AEW-DmGE,46
@@ -81,19 +81,22 @@ arpakitlib/_arpakit_project_template_v_5/project/__init__.py,sha256=47DEQpj8HBSa
81
81
  arpakitlib/_arpakit_project_template_v_5/project/additional_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  arpakitlib/_arpakit_project_template_v_5/project/additional_model/common.py,sha256=BRz-B699ZY52DfUD6kmhpuThBWpPzpZpD0QXIjlkwC8,168
83
83
  arpakitlib/_arpakit_project_template_v_5/project/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
+ arpakitlib/_arpakit_project_template_v_5/project/api/api_error_codes.py,sha256=c8feYRXrN0BWmTsQIk5q_SOHUt5kCveVV_4yz-ZsZwE,537
84
85
  arpakitlib/_arpakit_project_template_v_5/project/api/asgi.py,sha256=ES3YGwNxWUHVyD6e2ii6QkvTyB-vlVmr8_PhfVIXQ4Y,78
85
- arpakitlib/_arpakit_project_template_v_5/project/api/authorize.py,sha256=puOmx2OSV2ExcLqtAD1zmvfY0zbLqLxkytF5xLZTnQg,15424
86
+ arpakitlib/_arpakit_project_template_v_5/project/api/authorize.py,sha256=52aMumh_e30Z92w7vYxUwH0cuIDeAuWFVWTnVfQyqqI,15434
86
87
  arpakitlib/_arpakit_project_template_v_5/project/api/before_start_api.py,sha256=a7eiV8oaWk9qYzlNNnY8BYY8VlnQAZ0w8TwuC2u6v_c,1902
87
88
  arpakitlib/_arpakit_project_template_v_5/project/api/blank/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
89
  arpakitlib/_arpakit_project_template_v_5/project/api/blank/admin.py,sha256=ii1zLHjvB7OVLQKFOhp4lpodXcwAmtwDdrM1iaafQfg,100
89
90
  arpakitlib/_arpakit_project_template_v_5/project/api/blank/client.py,sha256=rvJKtAB26Qy2pKVSHSMUM_70oI4v8Yr6Vmpr6r4EzNk,101
90
91
  arpakitlib/_arpakit_project_template_v_5/project/api/blank/common.py,sha256=ug1FylE_CVC5eij-u4nh-IHNO-gwkbBGo5KgyWDujC8,91
91
- arpakitlib/_arpakit_project_template_v_5/project/api/const.py,sha256=J9bqaRRiIc3RLn6SJTvdfDvFrSsM_Ixii9t2M8dA5Jc,433
92
- arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py,sha256=rmD0F-9SpbGsDGi5PzVVFF6paoYLyKasPh6qw2RxTNY,3071
92
+ arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py,sha256=rY9rI-_mbx8mu1-Q-MRVbw5Cmrv5qtHCJznFs1gBiNQ,3006
93
93
  arpakitlib/_arpakit_project_template_v_5/project/api/create_first_data.py,sha256=BgqmD-7gXQ_zoz3ATqVacQzkg9lbvKnCSvQxm0M0Vxw,1824
94
94
  arpakitlib/_arpakit_project_template_v_5/project/api/event.py,sha256=P8gV2Bq6LeLH0JDN9Z3O401PMbyNr2n-tme2gPvT-m4,996
95
- arpakitlib/_arpakit_project_template_v_5/project/api/exception.py,sha256=OkvjuJZx-rZfHisKwgeaI-cxzNNPeKgkRi9a_x7Jdbw,1415
96
- arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py,sha256=AqT5l_GyTMWZsW-eI4ZD5FU4zMR0HKhsxsMX3p2KukY,11535
95
+ arpakitlib/_arpakit_project_template_v_5/project/api/exception.py,sha256=BSCYbdHYBldXmbdRxW14tIA47vttRXVlBGw7wMur8us,1425
96
+ arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py,sha256=Se4Bj1Sdp6KXW7-G5xm0obJAFu3MfPA5NTm6yEEjgqU,11556
97
+ arpakitlib/_arpakit_project_template_v_5/project/api/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
+ arpakitlib/_arpakit_project_template_v_5/project/api/middleware/add_api_middlewares.py,sha256=TrWn0yPDCn0yTlHqLf19ypGtRumNjDxm0sM60yVsqXE,468
99
+ arpakitlib/_arpakit_project_template_v_5/project/api/middleware/limit_content_length.py,sha256=P-_ycvEXpF8WIjqcLt1tBSi32pcVhREXLl87PK9KmbU,1601
97
100
  arpakitlib/_arpakit_project_template_v_5/project/api/openapi_ui.py,sha256=7yg9ZNu6BjTAregnfbRFpwvqa-gTIY6o6NCz5pmsbeo,976
98
101
  arpakitlib/_arpakit_project_template_v_5/project/api/response.py,sha256=xZMymP2BuQaRNVWLeIp3UgUUo-MFN8MJnsn9Al4vOb8,1028
99
102
  arpakitlib/_arpakit_project_template_v_5/project/api/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -120,7 +123,7 @@ arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data
120
123
  arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data_5.py,sha256=5hEvMeTj7Bu_JT1alRHBFjyOfdEaZeMwk_Smrpqd-So,1178
121
124
  arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_api_exception_1.py,sha256=Z2f7wv4R_jZPy8KccOtsmVsOjrLsFSBZYGRAsTRVbhE,1300
122
125
  arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_api_exception_2.py,sha256=YI5PTA7miwYtl8-GiYSPW3NfpXtx5MwzWI_kKZXWS3c,1302
123
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_api_exception_3.py,sha256=y8rrEPfS2P-273HSsWorHkxft-KOt7vly35tDukqsPU,1284
126
+ arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_api_exception_3.py,sha256=VEiX_uXJ5GUwlmnztKxyNI9MGjtz8FtN3P-m4kCxXLo,1295
124
127
  arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_fake_error.py,sha256=kMr06QR39XVUoVwUuwJHoQmaWHvlfi2j53ZCMX3CU48,1048
125
128
  arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/reinit_sqlalchemy_db.py,sha256=kTa_RSZgPKbDfdFHzhAJroddWOUDRK4YTJN2WVnKu-Q,1343
126
129
  arpakitlib/_arpakit_project_template_v_5/project/api/router/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -130,7 +133,7 @@ arpakitlib/_arpakit_project_template_v_5/project/api/router/client/main_router.p
130
133
  arpakitlib/_arpakit_project_template_v_5/project/api/router/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
134
  arpakitlib/_arpakit_project_template_v_5/project/api/router/general/check_authorization.py,sha256=NUQK4KI0XpwzPEGjgQMxU43ZaTm-dEXrmU1BMIFcA3k,1853
132
135
  arpakitlib/_arpakit_project_template_v_5/project/api/router/general/get_current_api_key.py,sha256=fkQ2SYnjBiJkNu__DfDV4tpu83sZBRVZK6aiUbABJOY,1195
133
- arpakitlib/_arpakit_project_template_v_5/project/api/router/general/get_errors_info.py,sha256=OS4R5UVVjvnI8S6lDBMEZ9jXbpbttPKe4n2q-jzTs9Y,1157
136
+ arpakitlib/_arpakit_project_template_v_5/project/api/router/general/get_errors_info.py,sha256=xc5GfBt6lEzsbjvj1S_sdSTnn_nzrSR63cnpgGFAdxg,1167
134
137
  arpakitlib/_arpakit_project_template_v_5/project/api/router/general/healthcheck.py,sha256=n-ANP4x4AD6903Lt25r2mZx3tQ1DdxKn2SRPwk-POv0,695
135
138
  arpakitlib/_arpakit_project_template_v_5/project/api/router/general/main_router.py,sha256=zYei_6fiEVRkP3fuhCmu_c1rNzTUULAlh18PckTKfR4,774
136
139
  arpakitlib/_arpakit_project_template_v_5/project/api/router/general/now_utc_datetime.py,sha256=SG-x57FCs9_nWPJAnNhem6HIx5vQ-DLj4IXwuI0GEiY,909
@@ -169,7 +172,7 @@ arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/user.py,
169
172
  arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/user_token.py,sha256=iiuZXu_zo3FJX0W5qyyMGasUx-_d32yjqc_2KY3xpUA,513
170
173
  arpakitlib/_arpakit_project_template_v_5/project/api/schema/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
174
  arpakitlib/_arpakit_project_template_v_5/project/api/schema/util/create_obj_schema_from_dbm.py,sha256=7HizltD9MyK1nltQQHAjy69TCOuFDkkgtFJDr7DjLxU,331
172
- arpakitlib/_arpakit_project_template_v_5/project/api/start_api.py,sha256=P5KMtYXujQUP2uAAKgUFyCxG99Fj2vfNf1ZEm8eFH80,532
175
+ arpakitlib/_arpakit_project_template_v_5/project/api/start_api.py,sha256=9VOBnqXsbh0zh96EilNO2gSaUlol04aJO7EbvT1iTko,752
173
176
  arpakitlib/_arpakit_project_template_v_5/project/api/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
177
  arpakitlib/_arpakit_project_template_v_5/project/business_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
178
  arpakitlib/_arpakit_project_template_v_5/project/business_service/exception.py,sha256=HPs7trDBdXEb0B3LCzDIMJd1uSHPIWs7TI43ogWrONU,635
@@ -183,7 +186,7 @@ arpakitlib/_arpakit_project_template_v_5/project/core/dump_file_storage_in_dir.p
183
186
  arpakitlib/_arpakit_project_template_v_5/project/core/easy_openai_api_client.py,sha256=ssQ8Ju6CBQeXSOa_lfLaqycSf0a-NIj6ucOhEsPseVc,1141
184
187
  arpakitlib/_arpakit_project_template_v_5/project/core/jinja2_templates.py,sha256=jCNLaBauGC7YNvZdTLNHuPp7hmRGt94O23Skg6ewo7o,352
185
188
  arpakitlib/_arpakit_project_template_v_5/project/core/media_file_storage_in_dir.py,sha256=fMofTsfJtA8pp5lEUhucEUu3PBsmj-elaRZzExDsdLI,623
186
- arpakitlib/_arpakit_project_template_v_5/project/core/settings.py,sha256=aGwbB6skNOKT0z2vjQVAesfGMXi2Yclbrkw0HbACWuQ,6786
189
+ arpakitlib/_arpakit_project_template_v_5/project/core/settings.py,sha256=-pxFzibJiQiOq9wId4UCfFa8T84J3PwioZBcYANKyf0,6915
187
190
  arpakitlib/_arpakit_project_template_v_5/project/core/setup_logging.py,sha256=7VRejVMUNeR-MywrVw7B1RxVkIBHwVNQJFC4wlpBJco,1497
188
191
  arpakitlib/_arpakit_project_template_v_5/project/core/util.py,sha256=iCwpuRqr6TfW0sKVH-3asQjhueJuad3ffq6sPI6ZUrs,347
189
192
  arpakitlib/_arpakit_project_template_v_5/project/emailer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -418,8 +421,8 @@ arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrI
418
421
  arpakitlib/clone_pydantic_model_fields.py,sha256=xxLwtvJzDf8EWMvBE4psWIj8c-cyeCxLRX76oCY_4zk,1214
419
422
  arpakitlib/pydantic_schema_from_sqlalchemy_model.py,sha256=_5Y79kQ4lLIOL6_afIFVwxY1EXzTMpi-veRR-WkPFOs,2879
420
423
  arpakitlib/raise_own_exception_if_exception.py,sha256=XfLYQzfStHJMlaqCOvRuXZBRzcUn2Cj2a-vKJ_hspf8,4686
421
- arpakitlib-1.8.226.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
422
- arpakitlib-1.8.226.dist-info/METADATA,sha256=rYAW_KpprE59zdjhtSM_hTkmWIfIYd_Oo6xBLZBmyc0,3741
423
- arpakitlib-1.8.226.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
424
- arpakitlib-1.8.226.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
425
- arpakitlib-1.8.226.dist-info/RECORD,,
424
+ arpakitlib-1.8.228.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
425
+ arpakitlib-1.8.228.dist-info/METADATA,sha256=HDHEtuiTksWYRwfMbIwbXnQnvMCSM9tWgqWytNnK3CE,3741
426
+ arpakitlib-1.8.228.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
427
+ arpakitlib-1.8.228.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
428
+ arpakitlib-1.8.228.dist-info/RECORD,,