arpakitlib 1.7.137__py3-none-any.whl → 1.7.206__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 (47) hide show
  1. arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py +4 -4
  2. arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py +4 -4
  3. arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py +4 -4
  4. arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py +4 -4
  5. arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py +4 -4
  6. arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py +4 -4
  7. arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_7.py +4 -4
  8. arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py +2 -0
  9. arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py +8 -2
  10. arpakitlib/_arpakit_project_template/src/admin1/model_view.py +0 -18
  11. arpakitlib/_arpakit_project_template/src/api/{start_api_with_reload.py → _start_api_with_reload.py} +2 -2
  12. arpakitlib/_arpakit_project_template/src/api/{start_api_without_reload.py → _start_api_without_reload.py} +2 -2
  13. arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py +1 -0
  14. arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py +4 -0
  15. arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py +1 -0
  16. arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py +2 -0
  17. arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py +2 -0
  18. arpakitlib/_arpakit_project_template/src/core/{check_logging.py → _check_logging.py} +2 -2
  19. arpakitlib/_arpakit_project_template/src/core/{check_settings.py → _check_settings.py} +2 -2
  20. arpakitlib/_arpakit_project_template/src/core/{generate_settings_env_example.py → _generate_settings_env_example.py} +2 -2
  21. arpakitlib/_arpakit_project_template/src/core/const.py +5 -11
  22. arpakitlib/_arpakit_project_template/src/core/util.py +3 -0
  23. arpakitlib/_arpakit_project_template/src/db/{check_conn_sqlalchemy_db.py → _check_conn_sqlalchemy_db.py} +2 -2
  24. arpakitlib/_arpakit_project_template/src/db/{init_sqlalchemy_db.py → _init_sqlalchemy_db.py} +2 -2
  25. arpakitlib/_arpakit_project_template/src/db/{reinit_sqlalchemy_db.py → _reinit_sqlalchemy_db.py} +3 -3
  26. arpakitlib/_arpakit_project_template/src/db/const.py +1 -0
  27. arpakitlib/_arpakit_project_template/src/db/util.py +2 -0
  28. arpakitlib/_arpakit_project_template/src/operation_execution/{start_operation_executor_worker.py → _start_operation_executor_worker.py} +2 -2
  29. arpakitlib/_arpakit_project_template/src/operation_execution/{start_scheduled_operation_creator_worker.py → _start_scheduled_operation_creator_worker.py} +2 -2
  30. arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py +12 -8
  31. arpakitlib/_arpakit_project_template/src/operation_execution/util.py +1 -0
  32. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py +2 -0
  33. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py +2 -0
  34. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py +2 -0
  35. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py +2 -0
  36. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py +2 -0
  37. arpakitlib/ar_class_util.py +17 -0
  38. arpakitlib/ar_enumeration_util.py +19 -1
  39. arpakitlib/ar_operation_execution_util.py +1 -0
  40. arpakitlib/ar_settings_util.py +2 -2
  41. arpakitlib/ar_sqladmin_util.py +101 -0
  42. {arpakitlib-1.7.137.dist-info → arpakitlib-1.7.206.dist-info}/METADATA +1 -1
  43. {arpakitlib-1.7.137.dist-info → arpakitlib-1.7.206.dist-info}/RECORD +47 -45
  44. /arpakitlib/{api_key_util.py → ar_api_key_util.py} +0 -0
  45. {arpakitlib-1.7.137.dist-info → arpakitlib-1.7.206.dist-info}/LICENSE +0 -0
  46. {arpakitlib-1.7.137.dist-info → arpakitlib-1.7.206.dist-info}/WHEEL +0 -0
  47. {arpakitlib-1.7.137.dist-info → arpakitlib-1.7.206.dist-info}/entry_points.txt +0 -0
@@ -1,14 +1,14 @@
1
1
  import asyncio
2
2
 
3
3
 
4
- def __sandbox():
4
+ def _sandbox():
5
5
  pass
6
6
 
7
7
 
8
- async def __async_sandbox():
8
+ async def _async_sandbox():
9
9
  pass
10
10
 
11
11
 
12
12
  if __name__ == '__main__':
13
- __sandbox()
14
- asyncio.run(__async_sandbox())
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -1,14 +1,14 @@
1
1
  import asyncio
2
2
 
3
3
 
4
- def __sandbox():
4
+ def _sandbox():
5
5
  pass
6
6
 
7
7
 
8
- async def __async_sandbox():
8
+ async def _async_sandbox():
9
9
  pass
10
10
 
11
11
 
12
12
  if __name__ == '__main__':
13
- __sandbox()
14
- asyncio.run(__async_sandbox())
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -1,14 +1,14 @@
1
1
  import asyncio
2
2
 
3
3
 
4
- def __sandbox():
4
+ def _sandbox():
5
5
  pass
6
6
 
7
7
 
8
- async def __async_sandbox():
8
+ async def _async_sandbox():
9
9
  pass
10
10
 
11
11
 
12
12
  if __name__ == '__main__':
13
- __sandbox()
14
- asyncio.run(__async_sandbox())
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -1,14 +1,14 @@
1
1
  import asyncio
2
2
 
3
3
 
4
- def __sandbox():
4
+ def _sandbox():
5
5
  pass
6
6
 
7
7
 
8
- async def __async_sandbox():
8
+ async def _async_sandbox():
9
9
  pass
10
10
 
11
11
 
12
12
  if __name__ == '__main__':
13
- __sandbox()
14
- asyncio.run(__async_sandbox())
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -1,14 +1,14 @@
1
1
  import asyncio
2
2
 
3
3
 
4
- def __sandbox():
4
+ def _sandbox():
5
5
  pass
6
6
 
7
7
 
8
- async def __async_sandbox():
8
+ async def _async_sandbox():
9
9
  pass
10
10
 
11
11
 
12
12
  if __name__ == '__main__':
13
- __sandbox()
14
- asyncio.run(__async_sandbox())
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -1,14 +1,14 @@
1
1
  import asyncio
2
2
 
3
3
 
4
- def __sandbox():
4
+ def _sandbox():
5
5
  pass
6
6
 
7
7
 
8
- async def __async_sandbox():
8
+ async def _async_sandbox():
9
9
  pass
10
10
 
11
11
 
12
12
  if __name__ == '__main__':
