arpakitlib 1.8.106__py3-none-any.whl → 1.8.107__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. arpakitlib/_arpakit_project_template_v_5/project/api/authorize.py +5 -4
  2. arpakitlib/_arpakit_project_template_v_5/project/api/create_api_app.py +1 -0
  3. arpakitlib/_arpakit_project_template_v_5/project/api/exception.py +1 -0
  4. arpakitlib/_arpakit_project_template_v_5/project/api/exception_handler.py +1 -0
  5. arpakitlib/_arpakit_project_template_v_5/project/api/response.py +1 -0
  6. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/clear_log_file.py +2 -1
  7. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/create_operation.py +1 -0
  8. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_arpakitlib_project_template_info.py +1 -0
  9. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_auth_data.py +2 -1
  10. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_log_file.py +2 -1
  11. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_operation.py +2 -1
  12. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_settings.py +1 -0
  13. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_sqlalchemy_db_table_name_to_amount.py +1 -0
  14. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_story_log.py +2 -1
  15. arpakitlib/_arpakit_project_template_v_5/project/api/router/admin/get_user.py +2 -1
  16. arpakitlib/_arpakit_project_template_v_5/project/api/router/client/get_current_user.py +2 -1
  17. arpakitlib/_arpakit_project_template_v_5/project/api/router/client/get_current_user_token.py +1 -0
  18. arpakitlib/_arpakit_project_template_v_5/project/api/router/general/healthcheck.py +2 -1
  19. arpakitlib/_arpakit_project_template_v_5/project/api/router/general/now_utc_datetime.py +2 -1
  20. arpakitlib/_arpakit_project_template_v_5/project/core/jinja2_templates.py +1 -0
  21. arpakitlib/_arpakit_project_template_v_5/project/core/settings.py +3 -2
  22. arpakitlib/_arpakit_project_template_v_5/project/operation_execution/operation_executor_worker.py +2 -1
  23. arpakitlib/_arpakit_project_template_v_5/project/operation_execution/scheduled_operations.py +3 -2
  24. arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/api_key.py +2 -1
  25. arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/common.py +3 -2
  26. arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/operation.py +3 -2
  27. arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py +2 -1
  28. arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py +2 -1
  29. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/admin.py +2 -1
  30. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/blank/client.py +1 -0
  31. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/{callback → callback_data_}/admin.py +1 -1
  32. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/callback_data_/client.py +5 -0
  33. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/event.py +1 -0
  34. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/filter_/message_text.py +1 -0
  35. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/kb/inline_/admin/hello_world.py +1 -1
  36. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/middleware/common.py +2 -1
  37. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/middleware/init_user.py +1 -0
  38. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/hello_world.py +1 -1
  39. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_old_cd.py +1 -1
  40. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_raise_error.py +1 -1
  41. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/kb_with_remove_message.py +1 -1
  42. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/admin/log_file.py +1 -0
  43. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/about.py +1 -0
  44. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/author.py +1 -0
  45. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/cancel.py +1 -0
  46. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/error_handler.py +1 -0
  47. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/raw_callback_query.py +1 -0
  48. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/remove_message.py +2 -1
  49. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/start.py +1 -0
  50. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/router/client/support.py +1 -0
  51. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/start_tg_bot.py +1 -0
  52. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/tg_bot.py +1 -0
  53. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/notify_admins.py +2 -1
  54. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/util/set_tg_bot_commands.py +1 -0
  55. arpakitlib/_arpakit_project_template_v_5/todo.txt +1 -0
  56. arpakitlib/ar_base64_util.py +15 -1
  57. arpakitlib/ar_openai_api_client_util.py +106 -35
  58. {arpakitlib-1.8.106.dist-info → arpakitlib-1.8.107.dist-info}/METADATA +1 -1
  59. {arpakitlib-1.8.106.dist-info → arpakitlib-1.8.107.dist-info}/RECORD +64 -63
  60. arpakitlib/_arpakit_project_template_v_5/project/tg_bot/callback/client.py +0 -5
  61. /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/{callback → callback_data_}/__init__.py +0 -0
  62. /arpakitlib/_arpakit_project_template_v_5/project/tg_bot/{callback → callback_data_}/common.py +0 -0
  63. {arpakitlib-1.8.106.dist-info → arpakitlib-1.8.107.dist-info}/LICENSE +0 -0
  64. {arpakitlib-1.8.106.dist-info → arpakitlib-1.8.107.dist-info}/WHEEL +0 -0
  65. {arpakitlib-1.8.106.dist-info → arpakitlib-1.8.107.dist-info}/entry_points.txt +0 -0
