arpakitlib 1.8.227__py3-none-any.whl → 1.8.229__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/arpakitlib_project_template_info.json +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/{const.py → api_error_codes.py} +3 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/authorize.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py +2 -7
- arpakitlib/_arpakit_project_template_v_5/project/api/exception.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/api/middleware/__init__.py +0 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/middleware/add_api_middlewares.py +15 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/middleware/limit_content_length.py +53 -0
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/raise_api_exception_3.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/router/general/get_errors_info.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/more/api.nginx +43 -0
- {arpakitlib-1.8.227.dist-info → arpakitlib-1.8.229.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.227.dist-info → arpakitlib-1.8.229.dist-info}/RECORD +17 -13
- {arpakitlib-1.8.227.dist-info → arpakitlib-1.8.229.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.227.dist-info → arpakitlib-1.8.229.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.227.dist-info → arpakitlib-1.8.229.dist-info}/entry_points.txt +0 -0
@@ -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.
|
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
|
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,
|
@@ -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.
|
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("
|
178
|
+
if exception.kwargs_.get("logging_full_error") is False:
|
179
179
|
return
|
180
180
|
|
181
181
|
_logger.exception(exception)
|
File without changes
|
@@ -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,53 @@
|
|
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__(
|
13
|
+
self,
|
14
|
+
*
|
15
|
+
app,
|
16
|
+
max_body_size: int = 10 * 1024 * 1024 # 10 mb
|
17
|
+
):
|
18
|
+
super().__init__(app)
|
19
|
+
self.max_body_size = max_body_size
|
20
|
+
|
21
|
+
async def dispatch(self, request: Request, call_next):
|
22
|
+
content_length = request.headers.get("content-length")
|
23
|
+
if content_length is None:
|
24
|
+
return await call_next(request)
|
25
|
+
if isinstance(content_length, str) and not content_length.isdigit():
|
26
|
+
return await call_next(request)
|
27
|
+
content_length = int(content_length)
|
28
|
+
if content_length > self.max_body_size:
|
29
|
+
return JSONResponse(
|
30
|
+
status_code=status.HTTP_413_REQUEST_ENTITY_TOO_LARGE,
|
31
|
+
content=ErrorCommonSO(
|
32
|
+
has_error=True,
|
33
|
+
error_code=APIErrorCodes.Common.content_length_is_too_big
|
34
|
+
).model_dump_json()
|
35
|
+
)
|
36
|
+
|
37
|
+
return await call_next(request)
|
38
|
+
|
39
|
+
|
40
|
+
def __example():
|
41
|
+
app = FastAPI()
|
42
|
+
app.add_middleware(LimitContentLengthMiddleware) # 5 MB
|
43
|
+
|
44
|
+
@app.post("/upload")
|
45
|
+
async def upload_file(request: Request):
|
46
|
+
data = await request.body()
|
47
|
+
return {"size": len(data)}
|
48
|
+
|
49
|
+
uvicorn.run(app)
|
50
|
+
|
51
|
+
|
52
|
+
if __name__ == '__main__':
|
53
|
+
__example()
|
@@ -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.
|
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
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# main
|
2
|
+
server {
|
3
|
+
listen 80;
|
4
|
+
listen [::]:80;
|
5
|
+
server_name api.site.com www.site.com;
|
6
|
+
|
7
|
+
client_max_body_size 10M;
|
8
|
+
|
9
|
+
location / {
|
10
|
+
proxy_pass http://127.0.0.1:8080;
|
11
|
+
|
12
|
+
# базовые прокси-заголовки
|
13
|
+
proxy_set_header Host $host;
|
14
|
+
proxy_set_header X-Real-IP $remote_addr;
|
15
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
16
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
17
|
+
proxy_set_header X-Forwarded-Host $host;
|
18
|
+
proxy_set_header X-Forwarded-Port $server_port;
|
19
|
+
|
20
|
+
# буферизация запроса на стороне nginx (полезно для больших аплоадов)
|
21
|
+
proxy_request_buffering off;
|
22
|
+
|
23
|
+
# таймауты по вкусу (чтобы не висеть вечно)
|
24
|
+
proxy_connect_timeout 3s;
|
25
|
+
proxy_read_timeout 30s;
|
26
|
+
proxy_send_timeout 30s;
|
27
|
+
|
28
|
+
# (необязательно) меньше магии с Location/Redirect от апстрима
|
29
|
+
proxy_redirect off;
|
30
|
+
# proxy_redirect http://127.0.0.1:8080/ /;
|
31
|
+
# proxy_redirect http://backend.local/ https://site.com/;
|
32
|
+
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
|
37
|
+
# redirect
|
38
|
+
server {
|
39
|
+
listen 80;
|
40
|
+
listen [::]:80;
|
41
|
+
server_name www.site.arpakit.com;
|
42
|
+
return 301 http://site.com$request_uri;
|
43
|
+
}
|
@@ -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=
|
11
|
+
arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=tYsY8U4lzAXkijKJu4wwZUROFtOIeG4P3ToozX06MKc,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=
|
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/
|
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=
|
96
|
-
arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py,sha256=
|
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=fRdmb9pQa5B_AT-oNfjsBRextcBQA9qwvLcF5MWG5JY,1636
|
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=
|
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=
|
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
|
@@ -192,6 +195,7 @@ arpakitlib/_arpakit_project_template_v_5/project/emailer/send_simple_email.py,sh
|
|
192
195
|
arpakitlib/_arpakit_project_template_v_5/project/json_db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
193
196
|
arpakitlib/_arpakit_project_template_v_5/project/json_db/json_db.py,sha256=tBML-z4Y7uY8f_0ggcxvlDNt15Sf93Jr_OUeHwWxqOA,724
|
194
197
|
arpakitlib/_arpakit_project_template_v_5/project/more/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
198
|
+
arpakitlib/_arpakit_project_template_v_5/project/more/api.nginx,sha256=o74LGt4ydV7TBvm-6CKSBOlwy4rzb2apz2AZtHE-6aY,1308
|
195
199
|
arpakitlib/_arpakit_project_template_v_5/project/more/helloworld,sha256=eH7Hbcr9IMGQjrCTahL5Ht0QWrXNfswrGuIDJkg0Xf8,11
|
196
200
|
arpakitlib/_arpakit_project_template_v_5/project/operation_execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
197
201
|
arpakitlib/_arpakit_project_template_v_5/project/operation_execution/const.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
|
@@ -418,8 +422,8 @@ arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrI
|
|
418
422
|
arpakitlib/clone_pydantic_model_fields.py,sha256=xxLwtvJzDf8EWMvBE4psWIj8c-cyeCxLRX76oCY_4zk,1214
|
419
423
|
arpakitlib/pydantic_schema_from_sqlalchemy_model.py,sha256=_5Y79kQ4lLIOL6_afIFVwxY1EXzTMpi-veRR-WkPFOs,2879
|
420
424
|
arpakitlib/raise_own_exception_if_exception.py,sha256=XfLYQzfStHJMlaqCOvRuXZBRzcUn2Cj2a-vKJ_hspf8,4686
|
421
|
-
arpakitlib-1.8.
|
422
|
-
arpakitlib-1.8.
|
423
|
-
arpakitlib-1.8.
|
424
|
-
arpakitlib-1.8.
|
425
|
-
arpakitlib-1.8.
|
425
|
+
arpakitlib-1.8.229.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
426
|
+
arpakitlib-1.8.229.dist-info/METADATA,sha256=e1tXQkzgFDQmDRyxHHNpygZ5hdvXoALvsTA5yQVq9AE,3741
|
427
|
+
arpakitlib-1.8.229.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
428
|
+
arpakitlib-1.8.229.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
429
|
+
arpakitlib-1.8.229.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|