arpakitlib 1.8.171__py3-none-any.whl → 1.8.173__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_v_5/arpakitlib_project_template_info.json +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/check_logging.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/check_sqlalchemy_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/drop_json_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/drop_sqlalchemy_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/init_json_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/init_sqlalchemy_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/reinit_all_sqlalchemy_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/reinit_json_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/reinit_sqlalchemy_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/remove_operations.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/remove_rows_from_tables_sqlalchemy_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/remove_story_logs.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/rm_all_records_in_json_db.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/set_tg_bot_commands.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/show_sqlalchemy_db_table_name_to_amount.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_worker.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_async_task.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_thread.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/start_scheduled_operation_creator_worker.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin_for_prod.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin_with_reload.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/start_tg_bot.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/command/start_tg_bot_for_prod.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/create_first_data.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/main_router.py +0 -1
- arpakitlib/_arpakit_project_template_v_5/project/api/start_api.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/business_service/hello_world.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/core/easy_openai_api_client.py +1 -2
- arpakitlib/_arpakit_project_template_v_5/project/core/setup_logging.py +55 -0
- arpakitlib/_arpakit_project_template_v_5/project/core/util.py +0 -19
- arpakitlib/_arpakit_project_template_v_5/project/emailer/send_email.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/emailer/send_simple_email.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/site/create_site_app.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/create_sqladmin_app.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py +2 -2
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/start_sqladmin.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_1.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/start_tg_bot.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/notify_admins.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/set_tg_bot_commands.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/tg_bot_notifier/tg_bot_notifier.py +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/util/send_email_.py +1 -1
- arpakitlib/ar_logging_util.py +2 -2
- {arpakitlib-1.8.171.dist-info → arpakitlib-1.8.173.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.171.dist-info → arpakitlib-1.8.173.dist-info}/RECORD +51 -51
- arpakitlib/ar_ssh_runner_util.py +0 -266
- {arpakitlib-1.8.171.dist-info → arpakitlib-1.8.173.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.171.dist-info → arpakitlib-1.8.173.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.171.dist-info → arpakitlib-1.8.173.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
from project.core.settings import get_cached_settings
|
2
|
-
from project.core.
|
2
|
+
from project.core.setup_logging import setup_logging
|
3
3
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
4
4
|
from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
|
5
5
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
|
-
from project.core.
|
3
|
+
from project.core.setup_logging import setup_logging
|
4
4
|
from project.tg_bot.tg_bot import get_cached_tg_bot
|
5
5
|
from project.tg_bot.util.set_tg_bot_commands import set_client_tg_bot_commands, set_admin_tg_bot_commands
|
6
6
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import logging
|
2
2
|
|
3
3
|
from arpakitlib.ar_json_util import transfer_data_to_json_str
|
4
|
-
from project.core.
|
4
|
+
from project.core.setup_logging import setup_logging
|
5
5
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
6
6
|
|
7
7
|
_logger = logging.getLogger()
|
arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_async_task.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
3
|
from arpakitlib.ar_base_worker_util import safe_run_workers_in_background, SafeRunInBackgroundModes
|
4
|
-
from project.core.
|
4
|
+
from project.core.setup_logging import setup_logging
|
5
5
|
from project.operation_execution.operation_executor_worker import OperationExecutorWorker
|
6
6
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
7
7
|
|
arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_thread.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
from arpakitlib.ar_base_worker_util import safe_run_workers_in_background, SafeRunInBackgroundModes
|
2
2
|
|
3
|
-
from project.core.
|
3
|
+
from project.core.setup_logging import setup_logging
|
4
4
|
from project.operation_execution.operation_executor_worker import OperationExecutorWorker
|
5
5
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
6
6
|
|
@@ -12,7 +12,7 @@ from project.api.openapi_ui import add_local_openapi_ui_to_api_app
|
|
12
12
|
from project.api.router.main_router import main_api_router
|
13
13
|
from project.core.const import ProjectPaths
|
14
14
|
from project.core.settings import get_cached_settings
|
15
|
-
from project.core.
|
15
|
+
from project.core.setup_logging import setup_logging
|
16
16
|
|
17
17
|
_logger = logging.getLogger(__name__)
|
18
18
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import logging
|
2
2
|
|
3
|
-
from project.core.
|
3
|
+
from project.core.setup_logging import setup_logging
|
4
4
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
5
5
|
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM, ApiKeyDBM, UserTokenDBM
|
6
6
|
|
@@ -4,7 +4,6 @@ from functools import lru_cache
|
|
4
4
|
import httpx
|
5
5
|
from openai import OpenAI, AsyncOpenAI
|
6
6
|
|
7
|
-
from arpakitlib.ar_logging_util import setup_normal_logging
|
8
7
|
from arpakitlib.ar_openai_api_client_util import EasyOpenAIAPIClient
|
9
8
|
from project.core.settings import get_cached_settings
|
10
9
|
|
@@ -38,7 +37,7 @@ def get_cached_easy_openai_api_client() -> EasyOpenAIAPIClient | None:
|
|
38
37
|
|
39
38
|
|
40
39
|
async def __async_example():
|
41
|
-
|
40
|
+
pass
|
42
41
|
|
43
42
|
|
44
43
|
if __name__ == '__main__':
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import asyncio
|
2
|
+
import logging
|
3
|
+
|
4
|
+
from arpakitlib.ar_logging_util import init_log_file
|
5
|
+
from project.core.settings import get_cached_settings
|
6
|
+
|
7
|
+
_logging_was_setup: bool = False
|
8
|
+
|
9
|
+
|
10
|
+
def setup_logging():
|
11
|
+
global _logging_was_setup
|
12
|
+
if _logging_was_setup:
|
13
|
+
return
|
14
|
+
|
15
|
+
if get_cached_settings().log_filepath:
|
16
|
+
init_log_file(log_filepath=get_cached_settings().log_filepath)
|
17
|
+
|
18
|
+
logger = logging.getLogger()
|
19
|
+
logger.setLevel(logging.INFO)
|
20
|
+
|
21
|
+
stream_handler = logging.StreamHandler()
|
22
|
+
stream_handler.setLevel(logging.INFO)
|
23
|
+
stream_formatter = logging.Formatter(
|
24
|
+
"%(asctime)s %(msecs)03d | %(levelname)s | %(filename)s | %(funcName)s:%(lineno)d - %(message)s",
|
25
|
+
datefmt="%d.%m.%Y %I:%M:%S %p"
|
26
|
+
)
|
27
|
+
stream_handler.setFormatter(stream_formatter)
|
28
|
+
logger.addHandler(stream_handler)
|
29
|
+
|
30
|
+
if get_cached_settings().log_filepath:
|
31
|
+
file_handler = logging.FileHandler(get_cached_settings().log_filepath)
|
32
|
+
file_handler.setLevel(logging.WARNING)
|
33
|
+
file_formatter = logging.Formatter(
|
34
|
+
"%(asctime)s | %(levelname)s | %(filename)s | %(funcName)s:%(lineno)d - %(message)s",
|
35
|
+
datefmt="%d.%m.%Y %I:%M:%S%p"
|
36
|
+
)
|
37
|
+
file_handler.setFormatter(file_formatter)
|
38
|
+
logger.addHandler(file_handler)
|
39
|
+
|
40
|
+
_logging_was_setup = True
|
41
|
+
|
42
|
+
logger.info("normal logging was setup")
|
43
|
+
|
44
|
+
|
45
|
+
def __example():
|
46
|
+
pass
|
47
|
+
|
48
|
+
|
49
|
+
async def __async_example():
|
50
|
+
pass
|
51
|
+
|
52
|
+
|
53
|
+
if __name__ == '__main__':
|
54
|
+
__example()
|
55
|
+
asyncio.run(__async_example())
|
@@ -1,29 +1,10 @@
|
|
1
|
-
import asyncio
|
2
1
|
from datetime import datetime
|
3
2
|
|
4
3
|
from arpakitlib.ar_datetime_util import now_dt
|
5
|
-
from arpakitlib.ar_logging_util import setup_normal_logging
|
6
4
|
from arpakitlib.ar_type_util import raise_if_none
|
7
5
|
from project.core.settings import get_cached_settings
|
8
6
|
|
9
7
|
|
10
|
-
def setup_logging():
|
11
|
-
setup_normal_logging(log_filepath=get_cached_settings().log_filepath)
|
12
|
-
|
13
|
-
|
14
8
|
def now_local_dt() -> datetime:
|
15
9
|
raise_if_none(get_cached_settings().local_timezone_as_pytz)
|
16
10
|
return now_dt(tz=get_cached_settings().local_timezone_as_pytz)
|
17
|
-
|
18
|
-
|
19
|
-
def __example():
|
20
|
-
pass
|
21
|
-
|
22
|
-
|
23
|
-
async def __async_example():
|
24
|
-
pass
|
25
|
-
|
26
|
-
|
27
|
-
if __name__ == '__main__':
|
28
|
-
__example()
|
29
|
-
asyncio.run(__async_example())
|
@@ -4,7 +4,7 @@ from fastapi import FastAPI
|
|
4
4
|
from fastapi.middleware.cors import CORSMiddleware
|
5
5
|
|
6
6
|
from project.core.settings import get_cached_settings
|
7
|
-
from project.core.
|
7
|
+
from project.core.setup_logging import setup_logging
|
8
8
|
from project.sqladmin_.add_admin_in_app import add_sqladmin_in_app
|
9
9
|
from project.sqladmin_.event import get_sqladmin_startup_events, get_sqladmin_shutdown_events
|
10
10
|
|
@@ -7,7 +7,7 @@ import starlette.responses
|
|
7
7
|
from openpyxl import Workbook
|
8
8
|
from sqladmin import ModelView
|
9
9
|
|
10
|
-
from
|
10
|
+
from arpakitlib.ar_datetime_util import now_utc_dt
|
11
11
|
|
12
12
|
|
13
13
|
class SimpleMV(ModelView):
|
@@ -48,7 +48,7 @@ class SimpleMV(ModelView):
|
|
48
48
|
wb.save(output)
|
49
49
|
output.seek(0)
|
50
50
|
|
51
|
-
filename = f"{self.model.__name__}_export_{
|
51
|
+
filename = f"{self.model.__name__}_export_{now_utc_dt().strftime("%d.%m.%YT%H-%M-%S-%Z%z")}.xlsx"
|
52
52
|
|
53
53
|
return starlette.responses.StreamingResponse(
|
54
54
|
output,
|
@@ -3,7 +3,7 @@ import logging
|
|
3
3
|
|
4
4
|
from arpakitlib.ar_datetime_util import now_utc_dt
|
5
5
|
from project.core.settings import get_cached_settings
|
6
|
-
from project.core.
|
6
|
+
from project.core.setup_logging import setup_logging
|
7
7
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
8
8
|
from project.sqlalchemy_db_.sqlalchemy_model import ApiKeyDBM, UserDBM, UserTokenDBM
|
9
9
|
|
@@ -5,7 +5,7 @@ import aiohttp.web
|
|
5
5
|
from aiogram.webhook.aiohttp_server import SimpleRequestHandler, setup_application
|
6
6
|
|
7
7
|
from project.core.settings import get_cached_settings
|
8
|
-
from project.core.
|
8
|
+
from project.core.setup_logging import setup_logging
|
9
9
|
from project.tg_bot.tg_bot import get_cached_tg_bot
|
10
10
|
from project.tg_bot.tg_bot_dispatcher import create_tg_bot_dispatcher
|
11
11
|
|
@@ -8,7 +8,7 @@ from emoji import emojize
|
|
8
8
|
|
9
9
|
from arpakitlib.ar_str_util import remove_tags_and_html
|
10
10
|
from project.core.settings import get_cached_settings
|
11
|
-
from project.core.
|
11
|
+
from project.core.setup_logging import setup_logging
|
12
12
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
13
13
|
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
14
14
|
from project.tg_bot.tg_bot import get_cached_tg_bot
|
@@ -5,7 +5,7 @@ from aiogram.types import BotCommand, BotCommandScopeChat
|
|
5
5
|
|
6
6
|
from arpakitlib.ar_str_util import return_str_if_none
|
7
7
|
from project.core.settings import get_cached_settings
|
8
|
-
from project.core.
|
8
|
+
from project.core.setup_logging import setup_logging
|
9
9
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
10
10
|
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
11
11
|
from project.tg_bot.blank.client import get_cached_rus_client_tg_bot_blank
|
@@ -5,7 +5,7 @@ from aiogram.client.session.aiohttp import AiohttpSession
|
|
5
5
|
from aiogram.enums import ParseMode
|
6
6
|
|
7
7
|
from project.core.settings import get_cached_settings
|
8
|
-
from project.core.
|
8
|
+
from project.core.setup_logging import setup_logging
|
9
9
|
|
10
10
|
|
11
11
|
def create_async_tg_bot_notifier() -> aiogram.Bot | None:
|
@@ -9,7 +9,7 @@ from email.utils import formataddr
|
|
9
9
|
import aiosmtplib
|
10
10
|
|
11
11
|
from project.core.settings import get_cached_settings
|
12
|
-
from project.core.
|
12
|
+
from project.core.setup_logging import setup_logging
|
13
13
|
|
14
14
|
_logger = logging.getLogger(__name__)
|
15
15
|
|
arpakitlib/ar_logging_util.py
CHANGED
@@ -16,11 +16,11 @@ def init_log_file(*, log_filepath: str):
|
|
16
16
|
file.write("")
|
17
17
|
|
18
18
|
|
19
|
-
|
19
|
+
_logging_was_setup: bool = False
|
20
20
|
|
21
21
|
|
22
22
|
def setup_normal_logging(log_filepath: Optional[str] = None):
|
23
|
-
global
|
23
|
+
global _logging_was_setup
|
24
24
|
if _normal_logging_was_setup is True:
|
25
25
|
return
|
26
26
|
|
@@ -8,22 +8,22 @@ arpakitlib/_arpakit_project_template_v_5/alembic/env.py,sha256=Qesmnj5A2kB-Doeuf
|
|
8
8
|
arpakitlib/_arpakit_project_template_v_5/alembic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
|
9
9
|
arpakitlib/_arpakit_project_template_v_5/alembic/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
arpakitlib/_arpakit_project_template_v_5/alembic.ini,sha256=8fuyeEvGBiPGbxEFy8ISBV3xX_fgVmuhEGpB10_B5Uo,3733
|
11
|
-
arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=
|
11
|
+
arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=al7QVVaOS56rAPUM62qd71VafJLinL-rixn28o1gec0,98
|
12
12
|
arpakitlib/_arpakit_project_template_v_5/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
arpakitlib/_arpakit_project_template_v_5/command/alembic_history.sh,sha256=OMnDNtHIksGh9iavWnzbtxcudZW4vjdcISsBXvzZSPw,22
|
14
14
|
arpakitlib/_arpakit_project_template_v_5/command/alembic_revision_autogenerate.sh,sha256=yW2i-SBOtBx15Ya0poVQqKkJM5t2JZp06r9AEW-DmGE,46
|
15
15
|
arpakitlib/_arpakit_project_template_v_5/command/alembic_upgrade_head.sh,sha256=RIkhv5e5ERZHoxmTvvo_nCeDeVqeVIam7CjVoE9_E4k,38
|
16
16
|
arpakitlib/_arpakit_project_template_v_5/command/beautify_json.py,sha256=oyxkT3wGqCwGNgwGHW-gPLJd063V8-SXA5OXkszAE2g,215
|
17
|
-
arpakitlib/_arpakit_project_template_v_5/command/check_logging.py,sha256=
|
18
|
-
arpakitlib/_arpakit_project_template_v_5/command/check_sqlalchemy_db.py,sha256=
|
17
|
+
arpakitlib/_arpakit_project_template_v_5/command/check_logging.py,sha256=7vTaDOl82Eiuc9KfuxZCuxiH2CXh9VjdBhhedctNiek,228
|
18
|
+
arpakitlib/_arpakit_project_template_v_5/command/check_sqlalchemy_db.py,sha256=t9Hu9tl_pggSjSN5ZQhBeIBfHrZGBoQ805Kdv7-n2lg,255
|
19
19
|
arpakitlib/_arpakit_project_template_v_5/command/demojize.py,sha256=RGzFHgOPfNfwsmlBT1YiV69IfnuNDEoJO-UUvvpC-Kw,136
|
20
20
|
arpakitlib/_arpakit_project_template_v_5/command/docker_ps_a.sh,sha256=nOQejihYlzstg9oROvYwHIsSLt2Sw0DWQEeT3GBaBNs,18
|
21
21
|
arpakitlib/_arpakit_project_template_v_5/command/docker_rm_postgres.sh,sha256=8aSvrtBK6kaRpvUv5rDnzzQ6Hh1IqrmqQpl9AmcVJJc,68
|
22
22
|
arpakitlib/_arpakit_project_template_v_5/command/docker_run_postgres.sh,sha256=JDrEZId04-1qnAQXXEj7ylP1zZRxbV145DYdwPKWsmk,364
|
23
23
|
arpakitlib/_arpakit_project_template_v_5/command/docker_start_postgres.sh,sha256=Rrwmjt2_3m1rqiHuvymAC5bbsQmyiiyhwG_DVscINqA,68
|
24
24
|
arpakitlib/_arpakit_project_template_v_5/command/docker_stop_postgres.sh,sha256=ZhXUvRZQ4iJG1KnIpSIqNq7ED3Mp0UOxXbbxhDxEOpo,67
|
25
|
-
arpakitlib/_arpakit_project_template_v_5/command/drop_json_db.py,sha256=
|
26
|
-
arpakitlib/_arpakit_project_template_v_5/command/drop_sqlalchemy_db.py,sha256=
|
25
|
+
arpakitlib/_arpakit_project_template_v_5/command/drop_json_db.py,sha256=TjdM4kW6F4BBa07PoJmXgA5HX-vqoqK2oT-aAB4nF7s,325
|
26
|
+
arpakitlib/_arpakit_project_template_v_5/command/drop_sqlalchemy_db.py,sha256=U4eG5w9At8bTcU8PzB6GfZhxox836CRPWODXqgx4HOU,455
|
27
27
|
arpakitlib/_arpakit_project_template_v_5/command/emojize.py,sha256=RpIBA60HXqHvWGrB8pFGJ5glpI4tWfPGkw9QRy32YLg,134
|
28
28
|
arpakitlib/_arpakit_project_template_v_5/command/generate_settings_env_example.py,sha256=v05NKSG-hFZyFiMfV6n8uObv-1qoS59UdztSsq4lF1c,437
|
29
29
|
arpakitlib/_arpakit_project_template_v_5/command/git_commit.sh,sha256=AW1NEel-ZHaYeVWFlRbgZSYPQdnVKsTkpR_07RQL1Mw,42
|
@@ -37,8 +37,8 @@ arpakitlib/_arpakit_project_template_v_5/command/git_set_arpakit_origin.sh,sha25
|
|
37
37
|
arpakitlib/_arpakit_project_template_v_5/command/git_set_divarteam_origin.sh,sha256=XJ8m822bosZ6HqbfJDsWe-IqBNcAgGsKjMyDWygdP2Y,150
|
38
38
|
arpakitlib/_arpakit_project_template_v_5/command/git_status.sh,sha256=N9JGYX5_UfCdirw4EQYzu4sS7pMLGrF4-QrTSTcpUtA,16
|
39
39
|
arpakitlib/_arpakit_project_template_v_5/command/hello_world.py,sha256=6aDbntxZ6e4Mbf2sQEb4uVazUDbJX7kEaSJn6SYwR6U,87
|
40
|
-
arpakitlib/_arpakit_project_template_v_5/command/init_json_db.py,sha256=
|
41
|
-
arpakitlib/_arpakit_project_template_v_5/command/init_sqlalchemy_db.py,sha256=
|
40
|
+
arpakitlib/_arpakit_project_template_v_5/command/init_json_db.py,sha256=RQYstMAUDJfjNC8WYWcPvioGSmRFG5LF0Aa2CqaSedw,224
|
41
|
+
arpakitlib/_arpakit_project_template_v_5/command/init_sqlalchemy_db.py,sha256=o_58KX3phGXYPSt_FvWC6lhZYDWsKKepSkJaxRzYPOA,249
|
42
42
|
arpakitlib/_arpakit_project_template_v_5/command/poetry_check.sh,sha256=mxkbFqw-mVlAkP_klLoXDANbIoKEu6Uj98tZ3pLKlpU,19
|
43
43
|
arpakitlib/_arpakit_project_template_v_5/command/poetry_clear_cache.sh,sha256=5NmoMsA377JCeTMLERzE2GZywgi8mXQDTQ_yhIJtR8k,139
|
44
44
|
arpakitlib/_arpakit_project_template_v_5/command/poetry_config.sh,sha256=gIctNLSvRJmER_iU_HwPpHR83adZV12LoXcoWfY9M00,26
|
@@ -49,28 +49,28 @@ arpakitlib/_arpakit_project_template_v_5/command/poetry_show.sh,sha256=pclR9efCN
|
|
49
49
|
arpakitlib/_arpakit_project_template_v_5/command/poetry_show_arpakitlib.sh,sha256=q2bMtxwfr24-qGRrDi6aw6ryumqrBe42fht-V19NqxY,37
|
50
50
|
arpakitlib/_arpakit_project_template_v_5/command/poetry_update.sh,sha256=ZtoXIC4Qq7PMTDxQMwUxvkYC6lTc5LC23ILTywWbyoU,164
|
51
51
|
arpakitlib/_arpakit_project_template_v_5/command/poetry_update_arpakitlib.sh,sha256=hh7vj-yKgKqLfaGb8cjsJ_NTa7fBtE4s3yxzte4D8bw,163
|
52
|
-
arpakitlib/_arpakit_project_template_v_5/command/reinit_all_sqlalchemy_db.py,sha256
|
53
|
-
arpakitlib/_arpakit_project_template_v_5/command/reinit_json_db.py,sha256=
|
54
|
-
arpakitlib/_arpakit_project_template_v_5/command/reinit_sqlalchemy_db.py,sha256=
|
55
|
-
arpakitlib/_arpakit_project_template_v_5/command/remove_operations.py,sha256=
|
56
|
-
arpakitlib/_arpakit_project_template_v_5/command/remove_rows_from_tables_sqlalchemy_db.py,sha256=
|
57
|
-
arpakitlib/_arpakit_project_template_v_5/command/remove_story_logs.py,sha256=
|
58
|
-
arpakitlib/_arpakit_project_template_v_5/command/rm_all_records_in_json_db.py,sha256=
|
59
|
-
arpakitlib/_arpakit_project_template_v_5/command/set_tg_bot_commands.py,sha256=
|
52
|
+
arpakitlib/_arpakit_project_template_v_5/command/reinit_all_sqlalchemy_db.py,sha256=ENkdaBsleaExqVRd1UImvPKAY18mJkERMz1jqb0mr-A,356
|
53
|
+
arpakitlib/_arpakit_project_template_v_5/command/reinit_json_db.py,sha256=fVFHABiP6WtHPxQRsLNVOe0c4A8DNlkYM8VI5Kwa8Ps,327
|
54
|
+
arpakitlib/_arpakit_project_template_v_5/command/reinit_sqlalchemy_db.py,sha256=_XLOSoj2RC2gbv9z06hiDtyJCRiNG4JyrVSmcNIDgi4,352
|
55
|
+
arpakitlib/_arpakit_project_template_v_5/command/remove_operations.py,sha256=iathPqcgTM-J6vmnYNn_F0bkAmBz4PQpcWTo6xnzMhU,335
|
56
|
+
arpakitlib/_arpakit_project_template_v_5/command/remove_rows_from_tables_sqlalchemy_db.py,sha256=hXxxW2nIEu-YJWa32YVjdawpLEf7vBhTIhCHdBd0k6k,268
|
57
|
+
arpakitlib/_arpakit_project_template_v_5/command/remove_story_logs.py,sha256=YNDZar3OuE5RJxnDIqXm_ucBC5GbRJnEpZPcbnGfw70,507
|
58
|
+
arpakitlib/_arpakit_project_template_v_5/command/rm_all_records_in_json_db.py,sha256=33kwtdrNLEF0Y8z1KqXZ2gR_7mP1NDL-_8d8_PVl6ck,335
|
59
|
+
arpakitlib/_arpakit_project_template_v_5/command/set_tg_bot_commands.py,sha256=5NLsSC2XFwXRUIyW5pLNvQ3CwAwrQWQFJ5X35ogofJk,465
|
60
60
|
arpakitlib/_arpakit_project_template_v_5/command/show_arpakitlib_project_template_info.py,sha256=AoemyIrxS49kp34jsuJHKTa4Cvyycl17woXwk8oy9nU,209
|
61
61
|
arpakitlib/_arpakit_project_template_v_5/command/show_settings.py,sha256=c07DRqJ08tPm2nFSLAxm_h1dNSQIbWT_hL65g869CWw,264
|
62
|
-
arpakitlib/_arpakit_project_template_v_5/command/show_sqlalchemy_db_table_name_to_amount.py,sha256=
|
62
|
+
arpakitlib/_arpakit_project_template_v_5/command/show_sqlalchemy_db_table_name_to_amount.py,sha256=gZKzoiUC4gwyLUrohvUfunY8lwjl9p44ydR9xBn68po,419
|
63
63
|
arpakitlib/_arpakit_project_template_v_5/command/start_api.py,sha256=EPRfugVhXqa4UcLGvaSINExPKT_fquUeTCQt6QVUkDE,124
|
64
64
|
arpakitlib/_arpakit_project_template_v_5/command/start_api_for_prod.py,sha256=EPRfugVhXqa4UcLGvaSINExPKT_fquUeTCQt6QVUkDE,124
|
65
|
-
arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_worker.py,sha256=
|
66
|
-
arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_async_task.py,sha256=
|
67
|
-
arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_thread.py,sha256=
|
68
|
-
arpakitlib/_arpakit_project_template_v_5/command/start_scheduled_operation_creator_worker.py,sha256=
|
69
|
-
arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin.py,sha256=
|
70
|
-
arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin_for_prod.py,sha256=
|
71
|
-
arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin_with_reload.py,sha256=
|
72
|
-
arpakitlib/_arpakit_project_template_v_5/command/start_tg_bot.py,sha256=
|
73
|
-
arpakitlib/_arpakit_project_template_v_5/command/start_tg_bot_for_prod.py,sha256=
|
65
|
+
arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_worker.py,sha256=ExGT5jZGdd2clQg9yvzoEeGeVJHqRYmyTKPflAW1lgg,422
|
66
|
+
arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_async_task.py,sha256=FsZXQfdDBgONJDmzIYfvGqESFH2soQOtzFlDHue07ac,802
|
67
|
+
arpakitlib/_arpakit_project_template_v_5/command/start_operation_executor_workers_mode_thread.py,sha256=czQmkzEJgMdo5St9WctbqLgHHefpKKEzdwolS5OFoqQ,727
|
68
|
+
arpakitlib/_arpakit_project_template_v_5/command/start_scheduled_operation_creator_worker.py,sha256=D8qE3uiY4fZDziqSKvM1b98qzlMRmt3lUHesCcElDyA,338
|
69
|
+
arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin.py,sha256=jaAOq7Kf7HYziJslWbjqzr41kX4dJ9CXDPtMXj8rWok,384
|
70
|
+
arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin_for_prod.py,sha256=jaAOq7Kf7HYziJslWbjqzr41kX4dJ9CXDPtMXj8rWok,384
|
71
|
+
arpakitlib/_arpakit_project_template_v_5/command/start_sqladmin_with_reload.py,sha256=W7UULXDtbjg7Pwu6kT9E45QVtKjWjgLxXk_IW9aPDek,383
|
72
|
+
arpakitlib/_arpakit_project_template_v_5/command/start_tg_bot.py,sha256=40H2J0GbCewxTIoC3J-CpG3CzCLviwGGiQvDaOWMjfI,209
|
73
|
+
arpakitlib/_arpakit_project_template_v_5/command/start_tg_bot_for_prod.py,sha256=40H2J0GbCewxTIoC3J-CpG3CzCLviwGGiQvDaOWMjfI,209
|
74
74
|
arpakitlib/_arpakit_project_template_v_5/example.env,sha256=i6U782eTATww-PDjFmy9QQZcDr56Bup1DXpz1ZLvupY,1366
|
75
75
|
arpakitlib/_arpakit_project_template_v_5/note/note_1.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
76
76
|
arpakitlib/_arpakit_project_template_v_5/note/note_2.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -89,8 +89,8 @@ arpakitlib/_arpakit_project_template_v_5/project/api/blank/admin.py,sha256=ii1zL
|
|
89
89
|
arpakitlib/_arpakit_project_template_v_5/project/api/blank/client.py,sha256=rvJKtAB26Qy2pKVSHSMUM_70oI4v8Yr6Vmpr6r4EzNk,101
|
90
90
|
arpakitlib/_arpakit_project_template_v_5/project/api/blank/common.py,sha256=ug1FylE_CVC5eij-u4nh-IHNO-gwkbBGo5KgyWDujC8,91
|
91
91
|
arpakitlib/_arpakit_project_template_v_5/project/api/const.py,sha256=J9bqaRRiIc3RLn6SJTvdfDvFrSsM_Ixii9t2M8dA5Jc,433
|
92
|
-
arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py,sha256=
|
93
|
-
arpakitlib/_arpakit_project_template_v_5/project/api/create_first_data.py,sha256=
|
92
|
+
arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py,sha256=7lJim1RcHOr-vSobSOmO40qTZqtZtsf0C3OUOYnG1zc,2922
|
93
|
+
arpakitlib/_arpakit_project_template_v_5/project/api/create_first_data.py,sha256=BgqmD-7gXQ_zoz3ATqVacQzkg9lbvKnCSvQxm0M0Vxw,1824
|
94
94
|
arpakitlib/_arpakit_project_template_v_5/project/api/event.py,sha256=P8gV2Bq6LeLH0JDN9Z3O401PMbyNr2n-tme2gPvT-m4,996
|
95
95
|
arpakitlib/_arpakit_project_template_v_5/project/api/exception.py,sha256=DubhdZtgR6tXG6EEhAMxuEut8IRgGOGsQi5LGELpaE0,1417
|
96
96
|
arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py,sha256=AqT5l_GyTMWZsW-eI4ZD5FU4zMR0HKhsxsMX3p2KukY,11535
|
@@ -112,7 +112,7 @@ arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_sqlalchemy
|
|
112
112
|
arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_story_log.py,sha256=sK0FvNzoG-pE5rD2Q62t6yK5Bx1Y2JZA_04sOk14loQ,2033
|
113
113
|
arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_user.py,sha256=lBTR7eyjVbf0I8yG1yTovlrz2H4h-6O3wggQLsMPdsw,2763
|
114
114
|
arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/init_sqlalchemy_db.py,sha256=HUDaDeyb5ldpiEaA2mJIsAuGF6H-XupGvKfxjrkxMTE,1333
|
115
|
-
arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/main_router.py,sha256=
|
115
|
+
arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/main_router.py,sha256=sAJCElzS5PSHPhCAtobjg8Dm5xjlXIdi7keRxCTnsTY,3440
|
116
116
|
arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data_1.py,sha256=tITqtXW2C7od04_ECQudR_5kupVoKrYVnUVU2YcZp-g,1178
|
117
117
|
arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data_2.py,sha256=w003vLYnCUmM5GMaPDFGYcKd04OUf6rvonAQSEToZ5c,1178
|
118
118
|
arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/make_test_data_3.py,sha256=P0IF-awERehfABlE68O1GjxTYVaBEUl-s5tQL2tQ-Qg,1178
|
@@ -167,24 +167,25 @@ arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/api_key.
|
|
167
167
|
arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/common.py,sha256=y-p4QJhvKnFL1I6ud3m_nzE0xtreT3CNApPkkkLAbG0,541
|
168
168
|
arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/user.py,sha256=AvYwqaowd1V_6VQjrIGxt8SwqNEgmirLcHbtSHPwWmQ,1080
|
169
169
|
arpakitlib/_arpakit_project_template_v_5/project/api/schema/out/general/user_token.py,sha256=iiuZXu_zo3FJX0W5qyyMGasUx-_d32yjqc_2KY3xpUA,513
|
170
|
-
arpakitlib/_arpakit_project_template_v_5/project/api/start_api.py,sha256=
|
170
|
+
arpakitlib/_arpakit_project_template_v_5/project/api/start_api.py,sha256=P5KMtYXujQUP2uAAKgUFyCxG99Fj2vfNf1ZEm8eFH80,532
|
171
171
|
arpakitlib/_arpakit_project_template_v_5/project/api/util.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
172
172
|
arpakitlib/_arpakit_project_template_v_5/project/business_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
173
|
-
arpakitlib/_arpakit_project_template_v_5/project/business_service/hello_world.py,sha256=
|
173
|
+
arpakitlib/_arpakit_project_template_v_5/project/business_service/hello_world.py,sha256=K0UcmwXuhUxHslOpwQ7h_igIFY4G63ekdhI2RwTWQbE,260
|
174
174
|
arpakitlib/_arpakit_project_template_v_5/project/business_service/remove_operations.py,sha256=E2F8xonPeZovKKOHv-XDmsQUHvks8A6R89PVhF_pAQI,1780
|
175
175
|
arpakitlib/_arpakit_project_template_v_5/project/celery_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
176
176
|
arpakitlib/_arpakit_project_template_v_5/project/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
177
177
|
arpakitlib/_arpakit_project_template_v_5/project/core/cache_file_storage_in_dir.py,sha256=0lKPKvrs30DlAZwNS5ydPsQ9ETFLBjZqEcNv8LoQVCU,623
|
178
178
|
arpakitlib/_arpakit_project_template_v_5/project/core/const.py,sha256=hgiiPIYL9543-eEnNAhZWYgX7ZzLKjOqRD0skkROSOw,951
|
179
179
|
arpakitlib/_arpakit_project_template_v_5/project/core/dump_file_storage_in_dir.py,sha256=u3-vStMGaseMsRLuJmQK04UDhaez9vw6o5jyHb1fwNg,617
|
180
|
-
arpakitlib/_arpakit_project_template_v_5/project/core/easy_openai_api_client.py,sha256=
|
180
|
+
arpakitlib/_arpakit_project_template_v_5/project/core/easy_openai_api_client.py,sha256=ssQ8Ju6CBQeXSOa_lfLaqycSf0a-NIj6ucOhEsPseVc,1141
|
181
181
|
arpakitlib/_arpakit_project_template_v_5/project/core/jinja2_templates.py,sha256=jCNLaBauGC7YNvZdTLNHuPp7hmRGt94O23Skg6ewo7o,352
|
182
182
|
arpakitlib/_arpakit_project_template_v_5/project/core/media_file_storage_in_dir.py,sha256=fMofTsfJtA8pp5lEUhucEUu3PBsmj-elaRZzExDsdLI,623
|
183
183
|
arpakitlib/_arpakit_project_template_v_5/project/core/settings.py,sha256=ciIBp9xSGVpUIYRone_PSDvjMmkoeHfuMO3Q_3Q76EI,6589
|
184
|
-
arpakitlib/_arpakit_project_template_v_5/project/core/
|
184
|
+
arpakitlib/_arpakit_project_template_v_5/project/core/setup_logging.py,sha256=7VRejVMUNeR-MywrVw7B1RxVkIBHwVNQJFC4wlpBJco,1497
|
185
|
+
arpakitlib/_arpakit_project_template_v_5/project/core/util.py,sha256=iCwpuRqr6TfW0sKVH-3asQjhueJuad3ffq6sPI6ZUrs,347
|
185
186
|
arpakitlib/_arpakit_project_template_v_5/project/emailer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
186
|
-
arpakitlib/_arpakit_project_template_v_5/project/emailer/send_email.py,sha256=
|
187
|
-
arpakitlib/_arpakit_project_template_v_5/project/emailer/send_simple_email.py,sha256=
|
187
|
+
arpakitlib/_arpakit_project_template_v_5/project/emailer/send_email.py,sha256=U3DaXSB1y4bRClT8cODgUbV2sDNyqL55NFByQPJCAwI,2184
|
188
|
+
arpakitlib/_arpakit_project_template_v_5/project/emailer/send_simple_email.py,sha256=iOfx3h8rImsMqiqMqlKlOy0tnkRzT2IDdLAvKzcUsZ4,941
|
188
189
|
arpakitlib/_arpakit_project_template_v_5/project/json_db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
189
190
|
arpakitlib/_arpakit_project_template_v_5/project/json_db/json_db.py,sha256=tBML-z4Y7uY8f_0ggcxvlDNt15Sf93Jr_OUeHwWxqOA,724
|
190
191
|
arpakitlib/_arpakit_project_template_v_5/project/more/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -233,7 +234,7 @@ arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_7.py,sha256=xKS
|
|
233
234
|
arpakitlib/_arpakit_project_template_v_5/project/site/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
234
235
|
arpakitlib/_arpakit_project_template_v_5/project/site/asgi.py,sha256=uaRqA6QhXxDrYaNZil1USIIASRu0t5_hW0-DrbehF1g,82
|
235
236
|
arpakitlib/_arpakit_project_template_v_5/project/site/consts.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
236
|
-
arpakitlib/_arpakit_project_template_v_5/project/site/create_site_app.py,sha256=
|
237
|
+
arpakitlib/_arpakit_project_template_v_5/project/site/create_site_app.py,sha256=iqmZdvMM1kwfp-ba_0X5aoe50T_fYPdQESyAVsB8lZM,98
|
237
238
|
arpakitlib/_arpakit_project_template_v_5/project/site/event.py,sha256=bNe5LvPGRiKZoR1RuuPU3Qn6t9LIPvinRwo9xPENUPk,290
|
238
239
|
arpakitlib/_arpakit_project_template_v_5/project/site/exception_handler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
239
240
|
arpakitlib/_arpakit_project_template_v_5/project/site/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -242,17 +243,17 @@ arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/__init__.py,sha256=47
|
|
242
243
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/add_admin_in_app.py,sha256=JTXLf18DQVsZtoe6yFpZIVJI95rgJofnTe9YKyVwwhQ,851
|
243
244
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/admin_authorize.py,sha256=eIJ-oG8-piqSsnEPN3aJT_U5XOnxL7ZW3BCbLfVKS-E,5349
|
244
245
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/asgi.py,sha256=DRlRPkcOGXOccfP73oKEXolZTsc5VWdQgEG-qoW03ms,99
|
245
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/create_sqladmin_app.py,sha256=
|
246
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/create_sqladmin_app.py,sha256=JGCHgqJJvAjpc8xnbXPqCeUiLeKO7eo6OA6uPYzzqlk,1308
|
246
247
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/event.py,sha256=LjAUYNlsX9Sj_QLMzYuTQbbYYbIMHhbsSjTXt-G7lOE,849
|
247
248
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/__init__.py,sha256=dc_swzjkRDj85SWQ3cGGgsrp_cq5evUYQYUg0g7C5nw,435
|
248
249
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/api_key.py,sha256=VTpepKLCKrPnftGD-8Ibp75S0dwUrLlUytRfcXDDcKg,1597
|
249
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py,sha256=
|
250
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py,sha256=s8mmdwb5eRcdNM_lZpj2UOhvc1ckRhUubjniQ-dDIK0,2504
|
250
251
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/operation.py,sha256=KUC-EZYFlLca92b6PwI0l5leOT8DzjlWm6y-a0PCvQc,3234
|
251
252
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/story_log.py,sha256=EePtnFQsDKvhHcPYQU4ahgo24jC6uBZkuzu2alrTviE,2180
|
252
253
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py,sha256=AbD0QPbAkwOE3i9aDirVBrIntQBCrU1xwX2IZlMS8Rk,2576
|
253
254
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user_token.py,sha256=pyeyDTg4rss8-67hIE3-SQlAvNfje6HazuaVnyFBpN8,2054
|
254
255
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/verification_code.py,sha256=8dfmXKVsmLNf6Id6Ql52uVaZuQtqNCq5nJgBOv3N66A,2883
|
255
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/start_sqladmin.py,sha256=
|
256
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/start_sqladmin.py,sha256=jaAOq7Kf7HYziJslWbjqzr41kX4dJ9CXDPtMXj8rWok,384
|
256
257
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
257
258
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/util/etc.py,sha256=jm65ZB0K8e6WpgcL2Y6pxcIuQjioIyMtBIOOFbbWfgk,1070
|
258
259
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -270,7 +271,7 @@ arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/util/__init__.py
|
|
270
271
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/util/execute_func_with_story_log.py,sha256=HrDlG8Y1gbMNVIuDHvCndXbnp8vxc8T8l-_XBVn7zR8,6091
|
271
272
|
arpakitlib/_arpakit_project_template_v_5/project/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
272
273
|
arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_api_keys.py,sha256=9F2bMfymaqx_Czh_tF945BKpKqNrVNjSIfCQl13Dkxw,911
|
273
|
-
arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_1.py,sha256=
|
274
|
+
arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_1.py,sha256=KaRXJmT8yfE7MrfmnWO08LnAa3lrR0UsxzI9f4AKfGI,2255
|
274
275
|
arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_2.py,sha256=VcCvxRLA0XnLaQcsaoZkIVV8rTO3uMyLTYoEsdxKtYE,416
|
275
276
|
arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_3.py,sha256=9QJTgM4qsJXPgFhfVueQ9vObXr_dAldzP_p8dPO42uA,416
|
276
277
|
arpakitlib/_arpakit_project_template_v_5/project/test_data/make_test_data_4.py,sha256=OyU9601WACF7cCpPT33x6CpizNJeQIPDDFezIvEO01A,416
|
@@ -344,7 +345,7 @@ arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/start.py,s
|
|
344
345
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/support.py,sha256=MCvb-yJCBrJWBoESdU2X8Uft50oxEVe_m5YhZ_oHY4M,1096
|
345
346
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/voice_.py,sha256=XscGPPQ__1QoWmQcSLtR3XU94KHfxjMYGiL2khsX1Eg,645
|
346
347
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/main_router.py,sha256=5r9wZLjhxWTL89I_NF8NUwcMcBkyOQR7IRw9y4gWXWY,2435
|
347
|
-
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/start_tg_bot.py,sha256=
|
348
|
+
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/start_tg_bot.py,sha256=7sy0Jx_UhvRmKkt_pXvig2bBW6zDo_ksFQpUysxBYc0,1262
|
348
349
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
349
350
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/state/admin.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
350
351
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/state/client.py,sha256=B1mslhGJEibHDS-YHtWncAnd3UVeyzJmVsdQK4UAzB4,119
|
@@ -354,15 +355,15 @@ arpakitlib/_arpakit_project_template_v_5/project/tg_bot/tg_bot.py,sha256=jMX_awQ
|
|
354
355
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/tg_bot_dispatcher.py,sha256=1uxUooMhkDzUVHrHZgWU-SqwElh9KETgD5JtkkV4wAs,653
|
355
356
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
356
357
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/etc.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
357
|
-
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/notify_admins.py,sha256=
|
358
|
-
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/set_tg_bot_commands.py,sha256=
|
358
|
+
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/notify_admins.py,sha256=SB_HSjG2IMc54l40_E_RMxUDonAARcTIEHLffqSKIyA,2105
|
359
|
+
arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/set_tg_bot_commands.py,sha256=auqsJMk2LwUeSXVWDWh4kEkb4Ty7aSyfllDrlHpKDwc,3498
|
359
360
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot_notifier/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
360
361
|
arpakitlib/_arpakit_project_template_v_5/project/tg_bot_notifier/blank.py,sha256=0rspOC-xS9qdQ58pAJI-tNTgbylQIXCrEr79MMgvU1k,406
|
361
|
-
arpakitlib/_arpakit_project_template_v_5/project/tg_bot_notifier/tg_bot_notifier.py,sha256=
|
362
|
+
arpakitlib/_arpakit_project_template_v_5/project/tg_bot_notifier/tg_bot_notifier.py,sha256=SWbzhwiMlkPpmO61AWCCyg8Wpbfgt8nOInqrIELbAZI,1561
|
362
363
|
arpakitlib/_arpakit_project_template_v_5/project/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
363
364
|
arpakitlib/_arpakit_project_template_v_5/project/util/arpakitlib_project_template_util.py,sha256=syA_IuszHVub0zm0sVdB4_7rPJXwXRW4JmQ4qHbjXPk,396
|
364
365
|
arpakitlib/_arpakit_project_template_v_5/project/util/etc.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
365
|
-
arpakitlib/_arpakit_project_template_v_5/project/util/send_email_.py,sha256=
|
366
|
+
arpakitlib/_arpakit_project_template_v_5/project/util/send_email_.py,sha256=AZ2PHRQh-l7H3WLxgxygEKD8c_WPguIq4weP2zqfF9I,4748
|
366
367
|
arpakitlib/_arpakit_project_template_v_5/todo.txt,sha256=q132Jbx229ThY77S3YiN-Cj5AVm7k1VlJcMYIbZUHUY,3
|
367
368
|
arpakitlib/ar_additional_model_util.py,sha256=GFg-glLCxH9X95R2bhTJsscVwv37FgE1qbaAAyXrnIE,917
|
368
369
|
arpakitlib/ar_aiogram_util.py,sha256=4bizX5Xg-E2-r2TXXGQGanJozsIWPVf5luO3vKUN8p8,8471
|
@@ -393,7 +394,7 @@ arpakitlib/ar_json_util.py,sha256=jnVfpQ6QSDq8NgIlh_6ZzXDveOiybr7QSQkXutE7d2s,26
|
|
393
394
|
arpakitlib/ar_jwt_util.py,sha256=Rhm4ywoTAn6yOV8NLjDASfAtAtheROxxDP40G3XjnuQ,761
|
394
395
|
arpakitlib/ar_list_of_dicts_to_xlsx.py,sha256=MyjEl4Jl4beLVZqLVQMMv0-XDtBD3Xh4Z_ZPDJeFu04,745
|
395
396
|
arpakitlib/ar_list_util.py,sha256=2woOAHAU8oTIiVjZ8GLnx15odEaoQUq3Q0JPxlufFF0,457
|
396
|
-
arpakitlib/ar_logging_util.py,sha256=
|
397
|
+
arpakitlib/ar_logging_util.py,sha256=teqLzOkY-toeOAWtsGnW3iIfrR0NwG7jJ-dBzPrFUvU,1667
|
397
398
|
arpakitlib/ar_mongodb_util.py,sha256=2ECkTnGAZ92qxioL-fmN6R4yZOSr3bXdXLWTzT1C3vk,4038
|
398
399
|
arpakitlib/ar_need_type_util.py,sha256=XmY1kswz8j9oo5f9CxRu0_zgfvxWrXPYKOj6MM04sGk,2604
|
399
400
|
arpakitlib/ar_openai_api_client_util.py,sha256=dWgsSPXtxNBxS5VRi_NharGQrUXF_YjIfhU3Bj5cW9M,5651
|
@@ -407,12 +408,11 @@ arpakitlib/ar_settings_util.py,sha256=Y5wi_cmsjDjfJpM0VJHjbo0NoVPKfypKaD1USowwDt
|
|
407
408
|
arpakitlib/ar_sleep_util.py,sha256=ggaj7ML6QK_ADsHMcyu6GUmUpQ_9B9n-SKYH17h-9lM,1045
|
408
409
|
arpakitlib/ar_sqladmin_util.py,sha256=Jd33EX_fAso4bvrcDhNEYOUlUHkudbadNGOJDg7rqhQ,301
|
409
410
|
arpakitlib/ar_sqlalchemy_util.py,sha256=w_tGPTWIMVjHkTEYo9tVe1sfK_4vvfd3zGATLiYC2J4,11775
|
410
|
-
arpakitlib/ar_ssh_runner_util.py,sha256=yvAwza480MkHKvLkDEsR7JNh2bYNs6P9rCVo4NA85NE,6865
|
411
411
|
arpakitlib/ar_str_util.py,sha256=2lGpnXDf2h1cBZpVf5i1tX_HCv5iBd6IGnrCw4QWWlY,4350
|
412
412
|
arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,4049
|
413
413
|
arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrIMsdpNK-AUlm0,5347
|
414
|
-
arpakitlib-1.8.
|
415
|
-
arpakitlib-1.8.
|
416
|
-
arpakitlib-1.8.
|
417
|
-
arpakitlib-1.8.
|
418
|
-
arpakitlib-1.8.
|
414
|
+
arpakitlib-1.8.173.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
415
|
+
arpakitlib-1.8.173.dist-info/METADATA,sha256=Ep4MVqwFvmYqwbsCKamEDUZZcCHCC0RXtBODLkZHivk,3706
|
416
|
+
arpakitlib-1.8.173.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
417
|
+
arpakitlib-1.8.173.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
418
|
+
arpakitlib-1.8.173.dist-info/RECORD,,
|
arpakitlib/ar_ssh_runner_util.py
DELETED
@@ -1,266 +0,0 @@
|
|
1
|
-
# arpakit
|
2
|
-
|
3
|
-
from __future__ import annotations
|
4
|
-
|
5
|
-
import asyncio
|
6
|
-
import logging
|
7
|
-
from datetime import timedelta
|
8
|
-
from typing import Optional, Any
|
9
|
-
|
10
|
-
import asyncssh
|
11
|
-
import paramiko
|
12
|
-
from pydantic import BaseModel
|
13
|
-
|
14
|
-
from arpakitlib.ar_json_util import transfer_data_to_json_str
|
15
|
-
|
16
|
-
_ARPAKIT_LIB_MODULE_VERSION = "3.0"
|
17
|
-
|
18
|
-
|
19
|
-
class SSHRunTimeouts:
|
20
|
-
fast_command = timedelta(minutes=0, seconds=15).total_seconds()
|
21
|
-
medium_command = timedelta(minutes=2, seconds=30).total_seconds()
|
22
|
-
long_command = timedelta(minutes=5, seconds=0).total_seconds()
|
23
|
-
|
24
|
-
|
25
|
-
class SSHBaseErr(Exception):
|
26
|
-
pass
|
27
|
-
|
28
|
-
|
29
|
-
class SSHCannotConnect(SSHBaseErr):
|
30
|
-
pass
|
31
|
-
|
32
|
-
|
33
|
-
class SSHCannotRun(SSHBaseErr):
|
34
|
-
pass
|
35
|
-
|
36
|
-
|
37
|
-
class SSHRunResHasErr(SSHBaseErr):
|
38
|
-
|
39
|
-
def __init__(self, ssh_run_res: SSHRunRes):
|
40
|
-
self.ssh_run_res = ssh_run_res
|
41
|
-
|
42
|
-
def __repr__(self):
|
43
|
-
return f"return_code={self.ssh_run_res.return_code}, stderr={self.ssh_run_res.err.strip()}"
|
44
|
-
|
45
|
-
def __str__(self):
|
46
|
-
return f"return_code={self.ssh_run_res.return_code}, stderr={self.ssh_run_res.err.strip()}"
|
47
|
-
|
48
|
-
|
49
|
-
class SSHRunRes(BaseModel):
|
50
|
-
out: str
|
51
|
-
err: str
|
52
|
-
return_code: int | None = None
|
53
|
-
|
54
|
-
def simple_dict(self) -> dict[str, Any]:
|
55
|
-
return {
|
56
|
-
"out": self.out,
|
57
|
-
"err": self.err,
|
58
|
-
"return_code": self.return_code,
|
59
|
-
"has_bad_return_code": self.has_bad_return_code,
|
60
|
-
"has_err": self.has_err
|
61
|
-
}
|
62
|
-
|
63
|
-
def simple_json(self) -> str:
|
64
|
-
return transfer_data_to_json_str(
|
65
|
-
self.simple_dict(),
|
66
|
-
beautify=True,
|
67
|
-
fast=False
|
68
|
-
)
|
69
|
-
|
70
|
-
def __repr__(self) -> str:
|
71
|
-
return self.simple_json()
|
72
|
-
|
73
|
-
def __str__(self) -> str:
|
74
|
-
return self.simple_json()
|
75
|
-
|
76
|
-
@property
|
77
|
-
def has_bad_return_code(self) -> bool:
|
78
|
-
if self.return_code is None:
|
79
|
-
return False
|
80
|
-
return self.return_code != 0
|
81
|
-
|
82
|
-
@property
|
83
|
-
def has_err(self) -> bool:
|
84
|
-
if self.err:
|
85
|
-
return True
|
86
|
-
return False
|
87
|
-
|
88
|
-
def raise_for_bad_return_code(self):
|
89
|
-
if self.has_bad_return_code:
|
90
|
-
raise SSHRunResHasErr(ssh_run_res=self)
|
91
|
-
|
92
|
-
def raise_for_err(self):
|
93
|
-
if self.has_err:
|
94
|
-
raise SSHRunResHasErr(ssh_run_res=self)
|
95
|
-
|
96
|
-
|
97
|
-
class SSHRunner:
|
98
|
-
|
99
|
-
def __init__(
|
100
|
-
self,
|
101
|
-
*,
|
102
|
-
hostname: str,
|
103
|
-
port: int = 22,
|
104
|
-
username: str = "root",
|
105
|
-
password: Optional[str] = None,
|
106
|
-
base_timeout: int = timedelta(seconds=5).total_seconds()
|
107
|
-
):
|
108
|
-
self.hostname = hostname
|
109
|
-
self.port = port
|
110
|
-
self.username = username
|
111
|
-
self.password = password
|
112
|
-
|
113
|
-
self.base_timeout = base_timeout
|
114
|
-
|
115
|
-
self._logger = logging.getLogger(
|
116
|
-
f"{logging.getLogger(self.__class__.__name__)} - {self.username}@{self.hostname}:{self.port}"
|
117
|
-
)
|
118
|
-
|
119
|
-
self.async_conn: Optional[asyncssh.SSHClientConnection] = None
|
120
|
-
|
121
|
-
self.sync_client = paramiko.SSHClient()
|
122
|
-
self.sync_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
123
|
-
|
124
|
-
"""SYNC"""
|
125
|
-
|
126
|
-
def sync_connect(self) -> SSHRunner:
|
127
|
-
try:
|
128
|
-
self.sync_client.connect(
|
129
|
-
hostname=self.hostname,
|
130
|
-
username=self.username,
|
131
|
-
password=self.password,
|
132
|
-
port=self.port,
|
133
|
-
timeout=self.base_timeout,
|
134
|
-
auth_timeout=self.base_timeout,
|
135
|
-
banner_timeout=self.base_timeout,
|
136
|
-
channel_timeout=self.base_timeout
|
137
|
-
)
|
138
|
-
except Exception as err:
|
139
|
-
raise SSHCannotConnect(err)
|
140
|
-
return self
|
141
|
-
|
142
|
-
def sync_check_connection(self):
|
143
|
-
self.sync_connect()
|
144
|
-
|
145
|
-
def sync_is_conn_good(self) -> bool:
|
146
|
-
try:
|
147
|
-
self.sync_check_connection()
|
148
|
-
except SSHCannotConnect:
|
149
|
-
return False
|
150
|
-
return True
|
151
|
-
|
152
|
-
def sync_run(
|
153
|
-
self,
|
154
|
-
command: str,
|
155
|
-
*,
|
156
|
-
timeout: float | None = SSHRunTimeouts.medium_command,
|
157
|
-
raise_for_bad_return_code: bool = True
|
158
|
-
) -> SSHRunRes:
|
159
|
-
if timeout is None:
|
160
|
-
timeout = self.base_timeout
|
161
|
-
|
162
|
-
self._logger.info(command)
|
163
|
-
|
164
|
-
self.sync_connect()
|
165
|
-
|
166
|
-
try:
|
167
|
-
stdin, stdout, stderr = self.sync_client.exec_command(
|
168
|
-
command=command,
|
169
|
-
timeout=timeout
|
170
|
-
)
|
171
|
-
return_code = stdout.channel.recv_exit_status()
|
172
|
-
stdout = stdout.read().decode()
|
173
|
-
stderr = stderr.read().decode()
|
174
|
-
except Exception as err:
|
175
|
-
raise SSHCannotRun(err)
|
176
|
-
|
177
|
-
ssh_run_res = SSHRunRes(
|
178
|
-
out=stdout,
|
179
|
-
err=stderr,
|
180
|
-
return_code=return_code
|
181
|
-
)
|
182
|
-
if raise_for_bad_return_code is True:
|
183
|
-
ssh_run_res.raise_for_bad_return_code()
|
184
|
-
|
185
|
-
return ssh_run_res
|
186
|
-
|
187
|
-
def sync_close(self):
|
188
|
-
self.sync_client.close()
|
189
|
-
|
190
|
-
"""ASYNC SYNC"""
|
191
|
-
|
192
|
-
async def async_connect(self) -> SSHRunner:
|
193
|
-
if self.async_conn is None:
|
194
|
-
try:
|
195
|
-
self.async_conn = await asyncssh.connect(
|
196
|
-
host=self.hostname,
|
197
|
-
username=self.username,
|
198
|
-
password=self.password,
|
199
|
-
port=self.port,
|
200
|
-
connect_timeout=self.base_timeout,
|
201
|
-
known_hosts=None
|
202
|
-
)
|
203
|
-
except Exception as err:
|
204
|
-
raise SSHCannotConnect(err)
|
205
|
-
return self
|
206
|
-
|
207
|
-
async def async_check_connection(self):
|
208
|
-
await self.async_connect()
|
209
|
-
|
210
|
-
async def async_is_conn_good(self) -> bool:
|
211
|
-
try:
|
212
|
-
await self.async_check_connection()
|
213
|
-
except SSHCannotConnect:
|
214
|
-
return False
|
215
|
-
return True
|
216
|
-
|
217
|
-
async def async_run(
|
218
|
-
self,
|
219
|
-
command: str,
|
220
|
-
*,
|
221
|
-
timeout: float | None = SSHRunTimeouts.medium_command,
|
222
|
-
raise_for_bad_return_code: bool = True
|
223
|
-
) -> SSHRunRes:
|
224
|
-
if timeout is None:
|
225
|
-
timeout = self.base_timeout
|
226
|
-
|
227
|
-
self._logger.info(command)
|
228
|
-
|
229
|
-
await self.async_connect()
|
230
|
-
|
231
|
-
try:
|
232
|
-
result: asyncssh.SSHCompletedProcess = await self.async_conn.run(
|
233
|
-
command,
|
234
|
-
check=False,
|
235
|
-
timeout=timeout
|
236
|
-
)
|
237
|
-
except Exception as err:
|
238
|
-
raise SSHCannotRun(err)
|
239
|
-
|
240
|
-
ssh_run_res = SSHRunRes(
|
241
|
-
out=result.stdout,
|
242
|
-
err=result.stderr,
|
243
|
-
return_code=result.returncode
|
244
|
-
)
|
245
|
-
if raise_for_bad_return_code is True:
|
246
|
-
ssh_run_res.raise_for_bad_return_code()
|
247
|
-
|
248
|
-
return ssh_run_res
|
249
|
-
|
250
|
-
def async_close(self):
|
251
|
-
if self.async_conn is not None:
|
252
|
-
self.async_conn.close()
|
253
|
-
self.async_conn = None
|
254
|
-
|
255
|
-
|
256
|
-
def __example():
|
257
|
-
pass
|
258
|
-
|
259
|
-
|
260
|
-
async def __async_example():
|
261
|
-
pass
|
262
|
-
|
263
|
-
|
264
|
-
if __name__ == '__main__':
|
265
|
-
__example()
|
266
|
-
asyncio.run(__async_example())
|
File without changes
|
File without changes
|
File without changes
|