@@ -5,17 +5,18 @@ import fastapi.exceptions
5
5
  import fastapi.responses
6
6
  import fastapi.security
7
7
  import sqlalchemy
8
- from arpakitlib.ar_func_util import is_async_func, is_sync_func
9
- from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
10
8
  from fastapi import Security
11
9
  from fastapi.security import APIKeyHeader
10
+ from pydantic import BaseModel, ConfigDict
11
+ from sqlalchemy.orm import joinedload
12
+
13
+ from arpakitlib.ar_func_util import is_async_func, is_sync_func
14
+ from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
12
15
  from project.api.const import APIErrorCodes
13
16
  from project.api.exception import APIException
14
17
  from project.core.settings import get_cached_settings
15
18
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
16
19
  from project.sqlalchemy_db_.sqlalchemy_model import ApiKeyDBM, UserTokenDBM
17
- from pydantic import BaseModel, ConfigDict
18
- from sqlalchemy.orm import joinedload
19
20
 
20
21
 
21
22
  class APIAuthorizeData(BaseModel):
@@ -5,6 +5,7 @@ import starlette.types
5
5
  from fastapi import FastAPI
6
6
  from fastapi.middleware.cors import CORSMiddleware
7
7
  from fastapi.staticfiles import StaticFiles
8
+
8
9
  from project.api.event import get_startup_api_events, get_shutdown_api_events
9
10
  from project.api.exception_handler import add_exception_handler_to_api_app
10
11
  from project.api.openapi_ui import add_local_openapi_ui_to_api_app
@@ -1,6 +1,7 @@
1
1
  from typing import Any
2
2
 
3
3
  import fastapi.security
4
+
4
5
  from project.api.const import APIErrorCodes
5
6
  from project.api.schema.out.common.error import ErrorCommonSO
6
7
 
@@ -6,6 +6,7 @@ from typing import Any, Callable
6
6
 
7
7
  import fastapi
8
8
  import starlette.exceptions
9
+
9
10
  from arpakitlib.ar_datetime_util import now_utc_dt
10
11
  from arpakitlib.ar_dict_util import combine_dicts
11
12
  from arpakitlib.ar_exception_util import exception_to_traceback_str
@@ -1,6 +1,7 @@
1
1
  from typing import Any
2
2
 
3
3
  import fastapi
4
+
4
5
  from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
5
6
  from project.api.schema.common import BaseSO
6
7
 
@@ -1,6 +1,7 @@
1
1
  import fastapi
2
- from arpakitlib.ar_logging_util import init_log_file
3
2
  from fastapi import APIRouter
3
+
4
+ from arpakitlib.ar_logging_util import init_log_file
4
5
  from project.api.authorize import require_api_key_dbm_api_authorize_middleware, APIAuthorizeData, \
5
6
  require_user_token_dbm_api_authorize_middleware, api_authorize
6
7
  from project.api.schema.out.common.error import ErrorCommonSO
@@ -2,6 +2,7 @@ from typing import Any
2
2
 
3
3
  import fastapi
4
4
  from fastapi import APIRouter
5
+
5
6
  from project.api.authorize import require_api_key_dbm_api_authorize_middleware, \
6
7
  require_user_token_dbm_api_authorize_middleware, APIAuthorizeData, api_authorize
7
8
  from project.api.schema.common import BaseSI
@@ -2,6 +2,7 @@ from typing import Any
2
2
 
3
3
  import fastapi
4
4
  from fastapi import APIRouter
5
+
5
6
  from project.api.authorize import require_user_token_dbm_api_authorize_middleware, APIAuthorizeData, \
