arpakitlib 1.7.132__py3-none-any.whl → 1.7.207__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 (54) 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_for_dev_with_reload.py → _start_api_with_reload.py} +2 -2
  12. arpakitlib/_arpakit_project_template/src/api/{start_api_for_dev_without_reload.py → _start_api_without_reload.py} +2 -2
  13. arpakitlib/_arpakit_project_template/src/api/event.py +2 -8
  14. arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py +1 -0
  15. arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py +4 -0
  16. arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py +1 -0
  17. arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py +2 -0
  18. arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py +2 -0
  19. arpakitlib/_arpakit_project_template/src/business_service/hello_world.py +4 -1
  20. arpakitlib/_arpakit_project_template/src/core/{check_logging.py → _check_logging.py} +2 -2
  21. arpakitlib/_arpakit_project_template/src/core/{check_settings.py → _check_settings.py} +2 -4
  22. arpakitlib/_arpakit_project_template/src/core/{generate_settings_env_example.py → _generate_settings_env_example.py} +2 -4
  23. arpakitlib/_arpakit_project_template/src/core/const.py +5 -11
  24. arpakitlib/_arpakit_project_template/src/core/settings.py +14 -13
  25. arpakitlib/_arpakit_project_template/src/core/util.py +3 -0
  26. arpakitlib/_arpakit_project_template/src/db/{check_conn_sqlalchemy_db.py → _check_conn_sqlalchemy_db.py} +2 -2
  27. arpakitlib/_arpakit_project_template/src/db/{init_sqlalchemy_db.py → _init_sqlalchemy_db.py} +2 -2
  28. arpakitlib/_arpakit_project_template/src/db/{reinit_sqlalchemy_db.py → _reinit_sqlalchemy_db.py} +3 -3
  29. arpakitlib/_arpakit_project_template/src/db/const.py +1 -0
  30. arpakitlib/_arpakit_project_template/src/db/util.py +2 -0
  31. arpakitlib/_arpakit_project_template/src/operation_execution/{start_operation_executor_worker.py → _start_operation_executor_worker.py} +2 -4
  32. arpakitlib/_arpakit_project_template/src/operation_execution/{start_scheduled_operation_creator_worker.py → _start_scheduled_operation_creator_worker.py} +2 -4
  33. arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py +12 -8
  34. arpakitlib/_arpakit_project_template/src/operation_execution/util.py +1 -0
  35. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py +2 -0
  36. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py +2 -0
  37. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py +2 -0
  38. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py +2 -0
  39. arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py +2 -0
  40. arpakitlib/ar_class_util.py +17 -0
  41. arpakitlib/ar_enumeration_util.py +19 -1
  42. arpakitlib/ar_operation_execution_util.py +1 -0
  43. arpakitlib/ar_settings_util.py +2 -2
  44. arpakitlib/ar_sqladmin_util.py +101 -0
  45. arpakitlib/ar_type_util.py +15 -0
  46. {arpakitlib-1.7.132.dist-info → arpakitlib-1.7.207.dist-info}/METADATA +1 -1
  47. {arpakitlib-1.7.132.dist-info → arpakitlib-1.7.207.dist-info}/RECORD +51 -52
  48. arpakitlib/_arpakit_project_template/NOTICE +0 -16
  49. arpakitlib/_arpakit_project_template/manage/poetry_generate_requirements.txt.sh +0 -1
  50. arpakitlib-1.7.132.dist-info/NOTICE +0 -16
  51. /arpakitlib/{api_key_util.py → ar_api_key_util.py} +0 -0
  52. {arpakitlib-1.7.132.dist-info → arpakitlib-1.7.207.dist-info}/LICENSE +0 -0
  53. {arpakitlib-1.7.132.dist-info → arpakitlib-1.7.207.dist-info}/WHEEL +0 -0
  54. {arpakitlib-1.7.132.dist-info → arpakitlib-1.7.207.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 __command():
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 __command():
14
14
 
15
15
 
16
16
  if __name__ == '__main__':
17
- __command()
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 __command():
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 __command():
14
14
 
15
15
 
16
16
  if __name__ == '__main__':
17
- __command()
17
+ _start_api_for_dev_without_reload()
@@ -35,10 +35,7 @@ class StartupAPIEvent(BaseStartupAPIEvent):
35
35
  worker=OperationExecutorWorker(
36
36
  sqlalchemy_db=self.transmitted_api_data.sqlalchemy_db,
37
37
  operation_executor=OperationExecutor(sqlalchemy_db=self.transmitted_api_data.sqlalchemy_db),
38
- filter_operation_types=None,
39
- startup_funcs=[
40
- self.transmitted_api_data.sqlalchemy_db.init
41
- ]
38
+ filter_operation_types=None
42
39
  ),
43
40
  mode=SafeRunInBackgroundModes.thread
44
41
  )
