arpakitlib 1.7.43__py3-none-any.whl → 1.7.44__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/api/const.py +9 -0
- arpakitlib/_arpakit_project_template/src/api/create_api_app.py +3 -3
- arpakitlib/_arpakit_project_template/src/operation_execution/const.py +11 -0
- arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py +2 -2
- arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py +4 -4
- arpakitlib/_arpakit_project_template/src/operation_execution/{start_operation_executor_for_dev.py → start_operation_executor_for_dev_.py} +2 -2
- arpakitlib/_arpakit_project_template/src/operation_execution/{start_create_scheduled_operation_worker.py → start_scheduled_operation_creator_for_dev.py} +2 -2
- arpakitlib/ar_enumeration_util.py +11 -0
- arpakitlib/ar_fastapi_util.py +23 -28
- arpakitlib/ar_operation_execution_util.py +22 -6
- arpakitlib/ar_type_util.py +6 -0
- {arpakitlib-1.7.43.dist-info → arpakitlib-1.7.44.dist-info}/METADATA +1 -1
- {arpakitlib-1.7.43.dist-info → arpakitlib-1.7.44.dist-info}/RECORD +17 -15
- {arpakitlib-1.7.43.dist-info → arpakitlib-1.7.44.dist-info}/LICENSE +0 -0
- {arpakitlib-1.7.43.dist-info → arpakitlib-1.7.44.dist-info}/NOTICE +0 -0
- {arpakitlib-1.7.43.dist-info → arpakitlib-1.7.44.dist-info}/WHEEL +0 -0
- {arpakitlib-1.7.43.dist-info → arpakitlib-1.7.44.dist-info}/entry_points.txt +0 -0
@@ -4,7 +4,7 @@ from arpakitlib.ar_base_worker_util import BaseWorker
|
|
4
4
|
from arpakitlib.ar_fastapi_util import create_fastapi_app, InitSqlalchemyDBStartupAPIEvent, InitFileStoragesInDir, \
|
5
5
|
create_handle_exception, create_story_log_before_response_in_handle_exception, _DEFAULT_CONTACT, \
|
6
6
|
SafeRunWorkerStartupAPIEvent
|
7
|
-
from arpakitlib.ar_operation_execution_util import
|
7
|
+
from arpakitlib.ar_operation_execution_util import OperationExecutorWorker, ScheduledOperationCreatorWorker
|
8
8
|
from arpakitlib.ar_sqlalchemy_util import SQLAlchemyDB
|
9
9
|
from arpakitlib.ar_type_util import raise_for_type
|
10
10
|
from src.api.event import StartupAPIEvent, ShutdownAPIEvent
|
@@ -60,7 +60,7 @@ def create_api_app() -> FastAPI:
|
|
60
60
|
startup_api_events.append(
|
61
61
|
SafeRunWorkerStartupAPIEvent(
|
62
62
|
workers=[
|
63
|
-
|
63
|
+
OperationExecutorWorker(
|
64
64
|
sqlalchemy_db=sqlalchemy_db,
|
65
65
|
operation_executor=OperationExecutor(sqlalchemy_db=sqlalchemy_db),
|
66
66
|
filter_operation_types=None
|
@@ -75,7 +75,7 @@ def create_api_app() -> FastAPI:
|
|
75
75
|
startup_api_events.append(
|
76
76
|
SafeRunWorkerStartupAPIEvent(
|
77
77
|
workers=[
|
78
|
-
|
78
|
+
ScheduledOperationCreatorWorker(
|
79
79
|
sqlalchemy_db=sqlalchemy_db,
|
80
80
|
scheduled_operations=ALL_SCHEDULED_OPERATIONS
|
81
81
|
)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
from arpakitlib.ar_sqlalchemy_model_util import BaseOperationTypes
|
2
|
+
|
3
|
+
|
4
|
+
class OperationTypes(BaseOperationTypes):
|
5
|
+
pass
|
6
|
+
|
7
|
+
|
8
|
+
if __name__ == '__main__':
|
9
|
+
print(f"OperationTypes (len={len(OperationTypes.values_list())})")
|
10
|
+
for v in OperationTypes.values_list():
|
11
|
+
print(f"- {v}")
|
@@ -4,11 +4,11 @@ from arpakitlib.ar_sqlalchemy_model_util import OperationDBM
|
|
4
4
|
|
5
5
|
class OperationExecutor(BaseOperationExecutor):
|
6
6
|
def sync_execute_operation(self, operation_dbm: OperationDBM) -> OperationDBM:
|
7
|
-
operation_dbm = super().sync_execute_operation(operation_dbm=operation_dbm)
|
8
7
|
# ...
|
8
|
+
operation_dbm = super().sync_execute_operation(operation_dbm=operation_dbm)
|
9
9
|
return operation_dbm
|
10
10
|
|
11
11
|
async def async_execute_operation(self, operation_dbm: OperationDBM) -> OperationDBM:
|
12
|
-
operation_dbm = await super().async_execute_operation(operation_dbm=operation_dbm)
|
13
12
|
# ...
|
13
|
+
operation_dbm = await super().async_execute_operation(operation_dbm=operation_dbm)
|
14
14
|
return operation_dbm
|
@@ -1,13 +1,13 @@
|
|
1
1
|
from datetime import timedelta
|
2
2
|
|
3
|
-
from arpakitlib.ar_operation_execution_util import ScheduledOperation,
|
3
|
+
from arpakitlib.ar_operation_execution_util import ScheduledOperation, every_timedelta_is_time_func
|
4
4
|
from arpakitlib.ar_sqlalchemy_model_util import BaseOperationTypes
|
5
5
|
|
6
6
|
ALL_SCHEDULED_OPERATIONS = []
|
7
7
|
|
8
|
-
|
8
|
+
healthcheck_scheduled_operation = ScheduledOperation(
|
9
9
|
type=BaseOperationTypes.healthcheck_,
|
10
10
|
input_data={},
|
11
|
-
is_time_func=
|
11
|
+
is_time_func=every_timedelta_is_time_func(td=timedelta(seconds=5))
|
12
12
|
)
|
13
|
-
ALL_SCHEDULED_OPERATIONS.append(
|
13
|
+
ALL_SCHEDULED_OPERATIONS.append(healthcheck_scheduled_operation)
|
@@ -1,11 +1,11 @@
|
|
1
|
-
from arpakitlib.ar_operation_execution_util import
|
1
|
+
from arpakitlib.ar_operation_execution_util import OperationExecutorWorker
|
2
2
|
from src.core.util import get_cached_sqlalchemy_db, setup_logging
|
3
3
|
from src.operation_execution.operation_executor import OperationExecutor
|
4
4
|
|
5
5
|
|
6
6
|
def start_operation_executor_for_dev():
|
7
7
|
setup_logging()
|
8
|
-
worker =
|
8
|
+
worker = OperationExecutorWorker(
|
9
9
|
sqlalchemy_db=get_cached_sqlalchemy_db(),
|
10
10
|
operation_executor=OperationExecutor(sqlalchemy_db=get_cached_sqlalchemy_db()),
|
11
11
|
filter_operation_types=None
|
@@ -1,11 +1,11 @@
|
|
1
|
-
from arpakitlib.ar_operation_execution_util import
|
1
|
+
from arpakitlib.ar_operation_execution_util import ScheduledOperationCreatorWorker
|
2
2
|
from src.core.util import get_cached_sqlalchemy_db, setup_logging
|
3
3
|
from src.operation_execution.scheduled_operations import ALL_SCHEDULED_OPERATIONS
|
4
4
|
|
5
5
|
|
6
6
|
def start_create_scheduled_operation_worker_for_dev():
|
7
7
|
setup_logging()
|
8
|
-
worker =
|
8
|
+
worker = ScheduledOperationCreatorWorker(
|
9
9
|
sqlalchemy_db=get_cached_sqlalchemy_db(),
|
10
10
|
scheduled_operations=ALL_SCHEDULED_OPERATIONS
|
11
11
|
)
|
@@ -69,6 +69,17 @@ class Enumeration:
|
|
69
69
|
def parse_and_validate_values(cls, *values: ValuesForParseType) -> list[ValueType]:
|
70
70
|
return cls.parse_values(*values, validate=True)
|
71
71
|
|
72
|
+
@classmethod
|
73
|
+
def str_for_print(cls) -> str:
|
74
|
+
res = f"{cls.__name__} (len={len(cls.values_list())})"
|
75
|
+
for v in cls.values_list():
|
76
|
+
res += f"\n- {v}"
|
77
|
+
return res.strip()
|
78
|
+
|
79
|
+
@classmethod
|
80
|
+
def print(cls):
|
81
|
+
print(cls.str_for_print())
|
82
|
+
|
72
83
|
|
73
84
|
def __example():
|
74
85
|
pass
|
arpakitlib/ar_fastapi_util.py
CHANGED
@@ -68,13 +68,14 @@ class SimpleSO(BaseSO):
|
|
68
68
|
creation_dt: datetime
|
69
69
|
|
70
70
|
|
71
|
-
class
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
71
|
+
class BaseAPIErrorCodes(Enumeration):
|
72
|
+
cannot_authorize = "CANNOT_AUTHORIZE"
|
73
|
+
unknown_error = "UNKNOWN_ERROR"
|
74
|
+
error_in_request = "ERROR_IN_REQUEST"
|
75
|
+
not_found = "NOT_FOUND"
|
76
|
+
|
77
77
|
|
78
|
+
class ErrorSO(BaseSO):
|
78
79
|
has_error: bool = True
|
79
80
|
error_code: str | None = None
|
80
81
|
error_code_specification: str | None = None
|
@@ -118,7 +119,7 @@ class APIException(fastapi.exceptions.HTTPException):
|
|
118
119
|
self,
|
119
120
|
*,
|
120
121
|
status_code: int = starlette.status.HTTP_400_BAD_REQUEST,
|
121
|
-
error_code: str | None =
|
122
|
+
error_code: str | None = BaseAPIErrorCodes.unknown_error,
|
122
123
|
error_code_specification: str | None = None,
|
123
124
|
error_description: str | None = None,
|
124
125
|
error_data: dict[str, Any] | None = None
|
@@ -165,7 +166,7 @@ def create_handle_exception(
|
|
165
166
|
|
166
167
|
error_so = ErrorSO(
|
167
168
|
has_error=True,
|
168
|
-
error_code=
|
169
|
+
error_code=BaseAPIErrorCodes.unknown_error,
|
169
170
|
error_data={
|
170
171
|
"exception_type": str(type(exception)),
|
171
172
|
"exception_str": str(exception),
|
@@ -183,10 +184,10 @@ def create_handle_exception(
|
|
183
184
|
elif isinstance(exception, starlette.exceptions.HTTPException):
|
184
185
|
status_code = exception.status_code
|
185
186
|
if status_code in (starlette.status.HTTP_403_FORBIDDEN, starlette.status.HTTP_401_UNAUTHORIZED):
|
186
|
-
error_so.error_code =
|
187
|
+
error_so.error_code = BaseAPIErrorCodes.cannot_authorize
|
187
188
|
_need_exc_info = False
|
188
189
|
elif status_code == starlette.status.HTTP_404_NOT_FOUND:
|
189
|
-
error_so.error_code =
|
190
|
+
error_so.error_code = BaseAPIErrorCodes.not_found
|
190
191
|
_need_exc_info = False
|
191
192
|
else:
|
192
193
|
status_code = starlette.status.HTTP_500_INTERNAL_SERVER_ERROR
|
@@ -196,14 +197,14 @@ def create_handle_exception(
|
|
196
197
|
|
197
198
|
elif isinstance(exception, fastapi.exceptions.RequestValidationError):
|
198
199
|
status_code = starlette.status.HTTP_422_UNPROCESSABLE_ENTITY
|
199
|
-
error_so.error_code =
|
200
|
+
error_so.error_code = BaseAPIErrorCodes.error_in_request
|
200
201
|
with suppress(Exception):
|
201
202
|
error_so.error_data["exception.errors"] = str(exception.errors()) if exception.errors() else {}
|
202
203
|
_need_exc_info = False
|
203
204
|
|
204
205
|
else:
|
205
206
|
status_code = starlette.status.HTTP_500_INTERNAL_SERVER_ERROR
|
206
|
-
error_so.error_code =
|
207
|
+
error_so.error_code = BaseAPIErrorCodes.unknown_error
|
207
208
|
_logger.exception(exception)
|
208
209
|
_need_exc_info = True
|
209
210
|
|
@@ -512,14 +513,14 @@ def base_api_auth(
|
|
512
513
|
if require_api_key_string and not api_auth_data.api_key_string:
|
513
514
|
raise APIException(
|
514
515
|
status_code=starlette.status.HTTP_401_UNAUTHORIZED,
|
515
|
-
error_code=
|
516
|
+
error_code=BaseAPIErrorCodes.cannot_authorize,
|
516
517
|
error_data=safely_transfer_to_json_str_to_json_obj(api_auth_data.model_dump())
|
517
518
|
)
|
518
519
|
|
519
520
|
if require_token_string and not api_auth_data.token_string:
|
520
521
|
raise APIException(
|
521
522
|
status_code=starlette.status.HTTP_401_UNAUTHORIZED,
|
522
|
-
error_code=
|
523
|
+
error_code=BaseAPIErrorCodes.cannot_authorize,
|
523
524
|
error_data=safely_transfer_to_json_str_to_json_obj(api_auth_data.model_dump())
|
524
525
|
)
|
525
526
|
|
@@ -537,37 +538,31 @@ def is_api_key_correct_api_auth(
|
|
537
538
|
validate_api_key_func: Callable | None = None,
|
538
539
|
correct_api_key: str | None = None
|
539
540
|
):
|
540
|
-
require_api_key_string = True
|
541
|
-
|
542
541
|
if correct_api_key is not None:
|
543
|
-
validate_api_key_func = lambda **kwargs: kwargs["api_key_string"] == correct_api_key
|
544
|
-
|
542
|
+
validate_api_key_func = lambda *args, **kwargs: kwargs["api_key_string"] == correct_api_key
|
545
543
|
raise_if_none(validate_api_key_func)
|
546
544
|
|
547
545
|
async def func(
|
548
546
|
*,
|
549
547
|
base_api_auth_data: BaseAPIAuthData = Depends(base_api_auth(
|
550
|
-
require_api_key_string=
|
548
|
+
require_api_key_string=True,
|
551
549
|
require_token_string=False
|
552
550
|
)),
|
553
551
|
transmitted_api_data: BaseTransmittedAPIData = Depends(get_transmitted_api_data),
|
554
552
|
request: starlette.requests.Request
|
555
553
|
) -> CheckAPIKeyAPIAuthData:
|
556
554
|
check_api_key_api_auth_data = CheckAPIKeyAPIAuthData.model_validate(base_api_auth_data)
|
557
|
-
check_api_key_api_auth_data.is_api_key_correct = (
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
request=request
|
563
|
-
)
|
564
|
-
if validate_api_key_func is not None else None
|
555
|
+
check_api_key_api_auth_data.is_api_key_correct = validate_api_key_func(
|
556
|
+
api_key_string=base_api_auth_data.api_key_string,
|
557
|
+
base_api_auth_data=base_api_auth_data,
|
558
|
+
transmitted_api_data=transmitted_api_data,
|
559
|
+
request=request
|
565
560
|
)
|
566
561
|
|
567
562
|
if not check_api_key_api_auth_data.is_api_key_correct:
|
568
563
|
raise APIException(
|
569
564
|
status_code=starlette.status.HTTP_401_UNAUTHORIZED,
|
570
|
-
error_code=
|
565
|
+
error_code=BaseAPIErrorCodes.cannot_authorize,
|
571
566
|
error_data=safely_transfer_to_json_str_to_json_obj(check_api_key_api_auth_data.model_dump())
|
572
567
|
)
|
573
568
|
|
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
5
5
|
import asyncio
|
6
6
|
import logging
|
7
7
|
import traceback
|
8
|
-
from datetime import timedelta
|
8
|
+
from datetime import timedelta, time
|
9
9
|
from typing import Any, Callable
|
10
10
|
|
11
11
|
from pydantic import ConfigDict
|
@@ -109,7 +109,10 @@ class BaseOperationExecutor:
|
|
109
109
|
if exception:
|
110
110
|
operation_dbm.status = OperationDBM.Statuses.executed_with_error
|
111
111
|
operation_dbm.error_data = combine_dicts(
|
112
|
-
{
|
112
|
+
{
|
113
|
+
"exception_str": str(exception),
|
114
|
+
"traceback_str": traceback_str
|
115
|
+
},
|
113
116
|
operation_dbm.error_data
|
114
117
|
)
|
115
118
|
else:
|
@@ -185,7 +188,10 @@ class BaseOperationExecutor:
|
|
185
188
|
if exception:
|
186
189
|
operation_dbm.status = OperationDBM.Statuses.executed_with_error
|
187
190
|
operation_dbm.error_data = combine_dicts(
|
188
|
-
{
|
191
|
+
{
|
192
|
+
"exception_str": str(exception),
|
193
|
+
"traceback_str": traceback_str
|
194
|
+
},
|
189
195
|
operation_dbm.error_data
|
190
196
|
)
|
191
197
|
else:
|
@@ -219,7 +225,7 @@ class BaseOperationExecutor:
|
|
219
225
|
return operation_dbm
|
220
226
|
|
221
227
|
|
222
|
-
class
|
228
|
+
class OperationExecutorWorker(BaseWorker):
|
223
229
|
|
224
230
|
def __init__(
|
225
231
|
self,
|
@@ -288,7 +294,7 @@ class ScheduledOperation(BaseModel):
|
|
288
294
|
is_time_func: Callable[[], bool]
|
289
295
|
|
290
296
|
|
291
|
-
class
|
297
|
+
class ScheduledOperationCreatorWorker(BaseWorker):
|
292
298
|
def __init__(
|
293
299
|
self,
|
294
300
|
*,
|
@@ -338,7 +344,7 @@ class CreateScheduledOperationWorker(BaseWorker):
|
|
338
344
|
session.refresh(operation_dbm)
|
339
345
|
|
340
346
|
|
341
|
-
def
|
347
|
+
def every_timedelta_is_time_func(*, td: timedelta) -> Callable:
|
342
348
|
last_now_utc_dt = now_utc_dt()
|
343
349
|
|
344
350
|
def func() -> bool:
|
@@ -352,6 +358,16 @@ def is_time_func_every_timedelta(*, td: timedelta) -> Callable:
|
|
352
358
|
return func
|
353
359
|
|
354
360
|
|
361
|
+
def between_different_times_is_time_func(*, from_time: time, to_time: time) -> Callable:
|
362
|
+
def func() -> bool:
|
363
|
+
now_utc_dt_ = now_utc_dt()
|
364
|
+
if from_time <= now_utc_dt_.time() <= to_time:
|
365
|
+
return True
|
366
|
+
return False
|
367
|
+
|
368
|
+
return func
|
369
|
+
|
370
|
+
|
355
371
|
def __example():
|
356
372
|
pass
|
357
373
|
|
arpakitlib/ar_type_util.py
CHANGED
@@ -72,7 +72,8 @@ arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py,sh
|
|
72
72
|
arpakitlib/_arpakit_project_template/src/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73
73
|
arpakitlib/_arpakit_project_template/src/api/asgi.py,sha256=a5UBxOyNC8NG3E0ayhiDo3t5tPoB3WtOf2gbZJFWBAA,74
|
74
74
|
arpakitlib/_arpakit_project_template/src/api/auth.py,sha256=Ljq_VjjiAaW3HEzq60nkSI-HkHfuv6j5-8Q6Qs8V9bU,261
|
75
|
-
arpakitlib/_arpakit_project_template/src/api/
|
75
|
+
arpakitlib/_arpakit_project_template/src/api/const.py,sha256=ttbzJdOUZoAngR5naFubXjaI3ED06051HGpXZFpDPV0,178
|
76
|
+
arpakitlib/_arpakit_project_template/src/api/create_api_app.py,sha256=mqEg3MV_EQQI2RhtpRu0ElWZ1vo_F7iRYqAvk88qSJo,4500
|
76
77
|
arpakitlib/_arpakit_project_template/src/api/event.py,sha256=58wCVyVSIe_kydWi44M0Wvp7bTnV8xvO30gMXzjbFYc,750
|
77
78
|
arpakitlib/_arpakit_project_template/src/api/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
79
|
arpakitlib/_arpakit_project_template/src/api/router/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -93,10 +94,11 @@ arpakitlib/_arpakit_project_template/src/db/__init__.py,sha256=47DEQpj8HBSa-_TIm
|
|
93
94
|
arpakitlib/_arpakit_project_template/src/db/sqlalchemy_model.py,sha256=nXtayUkBaVb6tWx5qJgXZLbLOTVAjnSLpSDxBm7yZLc,234
|
94
95
|
arpakitlib/_arpakit_project_template/src/db/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
95
96
|
arpakitlib/_arpakit_project_template/src/operation_execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
96
|
-
arpakitlib/_arpakit_project_template/src/operation_execution/
|
97
|
-
arpakitlib/_arpakit_project_template/src/operation_execution/
|
98
|
-
arpakitlib/_arpakit_project_template/src/operation_execution/
|
99
|
-
arpakitlib/_arpakit_project_template/src/operation_execution/
|
97
|
+
arpakitlib/_arpakit_project_template/src/operation_execution/const.py,sha256=4wOXu1042rDeNMe0KhMEhRVtJajQfoYMeqqaQ_UICkk,287
|
98
|
+
arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py,sha256=5sZpn3tVxnmcuIVRD5sbBhiMY5SAqPCc4tHzoNzDe4c,619
|
99
|
+
arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py,sha256=slgfIZikNcTPchjb8hxpf1aGCqlN0Q4VO-LxbptNOCA,484
|
100
|
+
arpakitlib/_arpakit_project_template/src/operation_execution/start_operation_executor_for_dev_.py,sha256=N-X3kvjQZeEDxp2Z7DDrr4hR-wR9LmFMLPAA8tzo87A,589
|
101
|
+
arpakitlib/_arpakit_project_template/src/operation_execution/start_scheduled_operation_creator_for_dev.py,sha256=RyHCafGTJaY-o3mgt7MReqgJ2txoBDhhsFzrjRiZWe4,574
|
100
102
|
arpakitlib/_arpakit_project_template/src/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
101
103
|
arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py,sha256=3WVPgRsNCIxWpA-6t_Phe-nFULdHPhS1S_DO11XRmqk,80
|
102
104
|
arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py,sha256=MVDc71sj5I1muWin50GwrSxMwYtOOSDOtRmeFErHcXs,80
|
@@ -118,7 +120,7 @@ arpakitlib/ar_datetime_util.py,sha256=Xe1NiT9oPQzNSG7RVRkhukhbg4i-hhS5ImmV7sPUc8
|
|
118
120
|
arpakitlib/ar_dict_util.py,sha256=cF5LQJ6tLqyGoEXfDljMDZrikeZoWPw7CgINHIFGvXM,419
|
119
121
|
arpakitlib/ar_dream_ai_api_client_util.py,sha256=QF9XK7xK5ny1fvkcG4e0pfCySNNFRNPy0x0cmxfsAak,2818
|
120
122
|
arpakitlib/ar_encrypt_decrypt_util.py,sha256=GhWnp7HHkbhwFVVCzO1H07m-5gryr4yjWsXjOaNQm1Y,520
|
121
|
-
arpakitlib/ar_enumeration_util.py,sha256=
|
123
|
+
arpakitlib/ar_enumeration_util.py,sha256=1dQUEVgJRp0nCO-IrCKv5GTK0QkSzM44M1lOWkmPk3w,2532
|
122
124
|
arpakitlib/ar_fastapi_static/healthcheck,sha256=IIO7Wvjwlr2-LPSQ7Y8O35hcI6t0_s8zqITDxkYCO8I,11
|
123
125
|
arpakitlib/ar_fastapi_static/redoc/redoc.standalone.js,sha256=WCuodUNv1qVh0oW5fjnJDwb5AwOue73jKHdI9z8iGKU,909365
|
124
126
|
arpakitlib/ar_fastapi_static/swagger-ui/favicon-16x16.png,sha256=ryStYE3Xs7zaj5dauXMHX0ovcKQIeUShL474tjo-B8I,665
|
@@ -139,7 +141,7 @@ arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css,sha256=jzPZlgJTFwSdSphk9C
|
|
139
141
|
arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css.map,sha256=5wq8eXMLU6Zxb45orZPL1zAsBFJReFw6GjYqGpUX3hg,262650
|
140
142
|
arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js,sha256=ffrLZHHEQ_g84A-ul3yWa10Kk09waOAxHcQXPuZuavg,339292
|
141
143
|
arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js.map,sha256=9UhIW7MqCOZPAz1Sl1IKfZUuhWU0p-LJqrnjjJD9Xhc,1159454
|
142
|
-
arpakitlib/ar_fastapi_util.py,sha256=
|
144
|
+
arpakitlib/ar_fastapi_util.py,sha256=HOn_jpi4ruH11m8XGiFpyvUZmAED7z31-CdL-wXvjK8,24119
|
143
145
|
arpakitlib/ar_file_storage_in_dir_util.py,sha256=D3e3rGuHoI6xqAA5mVvEpVVpOWY1jyjNsjj2UhyHRbE,3674
|
144
146
|
arpakitlib/ar_file_util.py,sha256=07xCF7paAUP2JUyfpeX0l3N1oCSma7qAcBmrCIZVi3g,452
|
145
147
|
arpakitlib/ar_hash_util.py,sha256=Iqy6KBAOLBQMFLWv676boI5sV7atT2B-fb7aCdHOmIQ,340
|
@@ -154,7 +156,7 @@ arpakitlib/ar_logging_util.py,sha256=Gyd7B9k0glIXPm6dASiigWLq9LC9lw6vhXTCeWpY5PY
|
|
154
156
|
arpakitlib/ar_mongodb_util.py,sha256=2ECkTnGAZ92qxioL-fmN6R4yZOSr3bXdXLWTzT1C3vk,4038
|
155
157
|
arpakitlib/ar_need_type_util.py,sha256=xq5bbAXJG-93CRVZUcLW0ZdM22rj-ZUW17C5hX_5grg,1699
|
156
158
|
arpakitlib/ar_openai_api_client_util.py,sha256=dHUbfg1sVVCjsNl_fra3iCMEz1bR-Hk9fE-DdYbu7Wc,1215
|
157
|
-
arpakitlib/ar_operation_execution_util.py,sha256=
|
159
|
+
arpakitlib/ar_operation_execution_util.py,sha256=EZMQbjvp3EDFEfUYAdRV7_qtdqIW-qJrmVWpv5plxas,13874
|
158
160
|
arpakitlib/ar_parse_command.py,sha256=-s61xcATIsfw1eV_iD3xi-grsitbGzSDoAFc5V0OFy4,3447
|
159
161
|
arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
|
160
162
|
arpakitlib/ar_run_cmd_util.py,sha256=D_rPavKMmWkQtwvZFz-Io5Ak8eSODHkcFeLPzNVC68g,1072
|
@@ -165,12 +167,12 @@ arpakitlib/ar_sqlalchemy_model_util.py,sha256=TFGOAgpxcnBV_u7yZrLCkf1ldlB4Of8vIR
|
|
165
167
|
arpakitlib/ar_sqlalchemy_util.py,sha256=Hcg1THrDsSR_-8dsY1CG3NWPEv0FqCbkPXFXLtjlSJ0,4207
|
166
168
|
arpakitlib/ar_ssh_runner_util.py,sha256=jlnss4V4pziBN1rBzoK_lDiWm6nMOqGXfa6NFJSKH-Y,6796
|
167
169
|
arpakitlib/ar_str_util.py,sha256=oCEtQ_TTn35OEz9jCNLjbhopq76JmaifD_iYR-nEJJ4,2142
|
168
|
-
arpakitlib/ar_type_util.py,sha256=
|
170
|
+
arpakitlib/ar_type_util.py,sha256=e6Ch8I_B3FMJMj-fiZvTwtGde4hxSa48fGt5g8RlV6I,2301
|
169
171
|
arpakitlib/ar_yookassa_api_client_util.py,sha256=sh4fcUkAkdOetFn9JYoTvjcSXP-M1wU04KEY-ECLfLg,5137
|
170
172
|
arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
|
171
|
-
arpakitlib-1.7.
|
172
|
-
arpakitlib-1.7.
|
173
|
-
arpakitlib-1.7.
|
174
|
-
arpakitlib-1.7.
|
175
|
-
arpakitlib-1.7.
|
176
|
-
arpakitlib-1.7.
|
173
|
+
arpakitlib-1.7.44.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
174
|
+
arpakitlib-1.7.44.dist-info/METADATA,sha256=9Rsxl80OE2FYpC5fZKMwsvGOHbxY3o0t7djohbxNnzs,2824
|
175
|
+
arpakitlib-1.7.44.dist-info/NOTICE,sha256=95aUzaPJjVpDsGAsNzVnq7tHTxAl0s5UFznCTkVCau4,763
|
176
|
+
arpakitlib-1.7.44.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
177
|
+
arpakitlib-1.7.44.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
178
|
+
arpakitlib-1.7.44.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|