6
7
  api_authorize, require_api_key_dbm_api_authorize_middleware
7
8
  from project.api.schema.out.common.error import ErrorCommonSO
@@ -1,8 +1,9 @@
1
1
  from typing import Any
2
2
 
3
3
  import fastapi.requests
4
- from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
5
4
  from fastapi import APIRouter
5
+
6
+ from arpakitlib.ar_json_util import transfer_data_to_json_str_to_data
6
7
  from project.api.authorize import APIAuthorizeData, api_authorize, require_user_token_dbm_api_authorize_middleware, \
7
8
  require_api_key_dbm_api_authorize_middleware
8
9
  from project.api.schema.out.common.error import ErrorCommonSO
@@ -1,6 +1,7 @@
1
1
  import fastapi
2
- from arpakitlib.ar_logging_util import init_log_file
3
2
  from fastapi import APIRouter
3
+
4
+ from arpakitlib.ar_logging_util import init_log_file
4
5
  from project.api.authorize import require_api_key_dbm_api_authorize_middleware, APIAuthorizeData, \
5
6
  require_user_token_dbm_api_authorize_middleware, api_authorize
6
7
  from project.core.settings import get_cached_settings
@@ -1,7 +1,8 @@
1
1
  import fastapi.requests
2
2
  import sqlalchemy
3
- from arpakitlib.ar_str_util import strip_if_not_none, make_none_if_blank
4
3
  from fastapi import APIRouter
4
+
5
+ from arpakitlib.ar_str_util import strip_if_not_none, make_none_if_blank
5
6
  from project.api.authorize import APIAuthorizeData, api_authorize, require_user_token_dbm_api_authorize_middleware, \
6
7
  require_api_key_dbm_api_authorize_middleware
7
8
  from project.api.schema.out.admin.operation import Operation1AdminSO
@@ -2,6 +2,7 @@ from typing import Any
2
2
 
3
3
  import fastapi.requests
4
4
  from fastapi import APIRouter
5
+
5
6
  from project.api.authorize import APIAuthorizeData, api_authorize, require_api_key_dbm_api_authorize_middleware, \
6
7
  require_user_token_dbm_api_authorize_middleware
7
8
  from project.api.schema.out.common.error import ErrorCommonSO
@@ -2,6 +2,7 @@ from typing import Any
2
2
 
3
3
  import fastapi
4
4
  from fastapi import APIRouter
5
+
5
6
  from project.api.authorize import require_user_token_dbm_api_authorize_middleware, APIAuthorizeData, \
6
7
  api_authorize, require_api_key_dbm_api_authorize_middleware
7
8
  from project.api.schema.out.common.error import ErrorCommonSO
@@ -1,7 +1,8 @@
1
1
  import fastapi.requests
2
2
  import sqlalchemy
3
- from arpakitlib.ar_str_util import make_none_if_blank, strip_if_not_none
4
3
  from fastapi import APIRouter
4
+
5
+ from arpakitlib.ar_str_util import make_none_if_blank, strip_if_not_none
5
6
  from project.api.authorize import APIAuthorizeData, api_authorize, require_user_token_dbm_api_authorize_middleware, \
6
7
  require_api_key_dbm_api_authorize_middleware
7
8
  from project.api.schema.out.admin.story_log import StoryLog1AdminSO
@@ -1,7 +1,8 @@
1
1
  import fastapi.requests
2
2
  import sqlalchemy
3
- from arpakitlib.ar_str_util import strip_if_not_none, make_none_if_blank
4
3
  from fastapi import APIRouter
4
+
5
+ from arpakitlib.ar_str_util import strip_if_not_none, make_none_if_blank
5
6
  from project.api.authorize import APIAuthorizeData, api_authorize, require_user_token_dbm_api_authorize_middleware, \
6
7
  require_api_key_dbm_api_authorize_middleware
7
8
  from project.api.schema.out.admin.user import User1AdminSO
@@ -3,13 +3,14 @@ from __future__ import annotations
3
3
  import fastapi.requests
4
4
  import sqlalchemy
5
5
  from fastapi import APIRouter