13
- __sandbox()
14
- asyncio.run(__async_sandbox())
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -1,14 +1,14 @@
1
1
  import asyncio
2
2
 
3
3
 
4
- def __sandbox():
4
+ def _sandbox():
5
5
  pass
6
6
 
7
7
 
8
- async def __async_sandbox():
8
+ async def _async_sandbox():
9
9
  pass
10
10
 
11
11
 
12
12
  if __name__ == '__main__':
13
- __sandbox()
14
- asyncio.run(__async_sandbox())
13
+ _sandbox()
14
+ asyncio.run(_async_sandbox())
@@ -4,3 +4,5 @@ from arpakitlib.ar_additional_model_util import BaseAM
4
4
  class ExampleAM(BaseAM):
5
5
  name: str = "Name"
6
6
  surname: str = "Surname"
7
+
8
+ # ...
@@ -1,8 +1,11 @@
1
+ import importlib
2
+ from contextlib import suppress
3
+
1
4
  from fastapi import FastAPI
2
5
  from sqladmin import Admin
3
6
 
7
+ from arpakitlib.ar_sqladmin_util import SimpleModelView
4
8
  from src.admin1.admin_auth import AdminAuth
5
- from src.admin1.model_view import MODEL_VIEWS
6
9
  from src.api.transmitted_api_data import TransmittedAPIData
7
10
  from src.core.settings import get_cached_settings
8
11
 
@@ -20,7 +23,10 @@ def add_admin1_in_app(*, app: FastAPI) -> FastAPI:
20
23
  title=get_cached_settings().project_name
21
24
  )
22
25
 
23
- for model_view in MODEL_VIEWS:
26
+ with suppress(Exception):
27
+ importlib.import_module("src.admin1.model_view")
28
+
29
+ for model_view in SimpleModelView.all_subclasses:
24
30
  admin.add_model_view(model_view)
25
31
 
26
32
  return app
@@ -1,19 +1 @@
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"]
15
-
16
-
17
- MODEL_VIEWS = []
18
-
19
1
  # ...
@@ -3,7 +3,7 @@ import uvicorn
3
3
  from src.core.settings import get_cached_settings
4
4
 
5
5
 
