arpakitlib 1.7.136__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.
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py +4 -4
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py +4 -4
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py +4 -4
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py +4 -4
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py +4 -4
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py +4 -4
- arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_7.py +4 -4
- arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py +2 -0
- arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py +8 -2
- arpakitlib/_arpakit_project_template/src/admin1/model_view.py +0 -18
- arpakitlib/_arpakit_project_template/src/api/{start_api_with_reload.py → _start_api_with_reload.py} +2 -2
- arpakitlib/_arpakit_project_template/src/api/{start_api_without_reload.py → _start_api_without_reload.py} +2 -2
- arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py +1 -0
- arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py +4 -0
- arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py +1 -0
- arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py +2 -0
- arpakitlib/_arpakit_project_template/src/api/transmitted_api_data.py +2 -0
- arpakitlib/_arpakit_project_template/src/core/{check_logging.py → _check_logging.py} +2 -2
- arpakitlib/_arpakit_project_template/src/core/{check_settings.py → _check_settings.py} +2 -2
- arpakitlib/_arpakit_project_template/src/core/{generate_settings_env_example.py → _generate_settings_env_example.py} +2 -2
- arpakitlib/_arpakit_project_template/src/core/const.py +5 -11
- arpakitlib/_arpakit_project_template/src/core/util.py +3 -0
- arpakitlib/_arpakit_project_template/src/db/{check_conn_sqlalchemy_db.py → _check_conn_sqlalchemy_db.py} +2 -2
- arpakitlib/_arpakit_project_template/src/db/{init_sqlalchemy_db.py → _init_sqlalchemy_db.py} +2 -2
- arpakitlib/_arpakit_project_template/src/db/{reinit_sqlalchemy_db.py → _reinit_sqlalchemy_db.py} +3 -3
- arpakitlib/_arpakit_project_template/src/db/const.py +1 -0
- arpakitlib/_arpakit_project_template/src/db/util.py +2 -0
- arpakitlib/_arpakit_project_template/src/operation_execution/{start_operation_executor_worker.py → _start_operation_executor_worker.py} +2 -2
- arpakitlib/_arpakit_project_template/src/operation_execution/{start_scheduled_operation_creator_worker.py → _start_scheduled_operation_creator_worker.py} +2 -2
- arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py +12 -8
- arpakitlib/_arpakit_project_template/src/operation_execution/util.py +1 -0
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py +2 -0
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py +2 -0
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py +2 -0
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py +2 -0
- arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py +2 -0
- arpakitlib/ar_class_util.py +17 -0
- arpakitlib/ar_enumeration_util.py +19 -1
- arpakitlib/ar_operation_execution_util.py +1 -0
- arpakitlib/ar_settings_util.py +2 -2
- arpakitlib/ar_sqladmin_util.py +101 -0
- {arpakitlib-1.7.136.dist-info → arpakitlib-1.7.206.dist-info}/METADATA +1 -1
- {arpakitlib-1.7.136.dist-info → arpakitlib-1.7.206.dist-info}/RECORD +47 -47
- arpakitlib/_arpakit_project_template/NOTICE +0 -16
- arpakitlib-1.7.136.dist-info/NOTICE +0 -16
- /arpakitlib/{api_key_util.py → ar_api_key_util.py} +0 -0
- {arpakitlib-1.7.136.dist-info → arpakitlib-1.7.206.dist-info}/LICENSE +0 -0
- {arpakitlib-1.7.136.dist-info → arpakitlib-1.7.206.dist-info}/WHEEL +0 -0
- {arpakitlib-1.7.136.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  | 
| 4 | 
            +
            def _sandbox():
         | 
| 5 5 | 
             
                pass
         | 
| 6 6 |  | 
| 7 7 |  | 
| 8 | 
            -
            async def  | 
| 8 | 
            +
            async def _async_sandbox():
         | 
| 9 9 | 
             
                pass
         | 
| 10 10 |  | 
| 11 11 |  | 
| 12 12 | 
             
            if __name__ == '__main__':
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                asyncio.run( | 
| 13 | 
            +
                _sandbox()
         | 
| 14 | 
            +
                asyncio.run(_async_sandbox())
         | 
| @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            import asyncio
         | 
| 2 2 |  | 
| 3 3 |  | 
| 4 | 
            -
            def  | 
| 4 | 
            +
            def _sandbox():
         | 
| 5 5 | 
             
                pass
         | 
| 6 6 |  | 
| 7 7 |  | 
| 8 | 
            -
            async def  | 
| 8 | 
            +
            async def _async_sandbox():
         | 
| 9 9 | 
             
                pass
         | 
| 10 10 |  | 
| 11 11 |  | 
| 12 12 | 
             
            if __name__ == '__main__':
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                asyncio.run( | 
| 13 | 
            +
                _sandbox()
         | 
| 14 | 
            +
                asyncio.run(_async_sandbox())
         | 
| @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            import asyncio
         | 
| 2 2 |  | 
| 3 3 |  | 
| 4 | 
            -
            def  | 
| 4 | 
            +
            def _sandbox():
         | 
| 5 5 | 
             
                pass
         | 
| 6 6 |  | 
| 7 7 |  | 
| 8 | 
            -
            async def  | 
| 8 | 
            +
            async def _async_sandbox():
         | 
| 9 9 | 
             
                pass
         | 
| 10 10 |  | 
| 11 11 |  | 
| 12 12 | 
             
            if __name__ == '__main__':
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                asyncio.run( | 
| 13 | 
            +
                _sandbox()
         | 
| 14 | 
            +
                asyncio.run(_async_sandbox())
         | 
| @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            import asyncio
         | 
| 2 2 |  | 
| 3 3 |  | 
| 4 | 
            -
            def  | 
| 4 | 
            +
            def _sandbox():
         | 
| 5 5 | 
             
                pass
         | 
| 6 6 |  | 
| 7 7 |  | 
| 8 | 
            -
            async def  | 
| 8 | 
            +
            async def _async_sandbox():
         | 
| 9 9 | 
             
                pass
         | 
| 10 10 |  | 
| 11 11 |  | 
| 12 12 | 
             
            if __name__ == '__main__':
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                asyncio.run( | 
| 13 | 
            +
                _sandbox()
         | 
| 14 | 
            +
                asyncio.run(_async_sandbox())
         | 
| @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            import asyncio
         | 
| 2 2 |  | 
| 3 3 |  | 
| 4 | 
            -
            def  | 
| 4 | 
            +
            def _sandbox():
         | 
| 5 5 | 
             
                pass
         | 
| 6 6 |  | 
| 7 7 |  | 
| 8 | 
            -
            async def  | 
| 8 | 
            +
            async def _async_sandbox():
         | 
| 9 9 | 
             
                pass
         | 
| 10 10 |  | 
| 11 11 |  | 
| 12 12 | 
             
            if __name__ == '__main__':
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                asyncio.run( | 
| 13 | 
            +
                _sandbox()
         | 
| 14 | 
            +
                asyncio.run(_async_sandbox())
         | 
| @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            import asyncio
         | 
| 2 2 |  | 
| 3 3 |  | 
| 4 | 
            -
            def  | 
| 4 | 
            +
            def _sandbox():
         | 
| 5 5 | 
             
                pass
         | 
| 6 6 |  | 
| 7 7 |  | 
| 8 | 
            -
            async def  | 
| 8 | 
            +
            async def _async_sandbox():
         | 
| 9 9 | 
             
                pass
         | 
| 10 10 |  | 
| 11 11 |  | 
| 12 12 | 
             
            if __name__ == '__main__':
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                asyncio.run( | 
| 13 | 
            +
                _sandbox()
         | 
| 14 | 
            +
                asyncio.run(_async_sandbox())
         | 
| @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            import asyncio
         | 
| 2 2 |  | 
| 3 3 |  | 
| 4 | 
            -
            def  | 
| 4 | 
            +
            def _sandbox():
         | 
| 5 5 | 
             
                pass
         | 
| 6 6 |  | 
| 7 7 |  | 
| 8 | 
            -
            async def  | 
| 8 | 
            +
            async def _async_sandbox():
         | 
| 9 9 | 
             
                pass
         | 
| 10 10 |  | 
| 11 11 |  | 
| 12 12 | 
             
            if __name__ == '__main__':
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                asyncio.run( | 
| 13 | 
            +
                _sandbox()
         | 
| 14 | 
            +
                asyncio.run(_async_sandbox())
         | 
| @@ -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 | 
            -
                 | 
| 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 | 
             
            # ...
         | 
    
        arpakitlib/_arpakit_project_template/src/api/{start_api_with_reload.py → _start_api_with_reload.py}
    RENAMED
    
    | @@ -3,7 +3,7 @@ import uvicorn | |
| 3 3 | 
             
            from src.core.settings import get_cached_settings
         | 
| 4 4 |  | 
| 5 5 |  | 
| 6 | 
            -
            def  | 
| 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 | 
            -
                 | 
| 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  | 
| 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 | 
            -
                 | 
| 17 | 
            +
                _start_api_for_dev_without_reload()
         | 
| @@ -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 | 
            +
            # ...
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            # ...
         | 
| @@ -5,10 +5,10 @@ from src.core.util import setup_logging | |
| 5 5 | 
             
            _logger = logging.getLogger(__name__)
         | 
| 6 6 |  | 
| 7 7 |  | 
| 8 | 
            -
            def  | 
| 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 | 
            -
                 | 
| 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  | 
| 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 | 
            -
                 | 
| 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  | 
| 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 | 
            -
                 | 
| 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( | 
| 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():
         | 
| @@ -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  | 
| 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 | 
            -
                 | 
| 11 | 
            +
                _check_conn_sqlalchemy_db()
         | 
    
        arpakitlib/_arpakit_project_template/src/db/{init_sqlalchemy_db.py → _init_sqlalchemy_db.py}
    RENAMED
    
    | @@ -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  | 
| 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 | 
            -
                 | 
| 11 | 
            +
                _init_sqlalchemy_db()
         | 
    
        arpakitlib/_arpakit_project_template/src/db/{reinit_sqlalchemy_db.py → _reinit_sqlalchemy_db.py}
    RENAMED
    
    | @@ -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  | 
| 6 | 
            +
            def _reinit_sqlalchemy_db():
         | 
| 7 7 | 
             
                setup_logging()
         | 
| 8 | 
            -
                get_cached_settings(). | 
| 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 | 
            -
                 | 
| 13 | 
            +
                _reinit_sqlalchemy_db()
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            # ...
         | 
| @@ -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  | 
| 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 | 
            -
                 | 
| 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  | 
| 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 | 
            -
                 | 
| 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 | 
            -
             | 
| 10 | 
            -
                 | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
            )
         | 
| 14 | 
            -
             | 
| 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= | 
| 21 | 
            -
                    to_time=time(hour= | 
| 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 | 
            +
            # ...
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            # ...
         | 
| @@ -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:
         | 
    
        arpakitlib/ar_settings_util.py
    CHANGED
    
    | @@ -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 ==  | 
| 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 ==  | 
| 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()
         | 
| @@ -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
         | 
| @@ -44,13 +43,13 @@ arpakitlib/_arpakit_project_template/manage/poetry_show_arpakitlib.sh,sha256=q2b | |
| 44 43 | 
             
            arpakitlib/_arpakit_project_template/manage/poetry_update.sh,sha256=ZtoXIC4Qq7PMTDxQMwUxvkYC6lTc5LC23ILTywWbyoU,164
         | 
| 45 44 | 
             
            arpakitlib/_arpakit_project_template/manage/poetry_update_arpakitlib.sh,sha256=hh7vj-yKgKqLfaGb8cjsJ_NTa7fBtE4s3yxzte4D8bw,163
         | 
| 46 45 | 
             
            arpakitlib/_arpakit_project_template/manage/sandbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 47 | 
            -
            arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_1.py,sha256= | 
| 48 | 
            -
            arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_2.py,sha256= | 
| 49 | 
            -
            arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_3.py,sha256= | 
| 50 | 
            -
            arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_4.py,sha256= | 
| 51 | 
            -
            arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_5.py,sha256= | 
| 52 | 
            -
            arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_6.py,sha256= | 
| 53 | 
            -
            arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_7.py,sha256= | 
| 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
         | 
| 54 53 | 
             
            arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_8.sh,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 55 54 | 
             
            arpakitlib/_arpakit_project_template/manage/sandbox/sandbox_9.sh,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 56 55 | 
             
            arpakitlib/_arpakit_project_template/resource/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| @@ -59,12 +58,14 @@ arpakitlib/_arpakit_project_template/resource/static/healthcheck,sha256=IIO7Wvjw | |
| 59 58 | 
             
            arpakitlib/_arpakit_project_template/resource/static/helloworld,sha256=eH7Hbcr9IMGQjrCTahL5Ht0QWrXNfswrGuIDJkg0Xf8,11
         | 
| 60 59 | 
             
            arpakitlib/_arpakit_project_template/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 61 60 | 
             
            arpakitlib/_arpakit_project_template/src/additional_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 62 | 
            -
            arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py,sha256= | 
| 61 | 
            +
            arpakitlib/_arpakit_project_template/src/additional_model/additional_model.py,sha256=rCjK4hbog2kF-37SGHet0mrSjGXrAi1LxCgLT1IzzW8,141
         | 
| 63 62 | 
             
            arpakitlib/_arpakit_project_template/src/admin1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 64 | 
            -
            arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py,sha256= | 
| 63 | 
            +
            arpakitlib/_arpakit_project_template/src/admin1/add_admin_in_app.py,sha256=7zF-9Xa15bAbzqRQD18hAbzUQTflASoTjVProcdGWTM,922
         | 
| 65 64 | 
             
            arpakitlib/_arpakit_project_template/src/admin1/admin_auth.py,sha256=qEC7gMy9E6mwuQRxnSsmVthXahVai4zjiC6Z8O3MZn8,804
         | 
| 66 | 
            -
            arpakitlib/_arpakit_project_template/src/admin1/model_view.py,sha256= | 
| 65 | 
            +
            arpakitlib/_arpakit_project_template/src/admin1/model_view.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
         | 
| 67 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
         | 
| 68 69 | 
             
            arpakitlib/_arpakit_project_template/src/api/asgi.py,sha256=a5UBxOyNC8NG3E0ayhiDo3t5tPoB3WtOf2gbZJFWBAA,74
         | 
| 69 70 | 
             
            arpakitlib/_arpakit_project_template/src/api/auth.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
         | 
| 70 71 | 
             
            arpakitlib/_arpakit_project_template/src/api/const.py,sha256=7d4qD5hedqr7QxVzbfsA7E1bNZn2Pm2U8joXGtpANu0,287
         | 
| @@ -73,52 +74,50 @@ arpakitlib/_arpakit_project_template/src/api/event.py,sha256=Jd1eWUpPzGSg-wBIsCh | |
| 73 74 | 
             
            arpakitlib/_arpakit_project_template/src/api/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 74 75 | 
             
            arpakitlib/_arpakit_project_template/src/api/router/main_router.py,sha256=Yv699WCJDcdiJMXFg1kPTvolqj-NAGoXfqe-vzbMzIU,228
         | 
| 75 76 | 
             
            arpakitlib/_arpakit_project_template/src/api/router/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 76 | 
            -
            arpakitlib/_arpakit_project_template/src/api/router/v1/get_api_error_info.py,sha256= | 
| 77 | 
            -
            arpakitlib/_arpakit_project_template/src/api/router/v1/main_router.py,sha256= | 
| 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
         | 
| 78 79 | 
             
            arpakitlib/_arpakit_project_template/src/api/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 79 80 | 
             
            arpakitlib/_arpakit_project_template/src/api/schema/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 80 | 
            -
            arpakitlib/_arpakit_project_template/src/api/schema/v1/in_.py,sha256= | 
| 81 | 
            -
            arpakitlib/_arpakit_project_template/src/api/schema/v1/out.py,sha256= | 
| 82 | 
            -
            arpakitlib/_arpakit_project_template/src/api/ | 
| 83 | 
            -
            arpakitlib/_arpakit_project_template/src/api/start_api_without_reload.py,sha256=kHqVwznAbtgvsVmg3Y5rCzYcQ3KvF3hqJsTcmAAW_3Y,342
         | 
| 84 | 
            -
            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
         | 
| 85 84 | 
             
            arpakitlib/_arpakit_project_template/src/api/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 86 85 | 
             
            arpakitlib/_arpakit_project_template/src/business_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 87 86 | 
             
            arpakitlib/_arpakit_project_template/src/business_service/hello_world.py,sha256=mEVxsTFsd5u_T88l4mtCfoPre9QixAmQvzQmM2J8Okc,247
         | 
| 88 87 | 
             
            arpakitlib/_arpakit_project_template/src/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 89 | 
            -
            arpakitlib/_arpakit_project_template/src/core/ | 
| 90 | 
            -
            arpakitlib/_arpakit_project_template/src/core/ | 
| 91 | 
            -
            arpakitlib/_arpakit_project_template/src/core/ | 
| 92 | 
            -
            arpakitlib/_arpakit_project_template/src/core/ | 
| 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
         | 
| 93 92 | 
             
            arpakitlib/_arpakit_project_template/src/core/settings.py,sha256=Sie05LqTfxBOqnYz8trM3sAQdfYAJSQ2Xv4Xwt0aJbI,2348
         | 
| 94 | 
            -
            arpakitlib/_arpakit_project_template/src/core/util.py,sha256= | 
| 93 | 
            +
            arpakitlib/_arpakit_project_template/src/core/util.py,sha256=mcikqcjljZa2qhYeoR1tR9JUSprrVSod8XcIK_PqS6o,1547
         | 
| 95 94 | 
             
            arpakitlib/_arpakit_project_template/src/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 96 | 
            -
            arpakitlib/_arpakit_project_template/src/db/ | 
| 97 | 
            -
            arpakitlib/_arpakit_project_template/src/db/ | 
| 98 | 
            -
            arpakitlib/_arpakit_project_template/src/db/ | 
| 99 | 
            -
            arpakitlib/_arpakit_project_template/src/db/ | 
| 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
         | 
| 100 99 | 
             
            arpakitlib/_arpakit_project_template/src/db/sqlalchemy_model.py,sha256=nXtayUkBaVb6tWx5qJgXZLbLOTVAjnSLpSDxBm7yZLc,234
         | 
| 101 | 
            -
            arpakitlib/_arpakit_project_template/src/db/util.py,sha256= | 
| 100 | 
            +
            arpakitlib/_arpakit_project_template/src/db/util.py,sha256=a8lj54I-vVGjhDg4SLOxahDjYuiPOSFxU86myCfE1M0,557
         | 
| 102 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
         | 
| 103 104 | 
             
            arpakitlib/_arpakit_project_template/src/operation_execution/const.py,sha256=HjupGEDUWVijQlbzxZPI9vBbAVOETUYzYU9pdnc9IcI,176
         | 
| 104 105 | 
             
            arpakitlib/_arpakit_project_template/src/operation_execution/operation_executor.py,sha256=TuAlF3QPJq-Zsq693NHQ00dvCWAzuwce2q6ozesWFYY,725
         | 
| 105 | 
            -
            arpakitlib/_arpakit_project_template/src/operation_execution/scheduled_operations.py,sha256= | 
| 106 | 
            -
            arpakitlib/_arpakit_project_template/src/operation_execution/ | 
| 107 | 
            -
            arpakitlib/_arpakit_project_template/src/operation_execution/start_scheduled_operation_creator_worker.py,sha256=cvk3vciWYfeOPJJQiDh66WyiNXwA5vm2eGeUsqWo93k,575
         | 
| 108 | 
            -
            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
         | 
| 109 108 | 
             
            arpakitlib/_arpakit_project_template/src/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 110 | 
            -
            arpakitlib/_arpakit_project_template/src/test_data/make_test_data_1.py,sha256= | 
| 111 | 
            -
            arpakitlib/_arpakit_project_template/src/test_data/make_test_data_2.py,sha256= | 
| 112 | 
            -
            arpakitlib/_arpakit_project_template/src/test_data/make_test_data_3.py,sha256= | 
| 113 | 
            -
            arpakitlib/_arpakit_project_template/src/test_data/make_test_data_4.py,sha256= | 
| 114 | 
            -
            arpakitlib/_arpakit_project_template/src/test_data/make_test_data_5.py,sha256= | 
| 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
         | 
| 115 114 | 
             
            arpakitlib/_arpakit_project_template/src/tg_bot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 116 115 | 
             
            arpakitlib/_arpakit_project_template/src/tg_bot/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 117 116 | 
             
            arpakitlib/_arpakit_project_template/src/tg_bot/start_tg_bot.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 118 117 | 
             
            arpakitlib/_arpakit_project_template/src/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 119 | 
            -
            arpakitlib/api_key_util.py,sha256=E84JlJXiDHtxLQmV8BNHvqNKu_G8-Dox0XxknYJQ37Q,422
         | 
| 120 118 | 
             
            arpakitlib/ar_additional_model_util.py,sha256=GFg-glLCxH9X95R2bhTJsscVwv37FgE1qbaAAyXrnIE,917
         | 
| 121 119 | 
             
            arpakitlib/ar_aiogram_util.py,sha256=5JPCDZpdBGTE-EIWPRez9amCZAX7XemFIVu5YrQK7Pw,12264
         | 
| 120 | 
            +
            arpakitlib/ar_api_key_util.py,sha256=E84JlJXiDHtxLQmV8BNHvqNKu_G8-Dox0XxknYJQ37Q,422
         | 
| 122 121 | 
             
            arpakitlib/ar_arpakit_lib_module_util.py,sha256=UEPU8wk29R_bBP_RENnhXYzNbj_RF9FWjowrj_yxWLA,5931
         | 
| 123 122 | 
             
            arpakitlib/ar_arpakit_project_template_util.py,sha256=c7yc8w2IvZGH5hH8eOpL7JuD005hUxZ0GVDcSkJF5iI,3705
         | 
| 124 123 | 
             
            arpakitlib/ar_arpakit_schedule_uust_api_client_util.py,sha256=jGbP6egs2yhgfheyqhM0J-SeM2qp2YrW7dV-u9djv4Q,19223
         | 
| @@ -126,11 +125,12 @@ arpakitlib/ar_arpakitlib_cli_util.py,sha256=8lhEDxnwMSRX2PGV2xQtQru1AYKSA92SVolo | |
| 126 125 | 
             
            arpakitlib/ar_base64_util.py,sha256=aZkg2cZTuAaP2IWeG_LXJ6RO7qhyskVwec-Lks0iM-k,676
         | 
| 127 126 | 
             
            arpakitlib/ar_base_worker_util.py,sha256=Qm_C7PFH5W-LPu1AGX1zp29zbqZ04i71Su1U-eeQBkA,5674
         | 
| 128 127 | 
             
            arpakitlib/ar_cache_file_util.py,sha256=Fo2pH-Zqm966KWFBHG_pbiySGZvhIFCYqy7k1weRfJ0,3476
         | 
| 128 | 
            +
            arpakitlib/ar_class_util.py,sha256=Eb4orGm2EFSaHfmrY2A_Nis5iwFMDKFaz1_nxTnfmnQ,487
         | 
| 129 129 | 
             
            arpakitlib/ar_datetime_util.py,sha256=Xe1NiT9oPQzNSG7RVRkhukhbg4i-hhS5ImmV7sPUc8o,971
         | 
| 130 130 | 
             
            arpakitlib/ar_dict_util.py,sha256=cF5LQJ6tLqyGoEXfDljMDZrikeZoWPw7CgINHIFGvXM,419
         | 
| 131 131 | 
             
            arpakitlib/ar_dream_ai_api_client_util.py,sha256=QF9XK7xK5ny1fvkcG4e0pfCySNNFRNPy0x0cmxfsAak,2818
         | 
| 132 132 | 
             
            arpakitlib/ar_encrypt_decrypt_util.py,sha256=GhWnp7HHkbhwFVVCzO1H07m-5gryr4yjWsXjOaNQm1Y,520
         | 
| 133 | 
            -
            arpakitlib/ar_enumeration_util.py,sha256= | 
| 133 | 
            +
            arpakitlib/ar_enumeration_util.py,sha256=ZOkH1-duDcjQelJrdJ-nJ8h7wePFAgmpg_8e63Cyp0E,3072
         | 
| 134 134 | 
             
            arpakitlib/ar_exception_util.py,sha256=3hZKsj34TZVdmd4JAQz7w515smWqB8o3gTwAEjuMdnI,408
         | 
| 135 135 | 
             
            arpakitlib/ar_fastapi_static/healthcheck,sha256=IIO7Wvjwlr2-LPSQ7Y8O35hcI6t0_s8zqITDxkYCO8I,11
         | 
| 136 136 | 
             
            arpakitlib/ar_fastapi_static/redoc/redoc.standalone.js,sha256=WCuodUNv1qVh0oW5fjnJDwb5AwOue73jKHdI9z8iGKU,909365
         | 
| @@ -168,13 +168,14 @@ arpakitlib/ar_logging_util.py,sha256=mx3H6CzX9dsh29ruFmYnva8lL6mwvdBXmeHH9E2tvu8 | |
| 168 168 | 
             
            arpakitlib/ar_mongodb_util.py,sha256=2ECkTnGAZ92qxioL-fmN6R4yZOSr3bXdXLWTzT1C3vk,4038
         | 
| 169 169 | 
             
            arpakitlib/ar_need_type_util.py,sha256=GETiREPMEYhch-yU6T--Bdawlbb04Jp1Qy7cOsUlIeA,2228
         | 
| 170 170 | 
             
            arpakitlib/ar_openai_api_client_util.py,sha256=_XmlApvHFMSyjvZydPa_kASIt9LsFrZmSC7YEzIG8Bg,1806
         | 
| 171 | 
            -
            arpakitlib/ar_operation_execution_util.py,sha256= | 
| 171 | 
            +
            arpakitlib/ar_operation_execution_util.py,sha256=uWLDJWYbfsYItUQ48qOSWy4qxCTCFMjElWEXswKtaWk,17617
         | 
| 172 172 | 
             
            arpakitlib/ar_parse_command.py,sha256=-s61xcATIsfw1eV_iD3xi-grsitbGzSDoAFc5V0OFy4,3447
         | 
| 173 173 | 
             
            arpakitlib/ar_postgresql_util.py,sha256=1AuLjEaa1Lg4pzn-ukCVnDi35Eg1k91APRTqZhIJAdo,945
         | 
| 174 174 | 
             
            arpakitlib/ar_run_cmd_util.py,sha256=D_rPavKMmWkQtwvZFz-Io5Ak8eSODHkcFeLPzNVC68g,1072
         | 
| 175 175 | 
             
            arpakitlib/ar_schedule_uust_api_client_util.py,sha256=0Ns0mMEXYEkVmP6YTAXHyNcrhNsvCJ8X-G_5XwILhJ4,6855
         | 
| 176 | 
            -
            arpakitlib/ar_settings_util.py,sha256= | 
| 176 | 
            +
            arpakitlib/ar_settings_util.py,sha256=752EDXXnrA1uUbSD4InCHCZWEodLBwVUHrgOdOD2Xhw,1856
         | 
| 177 177 | 
             
            arpakitlib/ar_sleep_util.py,sha256=OaLtRaJQWMkGjfj_mW1RB2P4RaSWsAIH8LUoXqsH0zM,1061
         | 
| 178 | 
            +
            arpakitlib/ar_sqladmin_util.py,sha256=vQTRlf36VjW6l_zslZmjkHinMVuQfI-QZsXIlnXUpgE,2634
         | 
| 178 179 | 
             
            arpakitlib/ar_sqlalchemy_model_util.py,sha256=nKJGN32eg3Gn5kmJwHdVJznPT5TydLsfUfwJGdypdUo,6264
         | 
| 179 180 | 
             
            arpakitlib/ar_sqlalchemy_util.py,sha256=Hcg1THrDsSR_-8dsY1CG3NWPEv0FqCbkPXFXLtjlSJ0,4207
         | 
| 180 181 | 
             
            arpakitlib/ar_ssh_runner_util.py,sha256=e9deuUdBW7Eh0Exx2nTBhk57SaOZYaJaSjNk8q6dbJk,6804
         | 
| @@ -182,9 +183,8 @@ arpakitlib/ar_str_util.py,sha256=yU5gOwNXUQaH5b_tM5t6fXUn9oUcv5EQbVnq2wXXIpQ,337 | |
| 182 183 | 
             
            arpakitlib/ar_type_util.py,sha256=9C3ErtUVs0tAUqtK-foFzjJOykfBOntfCz2IogDOgfA,4134
         | 
| 183 184 | 
             
            arpakitlib/ar_yookassa_api_client_util.py,sha256=sh4fcUkAkdOetFn9JYoTvjcSXP-M1wU04KEY-ECLfLg,5137
         | 
| 184 185 | 
             
            arpakitlib/ar_zabbix_api_client_util.py,sha256=Q-VR4MvoZ9aHwZeYZr9G3LwN-ANx1T5KFmF6pvPM-9M,6402
         | 
| 185 | 
            -
            arpakitlib-1.7. | 
| 186 | 
            -
            arpakitlib-1.7. | 
| 187 | 
            -
            arpakitlib-1.7. | 
| 188 | 
            -
            arpakitlib-1.7. | 
| 189 | 
            -
            arpakitlib-1.7. | 
| 190 | 
            -
            arpakitlib-1.7.136.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,,
         | 
| @@ -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,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
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         |