6
+ from sqlalchemy.orm import joinedload
7
+
6
8
  from project.api.authorize import APIAuthorizeData, api_authorize, require_user_token_dbm_api_authorize_middleware, \
7
9
  require_api_key_dbm_api_authorize_middleware
8
10
  from project.api.schema.out.client.complicated_user_1 import ComplicatedUser1ClientSO
9
11
  from project.api.schema.out.common.error import ErrorCommonSO
10
12
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
11
13
  from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
12
- from sqlalchemy.orm import joinedload
13
14
 
14
15
  api_router = APIRouter()
15
16
 
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import fastapi.requests
4
4
  from fastapi import APIRouter
5
+
5
6
  from project.api.authorize import APIAuthorizeData, api_authorize, require_user_token_dbm_api_authorize_middleware, \
6
7
  require_api_key_dbm_api_authorize_middleware
7
8
  from project.api.schema.out.client.complicated_user_token_1 import ComplicatedUserToken1ClientSO
@@ -1,8 +1,9 @@
1
1
  import datetime as dt
2
2
 
3
3
  import fastapi
4
- from arpakitlib.ar_datetime_util import now_utc_dt
5
4
  from fastapi import APIRouter
5
+
6
+ from arpakitlib.ar_datetime_util import now_utc_dt
6
7
  from project.api.schema.common import BaseSO
7
8
  from project.api.schema.out.common.error import ErrorCommonSO
8
9
 
@@ -1,6 +1,7 @@
1
1
  import fastapi
2
- from arpakitlib.ar_datetime_util import now_utc_dt
3
2
  from fastapi import APIRouter
3
+
4
+ from arpakitlib.ar_datetime_util import now_utc_dt
4
5
  from project.api.authorize import require_api_key_dbm_api_authorize_middleware, APIAuthorizeData, api_authorize
5
6
  from project.api.schema.out.common.datetime_ import DatetimeCommonSO
6
7
  from project.api.schema.out.common.error import ErrorCommonSO
@@ -1,6 +1,7 @@
1
1
  from functools import lru_cache
2
2
 
3
3
  from fastapi.templating import Jinja2Templates
4
+
4
5
  from project.core.const import ProjectPaths
5
6
 
6
7
 
@@ -3,13 +3,14 @@ from functools import lru_cache
3
3
  from typing import Any
4
4
 
5
5
  import pytz
6
+ from pydantic import field_validator
7
+ from pydantic_core.core_schema import ValidationInfo
8
+
6
9
  from arpakitlib.ar_json_util import transfer_data_to_json_str
7
10
  from arpakitlib.ar_settings_util import SimpleSettings
8
11
  from arpakitlib.ar_sqlalchemy_util import generate_sqlalchemy_url
9
12
  from arpakitlib.ar_type_util import raise_for_type
10
13
  from project.core.const import ProjectPaths
11
- from pydantic import field_validator
12
- from pydantic_core.core_schema import ValidationInfo
13
14
 
14
15
 
15
16
  class Settings(SimpleSettings):
@@ -5,6 +5,8 @@ from datetime import timedelta
5
5
  from typing import Any
6
6
 
7
7
  import sqlalchemy
8
+ from sqlalchemy import asc
9
+
8
10
  from arpakitlib.ar_base_worker_util import BaseWorker
9
11
  from arpakitlib.ar_datetime_util import now_utc_dt
10
12
  from arpakitlib.ar_dict_util import combine_dicts
@@ -13,7 +15,6 @@ from arpakitlib.ar_sqlalchemy_util import SQLAlchemyDb
13
15
  from arpakitlib.ar_type_util import raise_for_type
14
16
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
15
17
  from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM, StoryLogDBM
16
- from sqlalchemy import asc
17
18
 
18
19
 
19
20
  class OperationExecutorWorker(BaseWorker):
@@ -1,11 +1,12 @@
1
1
  from datetime import timedelta
2
2
  from typing import Any, Callable
3
3
 
4
- from project.operation_execution.util import every_timedelta_is_time_func
5
- from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
6
4
  from pydantic import ConfigDict
7
5
  from pydantic.v1 import BaseModel
8
6
 