@@ -48,10 +45,7 @@ class StartupAPIEvent(BaseStartupAPIEvent):
48
45
  _ = safe_run_worker_in_background(
49
46
  worker=ScheduledOperationCreatorWorker(
50
47
  sqlalchemy_db=self.transmitted_api_data.sqlalchemy_db,
51
- scheduled_operations=SCHEDULED_OPERATIONS,
52
- startup_funcs=[
53
- self.transmitted_api_data.sqlalchemy_db.init
54
- ]
48
+ scheduled_operations=SCHEDULED_OPERATIONS
55
49
  ),
56
50
  mode=SafeRunInBackgroundModes.async_task
57
51
  )
@@ -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
+ # ...
@@ -1,5 +1,7 @@
1
1
  import logging
2
2
 
3
+ from src.core.util import setup_logging
4
+
3
5
  _logger = logging.getLogger(__name__)
4
6
 
5
7
 
@@ -9,4 +11,5 @@ def hello_world() -> str:
9
11
 
10
12
 
11
13
  if __name__ == '__main__':
12
- print(hello_world())
14
+ setup_logging()
15
+ hello_world()
@@ -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()
@@ -1,12 +1,10 @@
1
1
  from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str
2
2
  from src.core.settings import get_cached_settings
3
- from src.core.util import setup_logging
4
3
 
5
4
 
6
- def command():
7
- setup_logging()
5
+ def _check_settings():
8
6
  print(safely_transfer_obj_to_json_str(get_cached_settings().model_dump(mode="json")))
9
7
 
10
8
 
11
9
  if __name__ == '__main__':
12
- command()
10
+ _check_settings()
@@ -3,14 +3,12 @@ import os.path
3
3
  from arpakitlib.ar_json_util import safely_transfer_obj_to_json_str
4
4
  from src.core.const import ProjectPaths
5
5
  from src.core.settings import Settings, get_cached_settings
6
- from src.core.util import setup_logging
7
6
 
8
7
 
9
- def command():
10
- setup_logging()
8
+ def _generate_settings_env_example():
11
9
  print(safely_transfer_obj_to_json_str(get_cached_settings().model_dump(mode="json")))
12
10
  Settings.save_env_example_to_file(filepath=os.path.join(ProjectPaths.base_dirpath, "example.env"))
13
11
 
14
12
 
15
13
  if __name__ == '__main__':
16
- command()
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():
@@ -1,4 +1,3 @@
1
- import asyncio
2
1
  import os
3
2
  from functools import lru_cache
4
3
  from typing import Any
@@ -13,11 +12,22 @@ from src.core.const import ProjectPaths
13
12
  class Settings(SimpleSettings):
14
13
  project_name: str = "{{PROJECT_NAME}}"
15
14
 
15
+ sql_db_user: str | None = project_name
16
+
17
+ sql_db_password: str | None = project_name
18
+
16
19
  sql_db_port: int | None = int("{{SQL_DB_PORT}}") if "{{SQL_DB_PORT}}".strip().isdigit() else None
17
20
 
21
+ sql_db_database: str | None = project_name
22
+
18
23
  sql_db_url: str | None = (
19
- f"postgresql://{{PROJECT_NAME}}:{{PROJECT_NAME}}@127.0.0.1:{sql_db_port}/{{PROJECT_NAME}}"
20
- ) if sql_db_port is not None else None
24
+ f"postgresql://{sql_db_user}:{sql_db_password}@127.0.0.1:{sql_db_port}/{sql_db_database}"
25
+ ) if (
26
+ sql_db_user is not None
27
+ and sql_db_password is not None
28
+ and sql_db_port is not None
29
+ and sql_db_database is not None
30
+ ) else None
21
31
 
22
32
  sql_db_echo: bool = False