6
- def __start_api_for_dev_with_reload():
6
+ def _start_api_for_dev_with_reload():
7
7
  uvicorn.run(
8
8
  "src.api.asgi:app",
9
9
  port=get_cached_settings().api_port,
@@ -14,4 +14,4 @@ def __start_api_for_dev_with_reload():
14
14
 
15
15
 
16
16
  if __name__ == '__main__':
17
- __start_api_for_dev_with_reload()
17
+ _start_api_for_dev_with_reload()
@@ -3,7 +3,7 @@ import uvicorn
3
3
  from src.core.settings import get_cached_settings
4
4
 
5
5
 
6
- def __start_api_for_dev_without_reload():
6
+ def _start_api_for_dev_without_reload():
7
7
  uvicorn.run(
8
8
  "src.api.asgi:app",
9
9
  port=get_cached_settings().api_port,
@@ -14,4 +14,4 @@ def __start_api_for_dev_without_reload():
14
14
 
15
15
 
16
16
  if __name__ == '__main__':
17
- __start_api_for_dev_without_reload()
17
+ _start_api_for_dev_without_reload()
@@ -12,6 +12,7 @@ api_router = APIRouter()
12
12
 
13
13
  @api_router.get(
14
14
  "",
15
+ name="Get API Error info",
15
16
  response_model=APIErrorInfoSO | ErrorSO,
16
17
  status_code=status.HTTP_200_OK
17
18
  )
@@ -4,8 +4,12 @@ from src.api.router.v1 import get_api_error_info
4
4
 
5
5
  main_v1_api_router = APIRouter()
6
6
 
7
+ # API Error Info
8
+
7
9
  main_v1_api_router.include_router(
8
10
  router=get_api_error_info.api_router,
9
11
  prefix="/get_api_error_info",
10
12
  tags=["API Error Info"]
11
13
  )
14
+
15
+ # ...
@@ -4,3 +4,5 @@ from arpakitlib.ar_fastapi_util import BaseSO
4
4
  class APIErrorInfoSO(BaseSO):
5
5
  api_error_codes: list[str] = []
6
6
  api_error_specification_codes: list[str] = []
7
+
8
+ # ...
@@ -11,3 +11,5 @@ class TransmittedAPIData(BaseTransmittedAPIData):
11
11
  media_file_storage_in_dir: FileStorageInDir | None = None
12
12
  cache_file_storage_in_dir: FileStorageInDir | None = None
13
13
  dump_file_storage_in_dir: FileStorageInDir | None = None
14
+
15
+ # ...
@@ -5,10 +5,10 @@ from src.core.util import setup_logging
5
5
  _logger = logging.getLogger(__name__)
6
6
 
7
7
 
8
- def __check_logging():
8
+ def _check_logging():
9
9
  setup_logging()
10
10
  _logger.info("logging is good")
11
11
 
12
12
 
13
13
  if __name__ == '__main__':
14
- __check_logging()
14
+ _check_logging()
@@ -2,9 +2,9 @@ from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str
2
2
  from src.core.settings import get_cached_settings
3
3
 
4
4
 
5
- def __check_settings():
5
+ def _check_settings():
6
6
  print(safely_transfer_obj_to_json_str(get_cached_settings().model_dump(mode="json")))
7
7
 
8
8
 
9
9
  if __name__ == '__main__':
10
- __check_settings()
10
+ _check_settings()
@@ -5,10 +5,10 @@ from src.core.const import ProjectPaths
5
5
  from src.core.settings import Settings, get_cached_settings
6
6
 
7
7
 
8
- def __generate_settings_env_example():
8
+ def _generate_settings_env_example():
9
9
  print(safely_transfer_obj_to_json_str(get_cached_settings().model_dump(mode="json")))
10
10
  Settings.save_env_example_to_file(filepath=os.path.join(ProjectPaths.base_dirpath, "example.env"))
11
11
 
12
12
 
13
13
  if __name__ == '__main__':
14
- __generate_settings_env_example()
14
+ _generate_settings_env_example()
@@ -3,6 +3,7 @@ import os
3
3
  import pathlib
4
4
 
5
5
  from arpakitlib.ar_enumeration_util import Enumeration
6
+ from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str
6
7
 
7
8
 
8
9
  class ProjectPaths(Enumeration):
@@ -24,18 +25,11 @@ class ProjectPaths(Enumeration):
24
25
  static_dirpath: str = os.path.join(resource_dirpath, static_dirname)
25
26
 
26
27
 
28
+ # ...
29
+
30
+
27
31
  def __example():
28
- print(f"base_dirpath: {ProjectPaths.base_dirpath}")
29
- print(f"env_filename: {ProjectPaths.env_filename}")
30
- print(f"env_filepath: {ProjectPaths.env_filepath}")
31
- print(f"src_dirname: {ProjectPaths.src_dirname}")
32
- print(f"src_dirpath: {ProjectPaths.src_dirpath}")
33
- print(f"manage_dirname: {ProjectPaths.manage_dirname}")
34
- print(f"manage_dirpath: {ProjectPaths.manage_dirpath}")
35
- print(f"resource_dirname: {ProjectPaths.resource_dirname}")
36
- print(f"resource_dirpath: {ProjectPaths.resource_dirpath}")
37
- print(f"static_dirname: {ProjectPaths.static_dirname}")
38
- print(f"static_dirpath: {ProjectPaths.static_dirpath}")
32
+ print(safely_transfer_obj_to_json_str(ProjectPaths.key_to_value()))
39
33
 
40
34
 
41
35
  async def __async_example():
@@ -45,6 +45,9 @@ def now_local_dt() -> datetime:
45
45
  return now_dt(tz=get_cached_settings().local_timezone_as_pytz)
46
46
 
47
47
 
48
+ # ...
49
+
50
+
48
51
  def __example():
49
52
  pass
50
53
 
@@ -2,10 +2,10 @@ from src.core.util import setup_logging
2
2
  from src.db.util import get_cached_sqlalchemy_db
3
3
 
4
4
 
5
- def __check_conn_sqlalchemy_db():
5
+ def _check_conn_sqlalchemy_db():
6
6
  setup_logging()
7
7
  get_cached_sqlalchemy_db().check_conn()
8
8
 
9
9
 
10
10
  if __name__ == '__main__':
11
- __check_conn_sqlalchemy_db()
11
+ _check_conn_sqlalchemy_db()
@@ -2,10 +2,10 @@ from src.core.util import setup_logging
2
2
  from src.db.util import get_cached_sqlalchemy_db
3
3
 
4
4
 
5
- def __init_sqlalchemy_db():
5
+ def _init_sqlalchemy_db():
6
6
  setup_logging()
7
7
  get_cached_sqlalchemy_db().init()
8
8
 
9
9
 
10
10
  if __name__ == '__main__':
11
- __init_sqlalchemy_db()
11
+ _init_sqlalchemy_db()
@@ -3,11 +3,11 @@ from src.core.util import setup_logging
3
3
  from src.db.util import get_cached_sqlalchemy_db
4
4
 
5
5
 
6
- def __reinit_sqlalchemy_db():
6
+ def _reinit_sqlalchemy_db():
7
7
  setup_logging()
8
- get_cached_settings().raise_if_mode_type_not_prod()
8
+ get_cached_settings().raise_if_mode_type_prod()
9
9
  get_cached_sqlalchemy_db().reinit()
10
10
 
11
11
 
12
12
  if __name__ == '__main__':
13
- __reinit_sqlalchemy_db()
13
+ _reinit_sqlalchemy_db()
@@ -0,0 +1 @@
1
+ # ...
@@ -19,3 +19,5 @@ def create_sqlalchemy_db() -> SQLAlchemyDB:
19
19
  @lru_cache()
20
20
  def get_cached_sqlalchemy_db() -> SQLAlchemyDB:
21
21
  return create_sqlalchemy_db()
22
+
23
+ # ...
@@ -4,7 +4,7 @@ from src.db.util import get_cached_sqlalchemy_db
4
4
  from src.operation_execution.operation_executor import OperationExecutor
5
5
 
6
6
 
7
- def start_operation_executor_worker():
7
+ def _start_operation_executor_worker():
8
8
  setup_logging()
9
9
  worker = OperationExecutorWorker(
10
10
  sqlalchemy_db=get_cached_sqlalchemy_db(),
@@ -14,4 +14,4 @@ def start_operation_executor_worker():
14
14
 
15
15
 
16
16
  if __name__ == '__main__':
17
- start_operation_executor_worker()
17
+ _start_operation_executor_worker()
@@ -4,7 +4,7 @@ from src.db.util import get_cached_sqlalchemy_db
4
4
  from src.operation_execution.scheduled_operations import SCHEDULED_OPERATIONS
5
5
 
6
6
 
7
- def start_scheduled_operation_creator_worker():
7
+ def _start_scheduled_operation_creator_worker():
8
8
  setup_logging()
9
9
  worker = ScheduledOperationCreatorWorker(
10
10
  sqlalchemy_db=get_cached_sqlalchemy_db(),
@@ -14,4 +14,4 @@ def start_scheduled_operation_creator_worker():
14
14
 
15
15
 
16
16
  if __name__ == '__main__':
17
- start_scheduled_operation_creator_worker()
17
+ _start_scheduled_operation_creator_worker()
@@ -3,23 +3,27 @@ from datetime import timedelta, time
3
3
  from arpakitlib.ar_operation_execution_util import ScheduledOperation, every_timedelta_is_time_func, \
4
4
  between_different_times_is_time_func
5
5
  from arpakitlib.ar_sqlalchemy_model_util import BaseOperationTypes
6
+ from src.core.settings import get_cached_settings
6
7
 
7
8
  SCHEDULED_OPERATIONS = []
8
9
 
9
- healthcheck_1_scheduled_operation = ScheduledOperation(
10
- type=BaseOperationTypes.healthcheck_,
11
- input_data={"healthcheck_1": "healthcheck_1"},
12
- is_time_func=every_timedelta_is_time_func(td=timedelta(seconds=15))
13
- )
14
- SCHEDULED_OPERATIONS.append(healthcheck_1_scheduled_operation)
10
+ if get_cached_settings().is_mode_type_not_prod:
11
+ healthcheck_1_scheduled_operation = ScheduledOperation(
12
+ type=BaseOperationTypes.healthcheck_,
13
+ input_data={"healthcheck_1": "healthcheck_1"},
14
+ is_time_func=every_timedelta_is_time_func(td=timedelta(seconds=15))
15
+ )
16
+ SCHEDULED_OPERATIONS.append(healthcheck_1_scheduled_operation)
15
17
 
16
18
  healthcheck_2_scheduled_operation = ScheduledOperation(
17
19
  type=BaseOperationTypes.healthcheck_,
18
20
  input_data={"healthcheck_2": "healthcheck_2"},
19
21
  is_time_func=between_different_times_is_time_func(
20
- from_time=time(hour=12, minute=0),
21
- to_time=time(hour=12, minute=15)
22
+ from_time=time(hour=0, minute=0),
23
+ to_time=time(hour=0, minute=30)
22
24
  ),
23
25
  timeout_after_creation=timedelta(seconds=60)
24
26
  )
25
27
  SCHEDULED_OPERATIONS.append(healthcheck_2_scheduled_operation)
28
+
29
+ # ...
@@ -1,6 +1,8 @@
1
1
  def make_test_data_1():
2
+ # ...
2
3
  pass
3
4
 
4
5
 
5
6
  async def async_make_test_data_1():
7
+ # ...
6
8
  pass
@@ -1,6 +1,8 @@
1
1
  def make_test_data_2():
2
+ # ...
2
3
  pass
3
4
 
4
5
 
5
6
  async def async_make_test_data_2():
7
+ # ...
6
8
  pass
@@ -1,6 +1,8 @@
1
1
  def make_test_data_3():
2
+ # ...
2
3
  pass
3
4
 
4
5
 
5
6
  async def async_make_test_data_3():
7
+ # ...
6
8
  pass
@@ -1,6 +1,8 @@
1
1
  def make_test_data_4():
2
+ # ...
2
3
  pass
3
4
 
4
5
 
5
6
  async def async_make_test_data_4():
7
+ # ...
6
8
  pass
@@ -1,6 +1,8 @@
1
1
  def make_test_data_5():
2
+ # ...
2
3
  pass
3
4
 
4
5
 
5
6
  async def async_make_test_data_5():
7
+ # ...
6
8
  pass
@@ -0,0 +1,17 @@
1
+ # arpakit
2
+
3
+
4
+ _ARPAKIT_LIB_MODULE_VERSION = "3.0"
5
+
6
+
7
+ class CollectingSubclassesMeta(type):
8
+ """
9
+ Метакласс для автоматического сбора всех наследников в поле ALL_SUBCLASSES.
10
+ """
11
+
12
+ def __init__(cls, name, bases, dct, **kwargs):
13
+ super().__init__(name, bases, dct, **kwargs)
14
+ if not hasattr(cls, "all_subclasses"):
15
+ cls.all_subclasses = []
16
+ elif bases:
17
+ cls.all_subclasses.append(cls)
@@ -1,6 +1,6 @@
1
1
  # arpakit
2
2
 
3
- from typing import Union, Iterator, Iterable
3
+ from typing import Union, Iterator, Iterable, Any
4
4
 
5
5
  _ARPAKIT_LIB_MODULE_VERSION = "3.0"
6
6
 
@@ -80,6 +80,24 @@ class Enumeration:
80
80
  def print(cls):
81
81
  print(cls.str_for_print())
82
82
 
83
+ @classmethod
84
+ def key_to_value(cls) -> dict[str, Any]:
85
+ big_dict = {}
86
+ for class_ in reversed(cls.mro()):
87
+ big_dict.update(class_.__dict__)
88
+ big_dict.update(cls.__dict__)
89
+
90
+ result = {}
91
+ for key, value in big_dict.items():
92
+ if (
93
+ isinstance(key, str)
94
+ and not (key.startswith("__") or key.endswith("__"))
95
+ and isinstance(value, (str, int))
96
+ ):
97
+ result[key] = value
98
+
99
+ return result
100
+
83
101
 
84
102
  def __example():
85
103
  pass
@@ -411,6 +411,7 @@ class ScheduledOperationCreatorWorker(BaseWorker):
411
411
  session.add(operation_dbm)
412
412
  session.commit()
413
413
  session.refresh(operation_dbm)
414
+ self._logger.info(f"scheduled operation (id={operation_dbm.id}) was created")
414
415
 
415
416
  if scheduled_operation.timeout_after_creation is not None:
416
417
  if timeout is not None:
@@ -39,7 +39,7 @@ class SimpleSettings(BaseSettings):
39
39
 
40
40
  @property
41
41
  def is_mode_type_not_prod(self) -> bool:
42
- return self.mode_type == self.ModeTypes.not_prod
42
+ return self.mode_type == ModeTypes.not_prod
43
43
 
44
44
  def raise_if_mode_type_not_prod(self):
45
45
  if self.is_mode_type_not_prod:
@@ -47,7 +47,7 @@ class SimpleSettings(BaseSettings):
47
47
 
48
48
  @property
49
49
  def is_mode_type_prod(self) -> bool:
50
- return self.mode_type == self.ModeTypes.prod
50
+ return self.mode_type == ModeTypes.prod
51
51
 
52
52
  def raise_if_mode_type_prod(self):
53
53
  if self.is_mode_type_prod:
@@ -0,0 +1,101 @@
1
+ # arpakit
2
+ from sqladmin import ModelView
3
+ from sqladmin.models import ModelViewMeta
4
+
5
+ from arpakitlib.ar_class_util import CollectingSubclassesMeta
6
+ from arpakitlib.ar_sqlalchemy_model_util import OperationDBM, StoryLogDBM
7
+
8
+ _ARPAKIT_LIB_MODULE_VERSION = "3.0"
9
+
10
+
11
+ def create_combined_meta(*metas):
12
+ """
13
+ Создает объединённый метакласс для устранения конфликтов.
14
+ """
15
+
16
+ class CombinedMeta(*metas):
17
+ pass
18
+
19
+ return CombinedMeta
20
+
21
+
22
+ class SimpleModelView(ModelView, metaclass=create_combined_meta(CollectingSubclassesMeta, ModelViewMeta)):
23
+ can_create = True
24
+ can_edit = True
25
+ can_delete = True
26
+ can_view_details = True
27
+ can_export = True
28
+ page_size = 50
29
+ page_size_options = [25, 50, 100, 200]
30
+ save_as = True
31
+ save_as_continue = True
32
+ export_types = ["xlsx", "csv", "json"]
33
+
34
+
35
+ class OperationMV(SimpleModelView, model=OperationDBM):
36
+ name = "Operation"
37
+ name_plural = "Operations"
38
+ column_list = [
39
+ OperationDBM.id,
40
+ OperationDBM.long_id,
41
+ OperationDBM.creation_dt,
42
+ OperationDBM.status,
43
+ OperationDBM.type,
44
+ OperationDBM.execution_start_dt,
45
+ OperationDBM.execution_finish_dt,
46
+ OperationDBM.input_data,
47
+ OperationDBM.output_data,
48
+ OperationDBM.error_data
49
+ ]
50
+ form_columns = [
51
+ OperationDBM.status,
52
+ OperationDBM.type,
53
+ OperationDBM.execution_start_dt,
54
+ OperationDBM.execution_finish_dt,
55
+ OperationDBM.input_data,
56
+ OperationDBM.output_data,
57
+ OperationDBM.error_data
58
+ ]
59
+ column_default_sort = [(OperationDBM.creation_dt, True)]
60
+ column_searchable_list = [
61
+ OperationDBM.id,
62
+ OperationDBM.long_id,
63
+ OperationDBM.status,
64
+ OperationDBM.type,
65
+ ]
66
+
67
+
68
+ class StoryLogMV(SimpleModelView, model=StoryLogDBM):
69
+ name = "Operation"
70
+ name_plural = "Operations"
71
+ column_list = [
72
+ StoryLogDBM.id,
73
+ StoryLogDBM.long_id,
74
+ StoryLogDBM.creation_dt,
75
+ StoryLogDBM.level,
76
+ StoryLogDBM.title,
77
+ StoryLogDBM.data
78
+ ]
79
+ form_columns = [
80
+ StoryLogDBM.level,
81
+ StoryLogDBM.title,
82
+ StoryLogDBM.data
83
+ ]
84
+ column_default_sort = [(StoryLogDBM.creation_dt, True)]
85
+ column_searchable_list = [
86
+ StoryLogDBM.id,
87
+ StoryLogDBM.long_id,
88
+ StoryLogDBM.level,
89
+ StoryLogDBM.title,
90
+ StoryLogDBM.data
91
+ ]
92
+
93
+
94
+ def __example():
95
+ print(len(SimpleModelView.all_subclasses))
96
+ for model_view in SimpleModelView.all_subclasses:
97
+ print(model_view)
98
+
99
+
100
+ if __name__ == '__main__':
101
+ __example()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.7.137
3
+ Version: 1.7.206
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
@@ -43,13 +43,13 @@ arpakitlib/_arpakit_project_template/manage/poetry_show_arpakitlib.sh,sha256=q2b
43
43
  arpakitlib/_arpakit_project_template/manage/poetry_update.sh,sha256=ZtoXIC4Qq7PMTDxQMwUxvkYC6lTc5LC23ILTywWbyoU,164
44
44
  arpakitlib/_arpakit_project_template/manage/poetry_update_arpakitlib.sh,sha256=hh7vj-yKgKqLfaGb8cjsJ_NTa7fBtE4s3yxzte4D8bw,163
45
45
  arpakitlib/_arpakit_project_template/manage/sandbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
47
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
48
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
49
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
50
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
51
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
52
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_7.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
46
+ arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py,sha256=dr5K0bdhF-1PlzJuG5wCYqyJ9KeBoNCz6363ZVnxcsk,159
47
+ arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py,sha256=dr5K0bdhF-1PlzJuG5wCYqyJ9KeBoNCz6363ZVnxcsk,159
48
+ arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py,sha256=dr5K0bdhF-1PlzJuG5wCYqyJ9KeBoNCz6363ZVnxcsk,159
49
+ arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py,sha256=dr5K0bdhF-1PlzJuG5wCYqyJ9KeBoNCz6363ZVnxcsk,159
50
+ arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py,sha256=dr5K0bdhF-1PlzJuG5wCYqyJ9KeBoNCz6363ZVnxcsk,159
51
+ arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py,sha256=dr5K0bdhF-1PlzJuG5wCYqyJ9KeBoNCz6363ZVnxcsk,159
52
+ arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_7.py,sha256=dr5K0bdhF-1PlzJuG5wCYqyJ9KeBoNCz6363ZVnxcsk,159
53
53
  arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_8.sh,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
54
  arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_9.sh,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  arpakitlib/_arpakit_project_template/resource/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -58,12 +58,14 @@ arpakitlib/_arpakit_project_template/resource/static/healthcheck,sha256=IIO7Wvjw
58
58
  arpakitlib/_arpakit_project_template/resource/static/helloworld,sha256=eH7Hbcr9IMGQjrCTahL5Ht0QWrXNfswrGuIDJkg0Xf8,11
59
59
  arpakitlib/_arpakit_project_template/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  arpakitlib/_arpakit_project_template/src/additional_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py,sha256=4KCOvto9Hj5eMYpvfaJChghhR9bkCvKluGGPWrTezoY,134
61
+ arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py,sha256=rCjK4hbog2kF-37SGHet0mrSjGXrAi1LxCgLT1IzzW8,141
62
62
  arpakitlib/_arpakit_project_template/src/admin1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py,sha256=P1G7ppaec1tFkbKSFlf1CmvIfz9FpT2OPqQtXUVWmlA,755
63
+ arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py,sha256=7zF-9Xa15bAbzqRQD18hAbzUQTflASoTjVProcdGWTM,922
64
64
  arpakitlib/_arpakit_project_template/src/admin1/admin_auth.py,sha256=qEC7gMy9E6mwuQRxnSsmVthXahVai4zjiC6Z8O3MZn8,804
65
- arpakitlib/_arpakit_project_template/src/admin1/model_view.py,sha256=kSscddS6RDZS1VpX0t1n0sjoCjT5O7U8d5YRmT3dauQ,357
65
+ arpakitlib/_arpakit_project_template/src/admin1/model_view.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
66
66
  arpakitlib/_arpakit_project_template/src/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ arpakitlib/_arpakit_project_template/src/api/_start_api_with_reload.py,sha256=3IjlhcleK2JoG-rYDHxVKpJA8uq4dTW_-_lbgPXsufI,333
68
+ arpakitlib/_arpakit_project_template/src/api/_start_api_without_reload.py,sha256=SRU3vahgxvVAzb8nIRDspXusK8_SS5QGblJE824Y12s,340
67
69
  arpakitlib/_arpakit_project_template/src/api/asgi.py,sha256=a5UBxOyNC8NG3E0ayhiDo3t5tPoB3WtOf2gbZJFWBAA,74
68
70
  arpakitlib/_arpakit_project_template/src/api/auth.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
69
71
  arpakitlib/_arpakit_project_template/src/api/const.py,sha256=7d4qD5hedqr7QxVzbfsA7E1bNZn2Pm2U8joXGtpANu0,287
@@ -72,52 +74,50 @@ arpakitlib/_arpakit_project_template/src/api/event.py,sha256=Jd1eWUpPzGSg-wBIsCh
72
74
  arpakitlib/_arpakit_project_template/src/api/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
75
  arpakitlib/_arpakit_project_template/src/api/router/main_router.py,sha256=Yv699WCJDcdiJMXFg1kPTvolqj-NAGoXfqe-vzbMzIU,228
74
76
  arpakitlib/_arpakit_project_template/src/api/router/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py,sha256=lz2yH5IjzKvkdAqOErnT4E4DCTwmE1Ru0h_7dc_ZNn4,844
76
- arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py,sha256=fvT-t2c2o6XVVJWiUdNnIWEOE8Q8F4v1Ik1Nae5YqvU,256
77
+ arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py,sha256=FetRdIytQFOFlpo310jYEtrQSQm-SJ_6FOXB1Gbeq04,875
78
+ arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py,sha256=QG-uAwxvFAWoY1g6U0wOBz-X4jmKnpVp1R904PPIp9E,281
77
79
  arpakitlib/_arpakit_project_template/src/api/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
80
  arpakitlib/_arpakit_project_template/src/api/schema/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
- arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py,sha256=odc-UyxBwUPh4t0H6qIuzAsBA_Qrm3H2qP-YBgJpaKc,164
81
- arpakitlib/_arpakit_project_template/src/api/start_api_with_reload.py,sha256=iVJ8LSmY3ikzxml0cOuawmsJ8d_zkgf3c6apkrrOuRA,335
82
- arpakitlib/_arpakit_project_template/src/api/start_api_without_reload.py,sha256=kHqVwznAbtgvsVmg3Y5rCzYcQ3KvF3hqJsTcmAAW_3Y,342
83
- arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py,sha256=fEWpfjnIrGluDrjgbsJwucQoiXKTP1cUYYORTFKdOJY,531
81
+ arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
82
+ arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py,sha256=zeHXIoRZYl4TlXEUKv1GMFYFmlNPVZ9jdMTJs3ZmBIk,171
83
+ arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py,sha256=T17h65JMwfFqHTQRKcUUfwtm4NmlGAvs5wUZr0m0zks,542
84
84
  arpakitlib/_arpakit_project_template/src/api/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
85
  arpakitlib/_arpakit_project_template/src/business_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
86
  arpakitlib/_arpakit_project_template/src/business_service/hello_world.py,sha256=mEVxsTFsd5u_T88l4mtCfoPre9QixAmQvzQmM2J8Okc,247
87
87
  arpakitlib/_arpakit_project_template/src/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
- arpakitlib/_arpakit_project_template/src/core/check_logging.py,sha256=TXAG-v7rH3uSSyCgraEX-3gbDs4J2MGGaBJb1P-xj18,227
89
- arpakitlib/_arpakit_project_template/src/core/check_settings.py,sha256=hiRDvMLdECHUawl5Z0aMbsVmHJZkp0TML_1sWAnQjXI,286
90
- arpakitlib/_arpakit_project_template/src/core/const.py,sha256=86zjRG3umtjQWYUMPKGaNwHnXM-WSOF-2l0A-Le51kI,1504
91
- arpakitlib/_arpakit_project_template/src/core/generate_settings_env_example.py,sha256=VFxb3tV2eNfE93cn2rCIiLsRLx5eGgugnpak9OBKoro,485
88
+ arpakitlib/_arpakit_project_template/src/core/_check_logging.py,sha256=APQp8jQa3vQwuEt6nayPdu6GmCPHvVdAvv63RaCdHTs,225
89
+ arpakitlib/_arpakit_project_template/src/core/_check_settings.py,sha256=BQUcr-yj3cxz5GQo0jXe99wMoqHKrrrKD3-UovsJAt0,284
90
+ arpakitlib/_arpakit_project_template/src/core/_generate_settings_env_example.py,sha256=SiEJe8AYQPOWicsaCwf9RdXp6UAmfkBdBT18AAInGb4,483
91
+ arpakitlib/_arpakit_project_template/src/core/const.py,sha256=e2Y0NIQHfzm3bmnbQnGy3Z5YKt6OYnIsRoqVY8oIV2E,1008
92
92
  arpakitlib/_arpakit_project_template/src/core/settings.py,sha256=Sie05LqTfxBOqnYz8trM3sAQdfYAJSQ2Xv4Xwt0aJbI,2348
93
- arpakitlib/_arpakit_project_template/src/core/util.py,sha256=5R8gvcZdvuDQes45FBnLC2IDv2Jhajp1VhJJYNKYjMQ,1539
93
+ arpakitlib/_arpakit_project_template/src/core/util.py,sha256=mcikqcjljZa2qhYeoR1tR9JUSprrVSod8XcIK_PqS6o,1547
94
94
  arpakitlib/_arpakit_project_template/src/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
- arpakitlib/_arpakit_project_template/src/db/check_conn_sqlalchemy_db.py,sha256=urdfQQxAdHNka6nwkxv1YG8cMsRKr8U6ddDxU92eWh4,251
96
- arpakitlib/_arpakit_project_template/src/db/const.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
- arpakitlib/_arpakit_project_template/src/db/init_sqlalchemy_db.py,sha256=gxCQT1bcJ-8Qos-zL8PnQ58i2GX_QkQnQSsSBKYR1f0,233
98
- arpakitlib/_arpakit_project_template/src/db/reinit_sqlalchemy_db.py,sha256=WFcv3bt2AdSIwwhpkxzNsh09wpJCmuHux63fMt_iLTg,345
95
+ arpakitlib/_arpakit_project_template/src/db/_check_conn_sqlalchemy_db.py,sha256=GPK7-w7x8ESqbZ0v1nI8m_ysWfnmjgRwyyh6kM8vYBQ,249
96
+ arpakitlib/_arpakit_project_template/src/db/_init_sqlalchemy_db.py,sha256=tHJ1NBUAR-9uAktx2RfPikzGGguhwEWfrWdj1y0XV-w,231
97
+ arpakitlib/_arpakit_project_template/src/db/_reinit_sqlalchemy_db.py,sha256=_4O_xr6FXt3qcWOmO82CKG3XX6_RqbqaOYSEygxpBfA,339
98
+ arpakitlib/_arpakit_project_template/src/db/const.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
99
99
  arpakitlib/_arpakit_project_template/src/db/sqlalchemy_model.py,sha256=nXtayUkBaVb6tWx5qJgXZLbLOTVAjnSLpSDxBm7yZLc,234
100
- arpakitlib/_arpakit_project_template/src/db/util.py,sha256=8Jg9TtTwvyxVYIN_W5_lk9y-Pyh8To1aMRFUKCRDuuA,550
100
+ arpakitlib/_arpakit_project_template/src/db/util.py,sha256=a8lj54I-vVGjhDg4SLOxahDjYuiPOSFxU86myCfE1M0,557
101
101
  arpakitlib/_arpakit_project_template/src/operation_execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
+ arpakitlib/_arpakit_project_template/src/operation_execution/_start_operation_executor_worker.py,sha256=K861UI9LFNxfCoPpQ5AJX-oUwjB6bfFNKScKsyU9Xd8,575
103
+ arpakitlib/_arpakit_project_template/src/operation_execution/_start_scheduled_operation_creator_worker.py,sha256=i6bKSrdCElclkVWMQrIdwDtOCiy8YvrL5OTMNpQ3drE,577
102
104
  arpakitlib/_arpakit_project_template/src/operation_execution/const.py,sha256=HjupGEDUWVijQlbzxZPI9vBbAVOETUYzYU9pdnc9IcI,176
103
105
  arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py,sha256=TuAlF3QPJq-Zsq693NHQ00dvCWAzuwce2q6ozesWFYY,725
104
- arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py,sha256=N6erGXOf_Qm3soPzuraMoc1jLXA6M1KfNsp0l4aAWBM,973
105
- arpakitlib/_arpakit_project_template/src/operation_execution/start_operation_executor_worker.py,sha256=PHGL98QK3OClsdNC2rQ37ghiSIvNpFKcMhk-LXs-Abc,573
106
- arpakitlib/_arpakit_project_template/src/operation_execution/start_scheduled_operation_creator_worker.py,sha256=cvk3vciWYfeOPJJQiDh66WyiNXwA5vm2eGeUsqWo93k,575
107
- arpakitlib/_arpakit_project_template/src/operation_execution/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
+ arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py,sha256=DwEzbsQtO_7mSah25uOoV7IrlsMNEIU2j2gA-MGqUMQ,1100
107
+ arpakitlib/_arpakit_project_template/src/operation_execution/util.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
108
108
  arpakitlib/_arpakit_project_template/src/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py,sha256=3WVPgRsNCIxWpA-6t_Phe-nFULdHPhS1S_DO11XRmqk,80
110
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py,sha256=MVDc71sj5I1muWin50GwrSxMwYtOOSDOtRmeFErHcXs,80
111
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py,sha256=89Rg0wubztpCNHBOWkhjZz3nB8Teilrl9xHlJvDWw9o,80
112
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py,sha256=BlVvIhSFclBMQMHftETS57bRaFpkOdKPrZyxMbYJuDY,80
113
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py,sha256=7ruCZevqJoLSdqL1OEJWUy3YPCOHQif7JqVTKxZ9acM,80
109
+ arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py,sha256=w24o2vrlqaoCfPYftWogHCV8MoUjqctwLTI3-tFlgf4,100
110
+ arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py,sha256=bhriAB1GtC2dPWb0lltj145EhotgE6X1I7O8WnJmOyk,100
111
+ arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py,sha256=t51BUgjQl59NofTQkOK_keHSMOuow3OePShsdhRSg8c,100
112
+ arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py,sha256=t1iYFim7v9NNR7Y10rUVRMVyq76Pdc82d5tQKpNlUFI,100
113
+ arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py,sha256=ptptUxpEa7sX7coToAYZHvy8oxXXQExxS1zqng5ET2I,100
114
114
  arpakitlib/_arpakit_project_template/src/tg_bot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
115
  arpakitlib/_arpakit_project_template/src/tg_bot/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
116
  arpakitlib/_arpakit_project_template/src/tg_bot/start_tg_bot.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
117
  arpakitlib/_arpakit_project_template/src/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
- arpakitlib/api_key_util.py,sha256=E84JlJXiDHtxLQmV8BNHvqNKu_G8-Dox0XxknYJQ37Q,422
119
118
  arpakitlib/ar_additional_model_util.py,sha256=GFg-glLCxH9X95R2bhTJsscVwv37FgE1qbaAAyXrnIE,917
120
119
  arpakitlib/ar_aiogram_util.py,sha256=5JPCDZpdBGTE-EIWPRez9amCZAX7XemFIVu5YrQK7Pw,12264
120
+ arpakitlib/ar_api_key_util.py,sha256=E84JlJXiDHtxLQmV8BNHvqNKu_G8-Dox0XxknYJQ37Q,422
121
121
  arpakitlib/ar_arpakit_lib_module_util.py,sha256=UEPU8wk29R_bBP_RENnhXYzNbj_RF9FWjowrj_yxWLA,5931
122
122
  arpakitlib/ar_arpakit_project_template_util.py,sha256=c7yc8w2IvZGH5hH8eOpL7JuD005hUxZ0GVDcSkJF5iI,3705
123
123
  arpakitlib/ar_arpakit_schedule_uust_api_client_util.py,sha256=jGbP6egs2yhgfheyqhM0J-SeM2qp2YrW7dV-u9djv4Q,19223
@@ -125,11 +125,12 @@ arpakitlib/ar_arpakitlib_cli_util.py,sha256=8lhEDxnwMSRX2PGV2xQtQru1AYKSA92SVolo
125
125
  arpakitlib/ar_base64_util.py,sha256=aZkg2cZTuAaP2IWeG_LXJ6RO7qhyskVwec-Lks0iM-k,676
126
126
  arpakitlib/ar_base_worker_util.py,sha256=Qm_C7PFH5W-LPu1AGX1zp29zbqZ04i71Su1U-eeQBkA,5674
127
127
  arpakitlib/ar_cache_file_util.py,sha256=Fo2pH-Zqm966KWFBHG_pbiySGZvhIFCYqy7k1weRfJ0,3476
128
+ arpakitlib/ar_class_util.py,sha256=Eb4orGm2EFSaHfmrY2A_Nis5iwFMDKFaz1_nxTnfmnQ,487
128
129
  arpakitlib/ar_datetime_util.py,sha256=Xe1NiT9oPQzNSG7RVRkhukhbg4i-hhS5ImmV7sPUc8o,971
129
130
  arpakitlib/ar_dict_util.py,sha256=cF5LQJ6tLqyGoEXfDljMDZrikeZoWPw7CgINHIFGvXM,419
130
131
  arpakitlib/ar_dream_ai_api_client_util.py,sha256=QF9XK7xK5ny1fvkcG4e0pfCySNNFRNPy0x0cmxfsAak,2818
131
132
  arpakitlib/ar_encrypt_decrypt_util.py,sha256=GhWnp7HHkbhwFVVCzO1H07m-5gryr4yjWsXjOaNQm1Y,520
132
- arpakitlib/ar_enumeration_util.py,sha256=1dQUEVgJRp0nCO-IrCKv5GTK0QkSzM44M1lOWkmPk3w,2532
133
+ arpakitlib/ar_enumeration_util.py,sha256=ZOkH1-duDcjQelJrdJ-nJ8h7wePFAgmpg_8e63Cyp0E,3072
133
134
  arpakitlib/ar_exception_util.py,sha256=3hZKsj34TZVdmd4JAQz7w515smWqB8o3gTwAEjuMdnI,408
134
135
  arpakitlib/ar_fastapi_static/healthcheck,sha256=IIO7Wvjwlr2-LPSQ7Y8O35hcI6t0_s8zqITDxkYCO8I,11
135
136
  arpakitlib/ar_fastapi_static/redoc/redoc.standalone.js,sha256=WCuodUNv1qVh0oW5fjnJDwb5AwOue73jKHdI9z8iGKU,909365
@@ -167,13 +168,14 @@ arpakitlib/ar_logging_util.py,sha256=mx3H6CzX9dsh29ruFmYnva8lL6mwvdBXmeHH9E2tvu8
167
168
  arpakitlib/ar_mongodb_util.py,sha256=2ECkTnGAZ92qxioL-fmN6R4yZOSr3bXdXLWTzT1C3vk,4038
168
169
  arpakitlib/ar_need_type_util.py,sha256=GETiREPMEYhch-yU6T--Bdawlbb04Jp1Qy7cOsUlIeA,2228
169
170
  arpakitlib/ar_openai_api_client_util.py,sha256=_XmlApvHFMSyjvZydPa_kASIt9LsFrZmSC7YEzIG8Bg,1806
170
- arpakitlib/ar_operation_execution_util.py,sha256=Mu8U6h6WnPPmiNsByT788jroUNQxKHUK4UUTiRpRYYQ,17523
171
+ arpakitlib/ar_operation_execution_util.py,sha256=uWLDJWYbfsYItUQ48qOSWy4qxCTCFMjElWEXswKtaWk,17617
171
172
  arpakitlib/ar_parse_command.py,sha256=-s61xcATIsfw1eV_iD3xi-grsitbGzSDoAFc5V0OFy4,3447
172
173
  arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
173
174
  arpakitlib/ar_run_cmd_util.py,sha256=D_rPavKMmWkQtwvZFz-Io5Ak8eSODHkcFeLPzNVC68g,1072
174
175
  arpakitlib/ar_schedule_uust_api_client_util.py,sha256=0Ns0mMEXYEkVmP6YTAXHyNcrhNsvCJ8X-G_5XwILhJ4,6855
175
- arpakitlib/ar_settings_util.py,sha256=WPlMp4mJdXds2PzmU4-w_poW2hzXlhoTukxKvHXA368,1866
176
+ arpakitlib/ar_settings_util.py,sha256=752EDXXnrA1uUbSD4InCHCZWEodLBwVUHrgOdOD2Xhw,1856
176
177
  arpakitlib/ar_sleep_util.py,sha256=OaLtRaJQWMkGjfj_mW1RB2P4RaSWsAIH8LUoXqsH0zM,1061
178
+ arpakitlib/ar_sqladmin_util.py,sha256=vQTRlf36VjW6l_zslZmjkHinMVuQfI-QZsXIlnXUpgE,2634
177
179
  arpakitlib/ar_sqlalchemy_model_util.py,sha256=nKJGN32eg3Gn5kmJwHdVJznPT5TydLsfUfwJGdypdUo,6264
178
180
  arpakitlib/ar_sqlalchemy_util.py,sha256=Hcg1THrDsSR_-8dsY1CG3NWPEv0FqCbkPXFXLtjlSJ0,4207
179
181
  arpakitlib/ar_ssh_runner_util.py,sha256=e9deuUdBW7Eh0Exx2nTBhk57SaOZYaJaSjNk8q6dbJk,6804
@@ -181,8 +183,8 @@ arpakitlib/ar_str_util.py,sha256=yU5gOwNXUQaH5b_tM5t6fXUn9oUcv5EQbVnq2wXXIpQ,337
181
183
  arpakitlib/ar_type_util.py,sha256=9C3ErtUVs0tAUqtK-foFzjJOykfBOntfCz2IogDOgfA,4134
182
184
  arpakitlib/ar_yookassa_api_client_util.py,sha256=sh4fcUkAkdOetFn9JYoTvjcSXP-M1wU04KEY-ECLfLg,5137
183
185
  arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
184
- arpakitlib-1.7.137.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
185
- arpakitlib-1.7.137.dist-info/METADATA,sha256=CG5xVEQzEGg2NRVwJCSYm5es8dKf3U2tT9ADOTwHlB0,3176
186
- arpakitlib-1.7.137.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
187
- arpakitlib-1.7.137.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
188
- arpakitlib-1.7.137.dist-info/RECORD,,
186
+ arpakitlib-1.7.206.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
187
+ arpakitlib-1.7.206.dist-info/METADATA,sha256=MwALBdVyl8K4gLJ9C-_MruUGQ1Caln_f7eJOPIthOXw,3176
188
+ arpakitlib-1.7.206.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
189
+ arpakitlib-1.7.206.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
190
+ arpakitlib-1.7.206.dist-info/RECORD,,
File without changes