7
+ from project.operation_execution.util import every_timedelta_is_time_func
8
+ from project.sqlalchemy_db_.sqlalchemy_model import OperationDBM
9
+
9
10
 
10
11
  class ScheduledOperation(BaseModel):
11
12
  model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, from_attributes=True)
@@ -4,10 +4,11 @@ from typing import TYPE_CHECKING
4
4
  from uuid import uuid4
5
5
 
6
6
  import sqlalchemy
7
+ from sqlalchemy.orm import Mapped, mapped_column, validates
8
+
7
9
  from arpakitlib.ar_datetime_util import now_utc_dt
8
10
  from arpakitlib.ar_str_util import make_none_if_blank
9
11
  from project.sqlalchemy_db_.sqlalchemy_model.common import SimpleDBM
10
- from sqlalchemy.orm import Mapped, mapped_column, validates
11
12
 
12
13
  if TYPE_CHECKING:
13
14
  pass
@@ -3,11 +3,12 @@ from typing import Any
3
3
  from uuid import uuid4
4
4
 
5
5
  import sqlalchemy
6
- from arpakitlib.ar_datetime_util import now_utc_dt
7
- from arpakitlib.ar_sqlalchemy_util import get_string_info_from_declarative_base, BaseDBM
8
6
  from sqlalchemy import func
9
7
  from sqlalchemy.orm import mapped_column, Mapped, validates
10
8
 
9
+ from arpakitlib.ar_datetime_util import now_utc_dt
10
+ from arpakitlib.ar_sqlalchemy_util import get_string_info_from_declarative_base, BaseDBM
11
+
11
12
 
12
13
  def generate_default_long_id() -> str:
13
14
  return (
@@ -4,11 +4,12 @@ from datetime import datetime, timedelta
4
4
  from typing import Any, TYPE_CHECKING
5
5
 
6
6
  import sqlalchemy
7
+ from sqlalchemy.dialects import postgresql
8
+ from sqlalchemy.orm import mapped_column, Mapped, validates
9
+
7
10
  from arpakitlib.ar_enumeration_util import Enumeration
8
11
  from arpakitlib.ar_str_util import make_none_if_blank
9
12
  from project.sqlalchemy_db_.sqlalchemy_model.common import SimpleDBM
10
- from sqlalchemy.dialects import postgresql
11
- from sqlalchemy.orm import mapped_column, Mapped, validates
12
13
 
13
14
  if TYPE_CHECKING:
14
15
  pass
@@ -3,10 +3,11 @@ from __future__ import annotations
3
3
  from typing import TYPE_CHECKING
4
4
 
5
5
  import sqlalchemy
6
+ from sqlalchemy.orm import mapped_column, Mapped, validates
7
+
6
8
  from arpakitlib.ar_enumeration_util import Enumeration
7
9
  from arpakitlib.ar_str_util import make_none_if_blank
8
10
  from project.sqlalchemy_db_.sqlalchemy_model.common import SimpleDBM
9
- from sqlalchemy.orm import mapped_column, Mapped, validates
10
11
 
11
12
  if TYPE_CHECKING:
12
13
  pass
@@ -4,9 +4,10 @@ from typing import TYPE_CHECKING
4
4
  from uuid import uuid4
5
5
 
6
6
  import sqlalchemy
7
+ from sqlalchemy.orm import Mapped, mapped_column, relationship, validates
8
+
7
9
  from arpakitlib.ar_datetime_util import now_utc_dt
8
10
  from project.sqlalchemy_db_.sqlalchemy_model.common import SimpleDBM
9
- from sqlalchemy.orm import Mapped, mapped_column, relationship, validates
10
11
 
11
12
  if TYPE_CHECKING:
12
13
  from project.sqlalchemy_db_.sqlalchemy_model.user import UserDBM
@@ -1,7 +1,8 @@
1
1
  from functools import lru_cache
2
2
 
3
- from arpakitlib.ar_json_util import transfer_data_to_json_str
4
3
  from emoji import emojize
4
+
5
+ from arpakitlib.ar_json_util import transfer_data_to_json_str
5
6
  from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
6
7
  from project.tg_bot.blank.common import SimpleBlankTgBot
7
8
 
@@ -1,6 +1,7 @@
1
1
  from functools import lru_cache
2
2
 
3
3
  from emoji import emojize
4
+
4
5
  from project.tg_bot.blank.common import SimpleBlankTgBot
5
6
  from project.tg_bot.const import ClientTgBotCommands
6
7
 
@@ -1,4 +1,4 @@
1
- from project.tg_bot.callback.common import BaseCD
1
+ from project.tg_bot.callback_data_.common import BaseCD
2
2
 
3
3
 
4
4
  class HelloWorldAdminCD(BaseCD):
@@ -0,0 +1,5 @@
1
+ from project.tg_bot.callback_data_.common import BaseCD
2
+
3
+
4
+ class RemoveMessageClientCD(BaseCD):
5
+ pass
@@ -3,6 +3,7 @@ import logging
3
3
  from typing import Callable
4
4
 
5
5
  from aiogram import Dispatcher
6
+
6
7
  from arpakitlib.ar_base_worker_util import safe_run_worker_in_background, SafeRunInBackgroundModes
7
8
  from arpakitlib.ar_datetime_util import now_utc_dt
8
9
  from project.core.cache_file_storage_in_dir import get_cached_cache_file_storage_in_dir
@@ -2,6 +2,7 @@ from typing import Iterable
2
2
 
3
3
  import aiogram.types
4
4
  from aiogram.filters import Filter
5
+
5
6
  from arpakitlib.ar_type_util import raise_for_type
6
7
 
7
8
 
@@ -2,7 +2,7 @@ from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
2
2
  from aiogram.utils.keyboard import InlineKeyboardBuilder
3
3
 
4
4
  from project.tg_bot.blank.admin import get_cached_eng_admin_tg_bot_blank
5
- from project.tg_bot.callback.admin import HelloWorldAdminCD
5
+ from project.tg_bot.callback_data_.admin import HelloWorldAdminCD
6
6
 
7
7
 
8
8
  def hello_world_admin_inline_kb_tg_bot() -> InlineKeyboardMarkup:
@@ -1,8 +1,9 @@
1
1
  from typing import Any
2
2
 
3
- from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
4
3
  from pydantic import BaseModel, ConfigDict
5
4
 
5
+ from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
6
+
6
7
 
7
8
  class MiddlewareDataTgBot(BaseModel):
8
9
  model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True, from_attributes=True)