23
33
 
@@ -79,14 +89,5 @@ def get_cached_settings() -> Settings:
79
89
  return Settings()
80
90
 
81
91
 
82
- def __example():
83
- print(safely_transfer_obj_to_json_str(get_cached_settings().model_dump(mode="json")))
84
-
85
-
86
- async def __async_example():
87
- pass
88
-
89
-
90
92
  if __name__ == '__main__':
91
- __example()
92
- asyncio.run(__async_example())
93
+ print(safely_transfer_obj_to_json_str(get_cached_settings().model_dump(mode="json")))
@@ -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 command():
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
- command()
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
+ # ...
@@ -1,13 +1,11 @@
1
1
  from arpakitlib.ar_operation_execution_util import OperationExecutorWorker
2
- from src.core.settings import get_cached_settings
3
2
  from src.core.util import setup_logging
4
3
  from src.db.util import get_cached_sqlalchemy_db
5
4
  from src.operation_execution.operation_executor import OperationExecutor
6
5
 
7
6
 
8
- def start_operation_executor_worker():
7
+ def _start_operation_executor_worker():
9
8
  setup_logging()
10
- get_cached_settings().raise_if_mode_type_prod()
11
9
  worker = OperationExecutorWorker(
12
10
  sqlalchemy_db=get_cached_sqlalchemy_db(),
13
11
  operation_executor=OperationExecutor(sqlalchemy_db=get_cached_sqlalchemy_db())
@@ -16,4 +14,4 @@ def start_operation_executor_worker():
16
14
 
17
15
 
18
16
  if __name__ == '__main__':
19
- start_operation_executor_worker()
17
+ _start_operation_executor_worker()
@@ -1,13 +1,11 @@
1
1
  from arpakitlib.ar_operation_execution_util import ScheduledOperationCreatorWorker
2
- from src.core.settings import get_cached_settings
3
2
  from src.core.util import setup_logging
4
3
  from src.db.util import get_cached_sqlalchemy_db
5
4
  from src.operation_execution.scheduled_operations import SCHEDULED_OPERATIONS
6
5
 
7
6
 
8
- def start_scheduled_operation_creator_worker():
7
+ def _start_scheduled_operation_creator_worker():
9
8
  setup_logging()
10
- get_cached_settings().raise_if_mode_type_prod()
11
9
  worker = ScheduledOperationCreatorWorker(
12
10
  sqlalchemy_db=get_cached_sqlalchemy_db(),
13
11
  scheduled_operations=SCHEDULED_OPERATIONS
@@ -16,4 +14,4 @@ def start_scheduled_operation_creator_worker():
16
14
 
17
15
 
18
16
  if __name__ == '__main__':
19
- 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()
@@ -84,6 +84,19 @@ def raise_if_not_none(v: Any) -> Any:
84
84
  return v
85
85
 
86
86
 
87
+ def get_setted_elements_as_dict_from_dict(d: dict) -> dict[str, Any]:
88
+ raise_for_type(d, dict)
89
+ setted_ = {}
90
+ for k, v in d.items():
91
+ if is_set(v):
92
+ setted_[k] = v
93
+ return setted_
94
+
95
+
96
+ def get_setted_keys_from_dict(d: dict) -> list[Any]:
97
+ return list(get_setted_elements_as_dict_from_dict(d).keys())
98
+
99
+
87
100
  def __example():
88
101
  print("is_set:")
89
102
  print(is_set(v=NotSet)) # False
@@ -138,6 +151,8 @@ def __example():
138
151
  except TypeError as e:
139
152
  print(e)
140
153
 
154
+ print(get_setted_elements_as_dict_from_dict({"afs": "ASfa", "asfasf": NotSet}))
155
+
141
156
 
142
157
  if __name__ == '__main__':
143
158
  __example()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arpakitlib
3
- Version: 1.7.132
3
+ Version: 1.7.207
4
4
  Summary: arpakitlib
5
5
  License: Apache-2.0
6
6
  Keywords: arpakitlib,arpakit,arpakit-company,arpakitcompany,arpakit_company
@@ -3,7 +3,6 @@ arpakitlib/_arpakit_project_template/.gitignore,sha256=Q8n7q3-hKsnFVN5NcACPs71Z9
3
3
  arpakitlib/_arpakit_project_template/.python-version,sha256=XMd40XBnlTFfBSmMldd-7VdqXNyFCy6wtxhw5e1mnhc,7
4
4
  arpakitlib/_arpakit_project_template/ARPAKITLIB,sha256=3-iAkMXtesLzJXHw_IIv2k2M0oH8cTjHzW22Vvbi0IE,4
5
5
  arpakitlib/_arpakit_project_template/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
6
- arpakitlib/_arpakit_project_template/NOTICE,sha256=95aUzaPJjVpDsGAsNzVnq7tHTxAl0s5UFznCTkVCau4,763
7
6
  arpakitlib/_arpakit_project_template/README.md,sha256=AwqCtmMeywF2dJhZbKwCBA_wPnLF_VmoLGfPbFjH3bM,62
8
7
  arpakitlib/_arpakit_project_template/example.env,sha256=dJC2sjtywxm6ChP5jtIicGaaPvhI0NMNIhMmScg69b8,558
9
8
  arpakitlib/_arpakit_project_template/manage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -35,7 +34,6 @@ arpakitlib/_arpakit_project_template/manage/poetry_check.sh,sha256=mxkbFqw-mVlAk
35
34
  arpakitlib/_arpakit_project_template/manage/poetry_clear_cache.sh,sha256=5NmoMsA377JCeTMLERzE2GZywgi8mXQDTQ_yhIJtR8k,139
36
35
  arpakitlib/_arpakit_project_template/manage/poetry_config.sh,sha256=gIctNLSvRJmER_iU_HwPpHR83adZV12LoXcoWfY9M00,26
37
36
  arpakitlib/_arpakit_project_template/manage/poetry_config_virtualenvs_in_project_true.sh,sha256=CHAGXfmyztxgimUQ4MC4IwnLzd2uZ7Da1Xvem_lw60w,47
38
- arpakitlib/_arpakit_project_template/manage/poetry_generate_requirements.txt.sh,sha256=Df2ms0GlmAymMGqf9Bp2i3_DI61Ii1xYKf7S0By7tdw,76
39
37
  arpakitlib/_arpakit_project_template/manage/poetry_install.sh,sha256=oLSrFGHKIRWc-1VEiM9wPRUNPTjtYJ3hEKwbeCpCvlk,153
40
38
  arpakitlib/_arpakit_project_template/manage/poetry_lock.sh,sha256=9oiTdi8ynGQWctQjI3g4ThGkvpT07-g5ajLmG47iVh8,17
41
39
  arpakitlib/_arpakit_project_template/manage/poetry_remove_and_add_arpakitlib.sh,sha256=-DvxXI-oaAQxIZFtiCfNBhqpRgJcWWuxhoHb9Nou0a4,197
@@ -45,13 +43,13 @@ arpakitlib/_arpakit_project_template/manage/poetry_show_arpakitlib.sh,sha256=q2b
45
43
  arpakitlib/_arpakit_project_template/manage/poetry_update.sh,sha256=ZtoXIC4Qq7PMTDxQMwUxvkYC6lTc5LC23ILTywWbyoU,164
46
44
  arpakitlib/_arpakit_project_template/manage/poetry_update_arpakitlib.sh,sha256=hh7vj-yKgKqLfaGb8cjsJ_NTa7fBtE4s3yxzte4D8bw,163
47
45
  arpakitlib/_arpakit_project_template/manage/sandbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
49
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
50
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
51
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
52
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
53
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
54
- 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
55
53
  arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_8.sh,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
54
  arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_9.sh,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
55
  arpakitlib/_arpakit_project_template/resource/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -60,66 +58,66 @@ arpakitlib/_arpakit_project_template/resource/static/healthcheck,sha256=IIO7Wvjw
60
58
  arpakitlib/_arpakit_project_template/resource/static/helloworld,sha256=eH7Hbcr9IMGQjrCTahL5Ht0QWrXNfswrGuIDJkg0Xf8,11
61
59
  arpakitlib/_arpakit_project_template/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
60
  arpakitlib/_arpakit_project_template/src/additional_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- 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
64
62
  arpakitlib/_arpakit_project_template/src/admin1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
- 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
66
64
  arpakitlib/_arpakit_project_template/src/admin1/admin_auth.py,sha256=qEC7gMy9E6mwuQRxnSsmVthXahVai4zjiC6Z8O3MZn8,804
67
- 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
68
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
69
69
  arpakitlib/_arpakit_project_template/src/api/asgi.py,sha256=a5UBxOyNC8NG3E0ayhiDo3t5tPoB3WtOf2gbZJFWBAA,74
70
70
  arpakitlib/_arpakit_project_template/src/api/auth.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
71
71
  arpakitlib/_arpakit_project_template/src/api/const.py,sha256=7d4qD5hedqr7QxVzbfsA7E1bNZn2Pm2U8joXGtpANu0,287
72
72
  arpakitlib/_arpakit_project_template/src/api/create_api_app.py,sha256=5NJ50NqReuCTs-CH4_C_lcgpqKR9XuBONJOl2IRqOQI,2769
73
- arpakitlib/_arpakit_project_template/src/api/event.py,sha256=z3lNppog2x4a7phr4HmTQVWLt_LPI-357WeijbEeQRQ,3255
73
+ arpakitlib/_arpakit_project_template/src/api/event.py,sha256=Jd1eWUpPzGSg-wBIsCh1SNywemykQuXrf_6IlsoSO5w,2999
74
74
  arpakitlib/_arpakit_project_template/src/api/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
75
  arpakitlib/_arpakit_project_template/src/api/router/main_router.py,sha256=Yv699WCJDcdiJMXFg1kPTvolqj-NAGoXfqe-vzbMzIU,228
76
76
  arpakitlib/_arpakit_project_template/src/api/router/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py,sha256=lz2yH5IjzKvkdAqOErnT4E4DCTwmE1Ru0h_7dc_ZNn4,844
78
- 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
79
79
  arpakitlib/_arpakit_project_template/src/api/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  arpakitlib/_arpakit_project_template/src/api/schema/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py,sha256=odc-UyxBwUPh4t0H6qIuzAsBA_Qrm3H2qP-YBgJpaKc,164
83
- arpakitlib/_arpakit_project_template/src/api/start_api_for_dev_with_reload.py,sha256=H5J9k4j-pBiGlMHXYEYJQeQcanEpIBhv4r4SfiW3pSk,291
84
- arpakitlib/_arpakit_project_template/src/api/start_api_for_dev_without_reload.py,sha256=n30lbivzh1EJ8p8LY4YYlreQ14gfHWkU2zNxiwQ6ej4,292
85
- 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
86
84
  arpakitlib/_arpakit_project_template/src/api/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
85
  arpakitlib/_arpakit_project_template/src/business_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
- arpakitlib/_arpakit_project_template/src/business_service/hello_world.py,sha256=pDCPv_1qC4yo3dKYt2kdz3GsiR53XDmYi1r7zzzj8co,193
86
+ arpakitlib/_arpakit_project_template/src/business_service/hello_world.py,sha256=mEVxsTFsd5u_T88l4mtCfoPre9QixAmQvzQmM2J8Okc,247
89
87
  arpakitlib/_arpakit_project_template/src/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
- arpakitlib/_arpakit_project_template/src/core/check_logging.py,sha256=TXAG-v7rH3uSSyCgraEX-3gbDs4J2MGGaBJb1P-xj18,227
91
- arpakitlib/_arpakit_project_template/src/core/check_settings.py,sha256=m0fTAAFET2n6iE_rrFrWEHgKuJOKbJfkNRpIGsE69qU,328
92
- arpakitlib/_arpakit_project_template/src/core/const.py,sha256=86zjRG3umtjQWYUMPKGaNwHnXM-WSOF-2l0A-Le51kI,1504
93
- arpakitlib/_arpakit_project_template/src/core/generate_settings_env_example.py,sha256=0EB_GTdwD0fk0Vl5pm3ZjH7Ot2u1lDmxA5btxvbcb4g,497
94
- arpakitlib/_arpakit_project_template/src/core/settings.py,sha256=PhxYn8WvGVVev5qXGJSxPuOstByVmcruviiN3llGN9U,2473
95
- arpakitlib/_arpakit_project_template/src/core/util.py,sha256=5R8gvcZdvuDQes45FBnLC2IDv2Jhajp1VhJJYNKYjMQ,1539
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
+ arpakitlib/_arpakit_project_template/src/core/settings.py,sha256=yKuakhs8fFOEX-9G3w-ACvm-Mqdu58GrK94zVjjTD6g,2635
93
+ arpakitlib/_arpakit_project_template/src/core/util.py,sha256=mcikqcjljZa2qhYeoR1tR9JUSprrVSod8XcIK_PqS6o,1547
96
94
  arpakitlib/_arpakit_project_template/src/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
- arpakitlib/_arpakit_project_template/src/db/check_conn_sqlalchemy_db.py,sha256=wv1N33nTGpsT9nk94OePlOSZ-O9UVKlMfRf8y5UeK1Y,213
98
- arpakitlib/_arpakit_project_template/src/db/const.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
- arpakitlib/_arpakit_project_template/src/db/init_sqlalchemy_db.py,sha256=gxCQT1bcJ-8Qos-zL8PnQ58i2GX_QkQnQSsSBKYR1f0,233
100
- 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
101
99
  arpakitlib/_arpakit_project_template/src/db/sqlalchemy_model.py,sha256=nXtayUkBaVb6tWx5qJgXZLbLOTVAjnSLpSDxBm7yZLc,234
102
- 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
103
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
104
104
  arpakitlib/_arpakit_project_template/src/operation_execution/const.py,sha256=HjupGEDUWVijQlbzxZPI9vBbAVOETUYzYU9pdnc9IcI,176
105
105
  arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py,sha256=TuAlF3QPJq-Zsq693NHQ00dvCWAzuwce2q6ozesWFYY,725
106
- arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py,sha256=N6erGXOf_Qm3soPzuraMoc1jLXA6M1KfNsp0l4aAWBM,973
107
- arpakitlib/_arpakit_project_template/src/operation_execution/start_operation_executor_worker.py,sha256=QEGIuzSf6z_xDgGNzB6cMvqKhksuyOxZDjAOR56m05Y,675
108
- arpakitlib/_arpakit_project_template/src/operation_execution/start_scheduled_operation_creator_worker.py,sha256=GW1G8pi6yV_zODbqOs8VtEEM2e0iADFV6RXIxdPPPDY,677
109
- 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
110
108
  arpakitlib/_arpakit_project_template/src/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py,sha256=3WVPgRsNCIxWpA-6t_Phe-nFULdHPhS1S_DO11XRmqk,80
112
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py,sha256=MVDc71sj5I1muWin50GwrSxMwYtOOSDOtRmeFErHcXs,80
113
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py,sha256=89Rg0wubztpCNHBOWkhjZz3nB8Teilrl9xHlJvDWw9o,80
114
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py,sha256=BlVvIhSFclBMQMHftETS57bRaFpkOdKPrZyxMbYJuDY,80
115
- 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
116
114
  arpakitlib/_arpakit_project_template/src/tg_bot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
115
  arpakitlib/_arpakit_project_template/src/tg_bot/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
116
  arpakitlib/_arpakit_project_template/src/tg_bot/start_tg_bot.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
117
  arpakitlib/_arpakit_project_template/src/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
- arpakitlib/api_key_util.py,sha256=E84JlJXiDHtxLQmV8BNHvqNKu_G8-Dox0XxknYJQ37Q,422
121
118
  arpakitlib/ar_additional_model_util.py,sha256=GFg-glLCxH9X95R2bhTJsscVwv37FgE1qbaAAyXrnIE,917
122
119
  arpakitlib/ar_aiogram_util.py,sha256=5JPCDZpdBGTE-EIWPRez9amCZAX7XemFIVu5YrQK7Pw,12264
120
+ arpakitlib/ar_api_key_util.py,sha256=E84JlJXiDHtxLQmV8BNHvqNKu_G8-Dox0XxknYJQ37Q,422
123
121
  arpakitlib/ar_arpakit_lib_module_util.py,sha256=UEPU8wk29R_bBP_RENnhXYzNbj_RF9FWjowrj_yxWLA,5931
124
122
  arpakitlib/ar_arpakit_project_template_util.py,sha256=c7yc8w2IvZGH5hH8eOpL7JuD005hUxZ0GVDcSkJF5iI,3705
125
123
  arpakitlib/ar_arpakit_schedule_uust_api_client_util.py,sha256=jGbP6egs2yhgfheyqhM0J-SeM2qp2YrW7dV-u9djv4Q,19223
@@ -127,11 +125,12 @@ arpakitlib/ar_arpakitlib_cli_util.py,sha256=8lhEDxnwMSRX2PGV2xQtQru1AYKSA92SVolo
127
125
  arpakitlib/ar_base64_util.py,sha256=aZkg2cZTuAaP2IWeG_LXJ6RO7qhyskVwec-Lks0iM-k,676
128
126
  arpakitlib/ar_base_worker_util.py,sha256=Qm_C7PFH5W-LPu1AGX1zp29zbqZ04i71Su1U-eeQBkA,5674
129
127
  arpakitlib/ar_cache_file_util.py,sha256=Fo2pH-Zqm966KWFBHG_pbiySGZvhIFCYqy7k1weRfJ0,3476
128
+ arpakitlib/ar_class_util.py,sha256=Eb4orGm2EFSaHfmrY2A_Nis5iwFMDKFaz1_nxTnfmnQ,487
130
129
  arpakitlib/ar_datetime_util.py,sha256=Xe1NiT9oPQzNSG7RVRkhukhbg4i-hhS5ImmV7sPUc8o,971
131
130
  arpakitlib/ar_dict_util.py,sha256=cF5LQJ6tLqyGoEXfDljMDZrikeZoWPw7CgINHIFGvXM,419
132
131
  arpakitlib/ar_dream_ai_api_client_util.py,sha256=QF9XK7xK5ny1fvkcG4e0pfCySNNFRNPy0x0cmxfsAak,2818
133
132
  arpakitlib/ar_encrypt_decrypt_util.py,sha256=GhWnp7HHkbhwFVVCzO1H07m-5gryr4yjWsXjOaNQm1Y,520
134
- arpakitlib/ar_enumeration_util.py,sha256=1dQUEVgJRp0nCO-IrCKv5GTK0QkSzM44M1lOWkmPk3w,2532
133
+ arpakitlib/ar_enumeration_util.py,sha256=ZOkH1-duDcjQelJrdJ-nJ8h7wePFAgmpg_8e63Cyp0E,3072
135
134
  arpakitlib/ar_exception_util.py,sha256=3hZKsj34TZVdmd4JAQz7w515smWqB8o3gTwAEjuMdnI,408
136
135
  arpakitlib/ar_fastapi_static/healthcheck,sha256=IIO7Wvjwlr2-LPSQ7Y8O35hcI6t0_s8zqITDxkYCO8I,11
137
136
  arpakitlib/ar_fastapi_static/redoc/redoc.standalone.js,sha256=WCuodUNv1qVh0oW5fjnJDwb5AwOue73jKHdI9z8iGKU,909365
@@ -169,23 +168,23 @@ arpakitlib/ar_logging_util.py,sha256=mx3H6CzX9dsh29ruFmYnva8lL6mwvdBXmeHH9E2tvu8
169
168
  arpakitlib/ar_mongodb_util.py,sha256=2ECkTnGAZ92qxioL-fmN6R4yZOSr3bXdXLWTzT1C3vk,4038
170
169
  arpakitlib/ar_need_type_util.py,sha256=GETiREPMEYhch-yU6T--Bdawlbb04Jp1Qy7cOsUlIeA,2228
171
170
  arpakitlib/ar_openai_api_client_util.py,sha256=_XmlApvHFMSyjvZydPa_kASIt9LsFrZmSC7YEzIG8Bg,1806
172
- arpakitlib/ar_operation_execution_util.py,sha256=Mu8U6h6WnPPmiNsByT788jroUNQxKHUK4UUTiRpRYYQ,17523
171
+ arpakitlib/ar_operation_execution_util.py,sha256=uWLDJWYbfsYItUQ48qOSWy4qxCTCFMjElWEXswKtaWk,17617
173
172
  arpakitlib/ar_parse_command.py,sha256=-s61xcATIsfw1eV_iD3xi-grsitbGzSDoAFc5V0OFy4,3447
174
173
  arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
175
174
  arpakitlib/ar_run_cmd_util.py,sha256=D_rPavKMmWkQtwvZFz-Io5Ak8eSODHkcFeLPzNVC68g,1072
176
175
  arpakitlib/ar_schedule_uust_api_client_util.py,sha256=0Ns0mMEXYEkVmP6YTAXHyNcrhNsvCJ8X-G_5XwILhJ4,6855
177
- arpakitlib/ar_settings_util.py,sha256=WPlMp4mJdXds2PzmU4-w_poW2hzXlhoTukxKvHXA368,1866
176
+ arpakitlib/ar_settings_util.py,sha256=752EDXXnrA1uUbSD4InCHCZWEodLBwVUHrgOdOD2Xhw,1856
178
177
  arpakitlib/ar_sleep_util.py,sha256=OaLtRaJQWMkGjfj_mW1RB2P4RaSWsAIH8LUoXqsH0zM,1061
178
+ arpakitlib/ar_sqladmin_util.py,sha256=vQTRlf36VjW6l_zslZmjkHinMVuQfI-QZsXIlnXUpgE,2634
179
179
  arpakitlib/ar_sqlalchemy_model_util.py,sha256=nKJGN32eg3Gn5kmJwHdVJznPT5TydLsfUfwJGdypdUo,6264
180
180
  arpakitlib/ar_sqlalchemy_util.py,sha256=Hcg1THrDsSR_-8dsY1CG3NWPEv0FqCbkPXFXLtjlSJ0,4207
181
181
  arpakitlib/ar_ssh_runner_util.py,sha256=e9deuUdBW7Eh0Exx2nTBhk57SaOZYaJaSjNk8q6dbJk,6804
182
182
  arpakitlib/ar_str_util.py,sha256=yU5gOwNXUQaH5b_tM5t6fXUn9oUcv5EQbVnq2wXXIpQ,3378
183
- arpakitlib/ar_type_util.py,sha256=BJ5FcS5Vkj9KFNJgoh0qGLazy-wCubqhND3vle0yOTo,3717
183
+ arpakitlib/ar_type_util.py,sha256=9C3ErtUVs0tAUqtK-foFzjJOykfBOntfCz2IogDOgfA,4134
184
184
  arpakitlib/ar_yookassa_api_client_util.py,sha256=sh4fcUkAkdOetFn9JYoTvjcSXP-M1wU04KEY-ECLfLg,5137
185
185
  arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
186
- arpakitlib-1.7.132.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
187
- arpakitlib-1.7.132.dist-info/METADATA,sha256=qKf8wSqyOS6U97rQD6uCnkS6yLkpEasuL7Ub8-cWsEM,3176
188
- arpakitlib-1.7.132.dist-info/NOTICE,sha256=95aUzaPJjVpDsGAsNzVnq7tHTxAl0s5UFznCTkVCau4,763
189
- arpakitlib-1.7.132.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
190
- arpakitlib-1.7.132.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
191
- arpakitlib-1.7.132.dist-info/RECORD,,
186
+ arpakitlib-1.7.207.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
187
+ arpakitlib-1.7.207.dist-info/METADATA,sha256=xHtqDWfe_1LGr338oSBni_My5SAZqUiCidQLX4nkuMY,3176
188
+ arpakitlib-1.7.207.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
189
+ arpakitlib-1.7.207.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
190
+ arpakitlib-1.7.207.dist-info/RECORD,,
@@ -1,16 +0,0 @@
1
- Copyright 2024-present Sabirzyanov Arsen
2
-
3
- This project includes software developed by Sabirzyanov Arsen.
4
-
5
- This project is licensed under the Apache License, Version 2.0 (the "License");
6
- you may not use this file except in compliance with the License.
7
- You may obtain a copy of the License at
8
-
9
- ./LICENSE
10
-
11
- Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and limitations under the License.
14
-
15
- Additional notices:
16
- - This project may include third-party components that are subject to other licenses. See the LICENSE file for more information.
@@ -1 +0,0 @@
1
- poetry export -f requirements.txt --without-hashes --output requirements.txt
@@ -1,16 +0,0 @@
1
- Copyright 2024-present Sabirzyanov Arsen
2
-
3
- This project includes software developed by Sabirzyanov Arsen.
4
-
5
- This project is licensed under the Apache License, Version 2.0 (the "License");
6
- you may not use this file except in compliance with the License.
7
- You may obtain a copy of the License at
8
-
9
- ./LICENSE
10
-
11
- Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and limitations under the License.
14
-
15
- Additional notices:
16
- - This project may include third-party components that are subject to other licenses. See the LICENSE file for more information.
File without changes