arpakitlib 1.7.41__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/auth.py +6 -0
- 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/api/util.py +0 -0
- arpakitlib/_arpakit_project_template/src/core/settings.py +2 -0
- 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/api_key_util.py +1 -1
- arpakitlib/ar_enumeration_util.py +11 -0
- arpakitlib/ar_fastapi_util.py +28 -40
- arpakitlib/ar_operation_execution_util.py +22 -6
- arpakitlib/ar_type_util.py +7 -1
- {arpakitlib-1.7.41.dist-info → arpakitlib-1.7.44.dist-info}/METADATA +1 -1
- {arpakitlib-1.7.41.dist-info → arpakitlib-1.7.44.dist-info}/RECORD +21 -17
- {arpakitlib-1.7.41.dist-info → arpakitlib-1.7.44.dist-info}/LICENSE +0 -0
- {arpakitlib-1.7.41.dist-info → arpakitlib-1.7.44.dist-info}/NOTICE +0 -0
- {arpakitlib-1.7.41.dist-info → arpakitlib-1.7.44.dist-info}/WHEEL +0 -0
- {arpakitlib-1.7.41.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
|
)
|
File without changes
|
@@ -31,6 +31,8 @@ class Settings(SimpleSettings):
|
|
31
31
|
|
32
32
|
api_port: int | None = int("{API_PORT}") if "{API_PORT}".isdigit() else None
|
33
33
|
|
34
|
+
api_correct_api_key: str | None = None
|
35
|
+
|
34
36
|
var_dirname: str | None = "var"
|
35
37
|
|
36
38
|
var_dirpath: str | None = os.path.join(BASE_DIRPATH, var_dirname)
|
@@ -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
|
)
|
arpakitlib/api_key_util.py
CHANGED
@@ -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
@@ -32,7 +32,7 @@ from arpakitlib.ar_json_util import safely_transfer_to_json_str_to_json_obj
|
|
32
32
|
from arpakitlib.ar_logging_util import setup_normal_logging
|
33
33
|
from arpakitlib.ar_sqlalchemy_model_util import StoryLogDBM
|
34
34
|
from arpakitlib.ar_sqlalchemy_util import SQLAlchemyDB
|
35
|
-
from arpakitlib.ar_type_util import raise_for_type, raise_if_not_async_func
|
35
|
+
from arpakitlib.ar_type_util import raise_for_type, raise_if_not_async_func, raise_if_none
|
36
36
|
|
37
37
|
_ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
38
38
|
|
@@ -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
|
|
@@ -529,52 +530,39 @@ def base_api_auth(
|
|
529
530
|
|
530
531
|
|
531
532
|
class CheckAPIKeyAPIAuthData(BaseAPIAuthData):
|
532
|
-
require_check_api_key: bool = False
|
533
533
|
is_api_key_correct: bool | None = None
|
534
534
|
|
535
535
|
|
536
|
-
def
|
536
|
+
def is_api_key_correct_api_auth(
|
537
537
|
*,
|
538
|
-
|
539
|
-
check_api_key_func: Callable | None = None,
|
538
|
+
validate_api_key_func: Callable | None = None,
|
540
539
|
correct_api_key: str | None = None
|
541
540
|
):
|
542
|
-
if require_check_api_key:
|
543
|
-
require_api_key_string = True
|
544
|
-
else:
|
545
|
-
require_api_key_string = False
|
546
|
-
|
547
541
|
if correct_api_key is not None:
|
548
|
-
|
549
|
-
|
550
|
-
if require_check_api_key and check_api_key_func is None:
|
551
|
-
raise ValueError("require_check_api_key and check_api_key_func is None")
|
542
|
+
validate_api_key_func = lambda *args, **kwargs: kwargs["api_key_string"] == correct_api_key
|
543
|
+
raise_if_none(validate_api_key_func)
|
552
544
|
|
553
545
|
async def func(
|
554
546
|
*,
|
555
547
|
base_api_auth_data: BaseAPIAuthData = Depends(base_api_auth(
|
556
|
-
require_api_key_string=
|
548
|
+
require_api_key_string=True,
|
557
549
|
require_token_string=False
|
558
550
|
)),
|
559
551
|
transmitted_api_data: BaseTransmittedAPIData = Depends(get_transmitted_api_data),
|
560
552
|
request: starlette.requests.Request
|
561
553
|
) -> CheckAPIKeyAPIAuthData:
|
562
554
|
check_api_key_api_auth_data = CheckAPIKeyAPIAuthData.model_validate(base_api_auth_data)
|
563
|
-
check_api_key_api_auth_data.
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
transmitted_api_data=transmitted_api_data,
|
569
|
-
request=request
|
570
|
-
)
|
571
|
-
if check_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
|
572
560
|
)
|
573
561
|
|
574
|
-
if
|
562
|
+
if not check_api_key_api_auth_data.is_api_key_correct:
|
575
563
|
raise APIException(
|
576
564
|
status_code=starlette.status.HTTP_401_UNAUTHORIZED,
|
577
|
-
error_code=
|
565
|
+
error_code=BaseAPIErrorCodes.cannot_authorize,
|
578
566
|
error_data=safely_transfer_to_json_str_to_json_obj(check_api_key_api_auth_data.model_dump())
|
579
567
|
)
|
580
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
@@ -80,7 +80,13 @@ def make_none_to_false(v: Any) -> Any:
|
|
80
80
|
|
81
81
|
def raise_if_none(v: Any) -> Any:
|
82
82
|
if v is None:
|
83
|
-
raise ValueError(f"v is None, v={v}")
|
83
|
+
raise ValueError(f"v is None, v={v}, type(v)={type(v)}")
|
84
|
+
return v
|
85
|
+
|
86
|
+
|
87
|
+
def raise_if_not_none(v: Any) -> Any:
|
88
|
+
if v is not None:
|
89
|
+
raise ValueError(f"v is not None, v={v}, type(v)={type(v)}")
|
84
90
|
return v
|
85
91
|
|
86
92
|
|
@@ -71,7 +71,9 @@ arpakitlib/_arpakit_project_template/src/additional_model/__init__.py,sha256=47D
|
|
71
71
|
arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py,sha256=4KCOvto9Hj5eMYpvfaJChghhR9bkCvKluGGPWrTezoY,134
|
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
|
-
arpakitlib/_arpakit_project_template/src/api/
|
74
|
+
arpakitlib/_arpakit_project_template/src/api/auth.py,sha256=Ljq_VjjiAaW3HEzq60nkSI-HkHfuv6j5-8Q6Qs8V9bU,261
|
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
|
75
77
|
arpakitlib/_arpakit_project_template/src/api/event.py,sha256=58wCVyVSIe_kydWi44M0Wvp7bTnV8xvO30gMXzjbFYc,750
|
76
78
|
arpakitlib/_arpakit_project_template/src/api/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
79
|
arpakitlib/_arpakit_project_template/src/api/router/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -82,19 +84,21 @@ arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py,sha256=47DEQpj8HBS
|
|
82
84
|
arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
85
|
arpakitlib/_arpakit_project_template/src/api/start_api_for_dev.py,sha256=BwROGTR8Hm1ewx_Z0k8HXeql4RIItCdCtP_hmhTT_PM,344
|
84
86
|
arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py,sha256=YtpATqzN216e76W5QOuzN-Vo6343PVDiHpKWYQ6oqyU,278
|
87
|
+
arpakitlib/_arpakit_project_template/src/api/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
85
88
|
arpakitlib/_arpakit_project_template/src/business_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
86
89
|
arpakitlib/_arpakit_project_template/src/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
90
|
arpakitlib/_arpakit_project_template/src/core/const.py,sha256=CZZew674y7LhCAlYhvuF5cV4Zb9nQ17j2Tcuj2GEBf4,1232
|
88
|
-
arpakitlib/_arpakit_project_template/src/core/settings.py,sha256=
|
91
|
+
arpakitlib/_arpakit_project_template/src/core/settings.py,sha256=Rg90TaiilxSxqvfeqrFeZNIXxrvfWgvwYME9ErHJ200,2058
|
89
92
|
arpakitlib/_arpakit_project_template/src/core/util.py,sha256=J1_AiI4DW_VB8ldLNATP6mjxz254CSxceGcqUbT0SVU,2006
|
90
93
|
arpakitlib/_arpakit_project_template/src/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
94
|
arpakitlib/_arpakit_project_template/src/db/sqlalchemy_model.py,sha256=nXtayUkBaVb6tWx5qJgXZLbLOTVAjnSLpSDxBm7yZLc,234
|
92
95
|
arpakitlib/_arpakit_project_template/src/db/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
93
96
|
arpakitlib/_arpakit_project_template/src/operation_execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
94
|
-
arpakitlib/_arpakit_project_template/src/operation_execution/
|
95
|
-
arpakitlib/_arpakit_project_template/src/operation_execution/
|
96
|
-
arpakitlib/_arpakit_project_template/src/operation_execution/
|
97
|
-
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
|
98
102
|
arpakitlib/_arpakit_project_template/src/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
99
103
|
arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py,sha256=3WVPgRsNCIxWpA-6t_Phe-nFULdHPhS1S_DO11XRmqk,80
|
100
104
|
arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py,sha256=MVDc71sj5I1muWin50GwrSxMwYtOOSDOtRmeFErHcXs,80
|
@@ -102,7 +106,7 @@ arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py,sha256=89
|
|
102
106
|
arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py,sha256=BlVvIhSFclBMQMHftETS57bRaFpkOdKPrZyxMbYJuDY,80
|
103
107
|
arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py,sha256=7ruCZevqJoLSdqL1OEJWUy3YPCOHQif7JqVTKxZ9acM,80
|
104
108
|
arpakitlib/_arpakit_project_template/src/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
105
|
-
arpakitlib/api_key_util.py,sha256=
|
109
|
+
arpakitlib/api_key_util.py,sha256=DtzREor5h70XlZOv1ounNoPHL5_cc0YA28SaHvlFaWs,224
|
106
110
|
arpakitlib/ar_additional_model_util.py,sha256=tNzZhZtvtJ1qC6Cn4UnyoEL58HudfpCdQy5ftkCqyik,473
|
107
111
|
arpakitlib/ar_aiogram_util.py,sha256=5JPCDZpdBGTE-EIWPRez9amCZAX7XemFIVu5YrQK7Pw,12264
|
108
112
|
arpakitlib/ar_arpakit_lib_module_util.py,sha256=V_mc3Ml73Tzz3arxmwEfIxruKMyrwbe8XZ9FfVDtUXY,5446
|
@@ -116,7 +120,7 @@ arpakitlib/ar_datetime_util.py,sha256=Xe1NiT9oPQzNSG7RVRkhukhbg4i-hhS5ImmV7sPUc8
|
|
116
120
|
arpakitlib/ar_dict_util.py,sha256=cF5LQJ6tLqyGoEXfDljMDZrikeZoWPw7CgINHIFGvXM,419
|
117
121
|
arpakitlib/ar_dream_ai_api_client_util.py,sha256=QF9XK7xK5ny1fvkcG4e0pfCySNNFRNPy0x0cmxfsAak,2818
|
118
122
|
arpakitlib/ar_encrypt_decrypt_util.py,sha256=GhWnp7HHkbhwFVVCzO1H07m-5gryr4yjWsXjOaNQm1Y,520
|
119
|
-
arpakitlib/ar_enumeration_util.py,sha256=
|
123
|
+
arpakitlib/ar_enumeration_util.py,sha256=1dQUEVgJRp0nCO-IrCKv5GTK0QkSzM44M1lOWkmPk3w,2532
|
120
124
|
arpakitlib/ar_fastapi_static/healthcheck,sha256=IIO7Wvjwlr2-LPSQ7Y8O35hcI6t0_s8zqITDxkYCO8I,11
|
121
125
|
arpakitlib/ar_fastapi_static/redoc/redoc.standalone.js,sha256=WCuodUNv1qVh0oW5fjnJDwb5AwOue73jKHdI9z8iGKU,909365
|
122
126
|
arpakitlib/ar_fastapi_static/swagger-ui/favicon-16x16.png,sha256=ryStYE3Xs7zaj5dauXMHX0ovcKQIeUShL474tjo-B8I,665
|
@@ -137,7 +141,7 @@ arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css,sha256=jzPZlgJTFwSdSphk9C
|
|
137
141
|
arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.css.map,sha256=5wq8eXMLU6Zxb45orZPL1zAsBFJReFw6GjYqGpUX3hg,262650
|
138
142
|
arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js,sha256=ffrLZHHEQ_g84A-ul3yWa10Kk09waOAxHcQXPuZuavg,339292
|
139
143
|
arpakitlib/ar_fastapi_static/swagger-ui/swagger-ui.js.map,sha256=9UhIW7MqCOZPAz1Sl1IKfZUuhWU0p-LJqrnjjJD9Xhc,1159454
|
140
|
-
arpakitlib/ar_fastapi_util.py,sha256=
|
144
|
+
arpakitlib/ar_fastapi_util.py,sha256=HOn_jpi4ruH11m8XGiFpyvUZmAED7z31-CdL-wXvjK8,24119
|
141
145
|
arpakitlib/ar_file_storage_in_dir_util.py,sha256=D3e3rGuHoI6xqAA5mVvEpVVpOWY1jyjNsjj2UhyHRbE,3674
|
142
146
|
arpakitlib/ar_file_util.py,sha256=07xCF7paAUP2JUyfpeX0l3N1oCSma7qAcBmrCIZVi3g,452
|
143
147
|
arpakitlib/ar_hash_util.py,sha256=Iqy6KBAOLBQMFLWv676boI5sV7atT2B-fb7aCdHOmIQ,340
|
@@ -152,7 +156,7 @@ arpakitlib/ar_logging_util.py,sha256=Gyd7B9k0glIXPm6dASiigWLq9LC9lw6vhXTCeWpY5PY
|
|
152
156
|
arpakitlib/ar_mongodb_util.py,sha256=2ECkTnGAZ92qxioL-fmN6R4yZOSr3bXdXLWTzT1C3vk,4038
|
153
157
|
arpakitlib/ar_need_type_util.py,sha256=xq5bbAXJG-93CRVZUcLW0ZdM22rj-ZUW17C5hX_5grg,1699
|
154
158
|
arpakitlib/ar_openai_api_client_util.py,sha256=dHUbfg1sVVCjsNl_fra3iCMEz1bR-Hk9fE-DdYbu7Wc,1215
|
155
|
-
arpakitlib/ar_operation_execution_util.py,sha256=
|
159
|
+
arpakitlib/ar_operation_execution_util.py,sha256=EZMQbjvp3EDFEfUYAdRV7_qtdqIW-qJrmVWpv5plxas,13874
|
156
160
|
arpakitlib/ar_parse_command.py,sha256=-s61xcATIsfw1eV_iD3xi-grsitbGzSDoAFc5V0OFy4,3447
|
157
161
|
arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
|
158
162
|
arpakitlib/ar_run_cmd_util.py,sha256=D_rPavKMmWkQtwvZFz-Io5Ak8eSODHkcFeLPzNVC68g,1072
|
@@ -163,12 +167,12 @@ arpakitlib/ar_sqlalchemy_model_util.py,sha256=TFGOAgpxcnBV_u7yZrLCkf1ldlB4Of8vIR
|
|
163
167
|
arpakitlib/ar_sqlalchemy_util.py,sha256=Hcg1THrDsSR_-8dsY1CG3NWPEv0FqCbkPXFXLtjlSJ0,4207
|
164
168
|
arpakitlib/ar_ssh_runner_util.py,sha256=jlnss4V4pziBN1rBzoK_lDiWm6nMOqGXfa6NFJSKH-Y,6796
|
165
169
|
arpakitlib/ar_str_util.py,sha256=oCEtQ_TTn35OEz9jCNLjbhopq76JmaifD_iYR-nEJJ4,2142
|
166
|
-
arpakitlib/ar_type_util.py,sha256=
|
170
|
+
arpakitlib/ar_type_util.py,sha256=e6Ch8I_B3FMJMj-fiZvTwtGde4hxSa48fGt5g8RlV6I,2301
|
167
171
|
arpakitlib/ar_yookassa_api_client_util.py,sha256=sh4fcUkAkdOetFn9JYoTvjcSXP-M1wU04KEY-ECLfLg,5137
|
168
172
|
arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
|
169
|
-
arpakitlib-1.7.
|
170
|
-
arpakitlib-1.7.
|
171
|
-
arpakitlib-1.7.
|
172
|
-
arpakitlib-1.7.
|
173
|
-
arpakitlib-1.7.
|
174
|
-
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
|