@@ -5,6 +5,7 @@ import aiogram
5
5
  import sqlalchemy
6
6
  from aiogram import BaseMiddleware
7
7
  from aiogram.types import TelegramObject
8
+
8
9
  from arpakitlib.ar_datetime_util import now_utc_dt
9
10
  from project.core.settings import get_cached_settings
10
11
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
@@ -5,7 +5,7 @@ from aiogram.fsm.context import FSMContext
5
5
  from arpakitlib.ar_str_util import remove_html
6
6
  from project.tg_bot.blank.admin import get_cached_eng_admin_tg_bot_blank
7
7
  from project.tg_bot.blank.client import get_cached_rus_client_tg_bot_blank
8
- from project.tg_bot.callback.admin import HelloWorldAdminCD
8
+ from project.tg_bot.callback_data_.admin import HelloWorldAdminCD
9
9
  from project.tg_bot.const import AdminTgBotCommands
10
10
  from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
11
11
  from project.tg_bot.filter_.message_text import MessageTextTgBotFilter
@@ -4,7 +4,7 @@ from aiogram.types import InlineKeyboardButton
4
4
  from aiogram.utils.keyboard import InlineKeyboardBuilder
5
5
 
6
6
  from arpakitlib.ar_aiogram_util import as_tg_command
7
- from project.tg_bot.callback.common import BaseCD
7
+ from project.tg_bot.callback_data_.common import BaseCD
8
8
  from project.tg_bot.const import AdminTgBotCommands
9
9
  from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
10
10
  from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
@@ -5,7 +5,7 @@ from aiogram.utils.keyboard import InlineKeyboardBuilder
5
5
 
