Назад к задачам
Junior — Senior
3

Рефакторинг кода согласно принципам чистого кода и покрытие тестами

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо привести представленный фрагмент кода к требованиям чистого кода:

  • Добавить недостающие аннотации типов.
  • Оформить docstring для всех классов и их методов.
  • Повысить читаемость (правильные отступы, при необходимости – более осмысленные имена переменных).
  • При необходимости разбить код на отдельные модули.
  • Реализовать юнит‑тесты, проверяющие ключевые части программы.
from collections.abc import Callable
from typing import Any, TypeVar, Concatenate, overload
from contextlib import asynccontextmanager
from dataclasses import dataclass
from functools import partial
from psycopg import AsyncConnection
from psycopg.types import TypeInfo
from certmanager.storages import sql

T = TypeVar('T')
P = TypeVar('P')
BaseActionT = Callable[Concatenate[AsyncConnection[Any], P], T]

@dataclass(slots=True)
class Action:
    action_function: BaseActionT[T, P]

    @overload
    def __get__(self, client: None, *args: Any) -> 'Action[T, P]': ...

    @overload
    def __get__(self, client: AsyncConnection[Any], *args: Any) -> Callable[P, T]: ...

    def __get__(self, client: AsyncConnection[Any] | None, *args: Any) -> Any:
        if client is None:
            return self
        return partial(self.action_function, client.connection)

class PositiveValue:
    def get(self) -> int:
        """Возвращает положительное целое значение."""
        return 1  # пример значения

class MyClass:
    def __init__(self) -> None:
        self.number = PositiveValue()

obj = MyClass()
obj.number