Skip to content

Commit 8869f10

Browse files
author
maxim-lixakov
committed
[FEATURE] - make setup_logging independent
1 parent ffe0180 commit 8869f10

File tree

10 files changed

+118
-129
lines changed

10 files changed

+118
-129
lines changed

poetry.lock

Lines changed: 74 additions & 73 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ worker = [
100100
"pydantic-settings",
101101
"sqlalchemy",
102102
"sqlalchemy-utils",
103+
"python-multipart",
104+
"python-jose",
103105
"celery",
104106
"onetl",
105107
"asgi-correlation-id",
@@ -108,6 +110,7 @@ worker = [
108110
"uuid6",
109111
"coloredlogs",
110112
"python-json-logger",
113+
"pyyaml",
111114
]
112115

113116
scheduler = [

syncmaster/backend/middlewares/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from fastapi import FastAPI
55

66
from syncmaster.backend.middlewares.cors import apply_cors_middleware
7-
from syncmaster.backend.middlewares.logging import setup_logging
87
from syncmaster.backend.middlewares.monitoring.metrics import (
98
apply_monitoring_metrics_middleware,
109
)
@@ -13,6 +12,7 @@
1312
from syncmaster.backend.middlewares.session import apply_session_middleware
1413
from syncmaster.backend.middlewares.static_files import apply_static_files
1514
from syncmaster.backend.settings import ServerAppSettings as Settings
15+
from syncmaster.settings.log import setup_logging
1616

1717

1818
def apply_middlewares(

syncmaster/backend/middlewares/logging.py

Lines changed: 0 additions & 26 deletions
This file was deleted.

syncmaster/db/repositories/credentials_repository.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,28 @@
22
# SPDX-License-Identifier: Apache-2.0
33
from __future__ import annotations
44

5-
from typing import NoReturn
5+
from typing import TYPE_CHECKING, NoReturn
66

77
from sqlalchemy import ScalarResult, insert, select
88
from sqlalchemy.exc import DBAPIError, IntegrityError, NoResultFound
99
from sqlalchemy.ext.asyncio import AsyncSession
1010

11-
from syncmaster.backend.settings import ServerAppSettings as Settings
1211
from syncmaster.db.models import AuthData
1312
from syncmaster.db.repositories.base import Repository
1413
from syncmaster.db.repositories.utils import decrypt_auth_data, encrypt_auth_data
1514
from syncmaster.exceptions import SyncmasterError
1615
from syncmaster.exceptions.credentials import AuthDataNotFoundError
1716

17+
if TYPE_CHECKING:
18+
from syncmaster.backend.settings import ServerAppSettings
19+
from syncmaster.scheduler.settings import SchedulerAppSettings
20+
from syncmaster.worker.settings import WorkerAppSettings
21+
1822

1923
class CredentialsRepository(Repository[AuthData]):
2024
def __init__(
2125
self,
22-
settings: Settings,
26+
settings: WorkerAppSettings | SchedulerAppSettings | ServerAppSettings,
2327
session: AsyncSession,
2428
model: type[AuthData],
2529
):

syncmaster/db/repositories/utils.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
# SPDX-FileCopyrightText: 2023-2024 MTS PJSC
22
# SPDX-License-Identifier: Apache-2.0
3+
from __future__ import annotations
4+
35
import json
6+
from typing import TYPE_CHECKING
47

58
from cryptography.fernet import Fernet
69
from pydantic import SecretStr
710

8-
from syncmaster.backend.settings import ServerAppSettings as Settings
11+
if TYPE_CHECKING:
12+
from syncmaster.backend.settings import ServerAppSettings
13+
from syncmaster.scheduler.settings import SchedulerAppSettings
14+
from syncmaster.worker.settings import WorkerAppSettings
915

1016

1117
def decrypt_auth_data(
1218
value: str,
13-
settings: Settings,
19+
settings: WorkerAppSettings | SchedulerAppSettings | ServerAppSettings,
1420
) -> dict:
1521
decryptor = Fernet(settings.encryption.crypto_key)
1622
decrypted = decryptor.decrypt(value)
@@ -24,7 +30,7 @@ def _json_default(value):
2430

2531
def encrypt_auth_data(
2632
value: dict,
27-
settings: Settings,
33+
settings: WorkerAppSettings | SchedulerAppSettings | ServerAppSettings,
2834
) -> str:
2935
encryptor = Fernet(settings.encryption.crypto_key)
3036
serialized = json.dumps(

syncmaster/scheduler/__main__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import asyncio
44
import logging
55

6-
from syncmaster.scheduler.logging import setup_logging
76
from syncmaster.scheduler.settings import SchedulerAppSettings as Settings
87
from syncmaster.scheduler.transfer_fetcher import TransferFetcher
98
from syncmaster.scheduler.transfer_job_manager import TransferJobManager
9+
from syncmaster.settings.log import setup_logging
1010

1111
logger = logging.getLogger(__name__)
1212

syncmaster/scheduler/logging.py

Lines changed: 0 additions & 18 deletions
This file was deleted.

syncmaster/settings/log/__init__.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,33 @@
11
# SPDX-FileCopyrightText: 2023-2024 MTS PJSC
22
# SPDX-License-Identifier: Apache-2.0
33

4+
import logging
45
import textwrap
6+
from logging.config import dictConfig
57
from pathlib import Path
68
from typing import Literal
79

10+
import yaml
811
from pydantic import BaseModel, Field
912

1013
LOG_PATH = Path(__file__).parent.resolve()
14+
logger = logging.getLogger(__name__)
15+
16+
17+
class LoggingSetupError(Exception):
18+
pass
19+
20+
21+
def setup_logging(config_path: Path) -> None:
22+
"""Parse file with logging configuration, and setup logging accordingly"""
23+
if not config_path.exists():
24+
raise OSError(f"Logging configuration file '{config_path}' does not exist")
25+
26+
try:
27+
config = yaml.safe_load(config_path.read_text())
28+
dictConfig(config)
29+
except Exception as e:
30+
raise LoggingSetupError(f"Error reading logging configuration '{config_path}'") from e
1131

1232

1333
class LoggingSettings(BaseModel):

syncmaster/worker/transfer.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
from sqlalchemy import select
1212
from sqlalchemy.orm import Session, selectinload
1313

14-
from syncmaster.backend.middlewares.logging import setup_logging
15-
from syncmaster.backend.settings import ServerAppSettings as Settings
1614
from syncmaster.db.models import AuthData, Run, Status, Transfer
1715
from syncmaster.db.repositories.utils import decrypt_auth_data
1816
from syncmaster.exceptions.run import RunNotFoundError
17+
from syncmaster.settings.log import setup_logging
1918
from syncmaster.worker import celery
2019
from syncmaster.worker.controller import TransferController
2120
from syncmaster.worker.settings import WorkerAppSettings
@@ -37,7 +36,7 @@ def run_transfer_task(self: Celery, run_id: int) -> None:
3736
)
3837

3938

40-
def run_transfer(session: Session, run_id: int, settings: Settings):
39+
def run_transfer(session: Session, run_id: int, settings: WorkerAppSettings):
4140
logger.info("Start transfer")
4241
run = session.get(
4342
Run,
@@ -86,7 +85,7 @@ def run_transfer(session: Session, run_id: int, settings: Settings):
8685

8786
@after_setup_logger.connect
8887
def setup_loggers(*args, **kwargs):
89-
setup_logging(Settings().logging.get_log_config_path())
88+
setup_logging(WorkerAppSettings().logging.get_log_config_path())
9089

9190

9291
@before_task_publish.connect()

0 commit comments

Comments
 (0)