6
6
  from arpakitlib.ar_aiogram_util import as_tg_command
7
7
  from project.tg_bot.blank.admin import get_cached_eng_admin_tg_bot_blank
8
- from project.tg_bot.callback.common import BaseCD
8
+ from project.tg_bot.callback_data_.common import BaseCD
9
9
  from project.tg_bot.const import AdminTgBotCommands
10
10
  from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
11
11
  from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
@@ -5,7 +5,7 @@ from aiogram.utils.keyboard import InlineKeyboardBuilder
5
5
 
6
6
  from arpakitlib.ar_aiogram_util import as_tg_command
7
7
  from project.tg_bot.blank.admin import get_cached_eng_admin_tg_bot_blank
8
- from project.tg_bot.callback.client import RemoveMessageClientCD
8
+ from project.tg_bot.callback_data_.client import RemoveMessageClientCD
9
9
  from project.tg_bot.const import AdminTgBotCommands
10
10
  from project.tg_bot.filter_.is_private_chat import IsPrivateChatTgBotFilter
11
11
  from project.tg_bot.filter_.user_roles_has_admin import UserRolesHasAdminTgBotFilter
@@ -5,6 +5,7 @@ from aiogram import Router, types
5
5
  from aiogram.filters import Command
6
6
  from aiogram.fsm.context import FSMContext
7
7
  from aiogram.types import FSInputFile
8
+
8
9
  from arpakitlib.ar_aiogram_util import as_tg_command
9
10
  from project.core.settings import get_cached_settings
10
11
  from project.tg_bot.const import AdminTgBotCommands
@@ -4,6 +4,7 @@ import aiogram
4
4
  from aiogram import Router
5
5
  from aiogram.filters import Command, or_f
6
6
  from aiogram.fsm.context import FSMContext
7
+
7
8
  from project.tg_bot.blank.client import get_cached_rus_client_tg_bot_blank
8
9
  from project.tg_bot.const import ClientTgBotCommands
9
10
  from project.tg_bot.filter_.message_text import MessageTextTgBotFilter
@@ -4,6 +4,7 @@ import aiogram
4
4
  from aiogram import Router
5
5
  from aiogram.filters import Command, or_f
6
6
  from aiogram.fsm.context import FSMContext
7
+
7
8
  from project.tg_bot.blank.client import get_cached_rus_client_tg_bot_blank
8
9
  from project.tg_bot.const import ClientTgBotCommands
9
10
  from project.tg_bot.filter_.message_text import MessageTextTgBotFilter
@@ -4,6 +4,7 @@ import aiogram
4
4
  from aiogram import Router
5
5
  from aiogram.filters import Command, or_f
6
6
  from aiogram.fsm.context import FSMContext
7
+
7
8
  from project.tg_bot.blank.client import get_cached_rus_client_tg_bot_blank
8
9
  from project.tg_bot.const import ClientTgBotCommands
9
10
  from project.tg_bot.filter_.message_text import MessageTextTgBotFilter
@@ -4,6 +4,7 @@ import aiogram
4
4
  from aiogram import Router
5
5
  from aiogram.exceptions import TelegramBadRequest
6
6
  from aiogram.fsm.context import FSMContext
7
+
7
8
  from arpakitlib.ar_exception_util import exception_to_traceback_str
8
9
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
9
10
  from project.sqlalchemy_db_.sqlalchemy_model import StoryLogDBM
@@ -3,6 +3,7 @@ import logging
3
3
  import aiogram.filters
4
4
  from aiogram.exceptions import AiogramError
5
5
  from aiogram.fsm.context import FSMContext
6
+
6
7
  from project.tg_bot.blank.client import get_cached_rus_client_tg_bot_blank
7
8
  from project.tg_bot.middleware.common import MiddlewareDataTgBot
8
9
 
@@ -3,7 +3,8 @@ import logging
3
3
  from aiogram import Router, types
4
4
  from aiogram.exceptions import AiogramError
5
5
  from aiogram.fsm.context import FSMContext
6
- from project.tg_bot.callback.client import RemoveMessageClientCD
6
+
7
+ from project.tg_bot.callback_data_.client import RemoveMessageClientCD
7
8
  from project.tg_bot.middleware.common import MiddlewareDataTgBot
8
9
 
9
10
  _logger = logging.getLogger(__name__)
@@ -4,6 +4,7 @@ import aiogram
4
4
  from aiogram import Router
5
5
  from aiogram.filters import Command, or_f
6
6
  from aiogram.fsm.context import FSMContext
7
+
7
8
  from project.tg_bot.blank.client import get_cached_rus_client_tg_bot_blank
8
9
  from project.tg_bot.const import ClientTgBotCommands
9
10
  from project.tg_bot.filter_.message_text import MessageTextTgBotFilter
@@ -4,6 +4,7 @@ import aiogram
4
4
  from aiogram import Router
5
5
  from aiogram.filters import Command, or_f
6
6
  from aiogram.fsm.context import FSMContext
7
+
7
8
  from project.tg_bot.blank.client import get_cached_rus_client_tg_bot_blank
8
9
  from project.tg_bot.const import ClientTgBotCommands
9
10
  from project.tg_bot.filter_.message_text import MessageTextTgBotFilter
@@ -3,6 +3,7 @@ import asyncio
3
3
  import aiohttp
4
4
  import aiohttp.web
5
5
  from aiogram.webhook.aiohttp_server import SimpleRequestHandler, setup_application
6
+
6
7
  from project.core.settings import get_cached_settings
7
8
  from project.core.util import setup_logging
8
9
  from project.tg_bot.tg_bot import get_cached_tg_bot
@@ -4,6 +4,7 @@ import aiogram
4
4
  from aiogram.client.default import DefaultBotProperties
5
5
  from aiogram.client.session.aiohttp import AiohttpSession
6
6
  from aiogram.enums import ParseMode
7
+
7
8
  from project.core.settings import get_cached_settings
8
9
 
9
10
 
@@ -4,8 +4,9 @@ from datetime import timedelta
4
4
 
5
5
  import sqlalchemy
6
6
  from aiogram.exceptions import AiogramError
7
- from arpakitlib.ar_str_util import remove_tags_and_html
8
7
  from emoji import emojize
8
+
9
+ from arpakitlib.ar_str_util import remove_tags_and_html
9
10
  from project.core.settings import get_cached_settings
10
11
  from project.core.util import setup_logging
11
12
  from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
@@ -2,6 +2,7 @@ import asyncio
2
2
  import logging
3
3
 
4
4
  from aiogram.types import BotCommand, BotCommandScopeChat
5
+
5
6
  from arpakitlib.ar_str_util import return_str_if_none
6
7
  from project.core.settings import get_cached_settings
7
8
  from project.core.util import setup_logging
@@ -15,6 +15,13 @@ def convert_base64_string_to_bytes(base64_string: str, raise_for_error: bool = F
15
15
  return None
16
16
 
17
17
 
18
+ def convert_base64_string_to_string(base64_string: str, raise_for_error: bool = False) -> Optional[str]:
19
+ return convert_base64_string_to_bytes(
20
+ base64_string=base64_string,
21
+ raise_for_error=raise_for_error
22
+ ).decode()
23
+
24
+
18
25
  def convert_bytes_to_base64_string(bytes_: bytes, raise_for_error: bool = False) -> Optional[str]:
19
26
  try:
20
27
  return base64.b64encode(bytes_).decode()
@@ -24,8 +31,15 @@ def convert_bytes_to_base64_string(bytes_: bytes, raise_for_error: bool = False)
24
31
  return None
25
32
 
26
33
 
34
+ def convert_file_to_base64_string(*, filepath: str, raise_for_error: bool = False) -> Optional[str]:
35
+ with open(filepath, "rb") as f:
36
+ return convert_bytes_to_base64_string(bytes_=f.read(), raise_for_error=raise_for_error)
37
+
38
+
27
39
  def __example():
28
- pass
40
+ print(convert_base64_string_to_string(
41
+ base64_string=convert_file_to_base64_string(filepath="./ar_arpakitlib_cli_util.py")
42
+ ))
29
43
 
30
44
 
31
45
  if __name__ == '__main__':