Python Разработчик-Эксперт

Генерирует production-ready Python-код по ТЗ с типами, тестами, обработкой ошибок и объяснением логики.

// промпт
Ты — senior Python-разработчик с многолетним опытом промышленной разработки. Твоя задача — написать чистый, надёжный и поддерживаемый код по моему ТЗ и понятно объяснить логику его работы. ## Задача - **Что нужно реализовать:** {{opisanie_zadaci}} - **Входные данные:** {{vxodnye_parametry}} - **Ожидаемый результат:** {{ozidaemyi_rezultat}} - **Ограничения и особые требования:** {{osobye_trebovaniia}} - **Контекст использования:** {{gde_budet_primeniatsia}} ## Стандарты разработки - **Версия Python:** {{versiia_python}} (по умолчанию 3.11+). - Полные аннотации типов (`typing`), проверяемые `mypy --strict`. - Docstrings в стиле Google: назначение, `Args`, `Returns`, `Raises`. - Следование PEP 8; форматирование под `ruff`/`black`. - Явная обработка ошибок: осмысленные исключения, никаких «голых» `except`. - Без преждевременной оптимизации, но с разумной алгоритмической сложностью. ## Порядок работы 1. Если в ТЗ есть пробелы или неоднозначности — кратко перечисли допущения, которые ты делаешь, и продолжай. 2. Предложи структуру решения: функции/классы, их зоны ответственности, поток данных. 3. Реализуй код, разбивая его на небольшие, тестируемые единицы. 4. Покрой ключевые сценарии и граничные случаи unit-тестами на `pytest`. 5. Объясни нетривиальные решения и компромиссы (производительность, читаемость, надёжность). ## Формат ответа 1. **Краткий разбор задачи** и допущения (3–5 строк). 2. **Основной код** — полная, готовая к запуску реализация с типами и docstrings. 3. **Unit-тесты** на `pytest`, включая граничные случаи и ошибки. 4. **Пример использования** с реалистичными тестовыми данными. 5. **`requirements.txt`** — только если нужны внешние пакеты. 6. **Пояснение логики** и заметки по дальнейшему улучшению. Фокус: корректность, чистая архитектура, тестируемость и поддерживаемость. Не используй устаревшие API; предпочитай стандартную библиотеку, если внешняя зависимость не оправдана.
Заполните переменные
Пример ответа

🐍 Профессиональное Python Решение

from typing import List, Dict, Optional, Protocol
from dataclasses import dataclass, field
from datetime import datetime, timedelta
from abc import ABC, abstractmethod
import asyncio
import pytest

@dataclass
class Task:
    """Модель задачи с полной типизацией."""
    id: int
    title: str
    description: Optional[str] = None
    priority: int = field(default=1)
    created_at: datetime = field(default_factory=datetime.now)
    due_date: Optional[datetime] = None
    completed: bool = False
    tags: List[str] = field(default_factory=list)
    
    def __post_init__(self):
        """Валидация после инициализации."""
        if not 1 <= self.priority <= 10:
            raise ValueError("Приоритет должен быть от 1 до 10")
        
        if self.due_date and self.due_date <= self.created_at:
            raise ValueError("Срок выполнения не может быть в прошлом")

class TaskFilter(Protocol):
    """Протокол для фильтрации задач."""
    
    def apply(self, tasks: List[Task]) -> List[Task]:
        """Применить фильтр к списку задач."""
        ...

class PriorityFilter:
    """Фильтр по приоритету задач."""
    
    def __init__(self, min_priority: int):
        self.min_priority = min_priority
    
    def apply(self, tasks: List[Task]) -> List[Task]:
        return [task for task in tasks if task.priority >= self.min_priority]

class TaskRepository(ABC):
    """Абстрактный репозиторий для работы с задачами."""
    
    @abstractmethod
    async def save(self, task: Task) -> Task:
        """Сохранить задачу."""
        pass
    
    @abstractmethod
    async def find_by_id(self, task_id: int) -> Optional[Task]:
        """Найти задачу по ID."""
        pass
    
    @abstractmethod
    async def find_all(self) -> List[Task]:
        """Получить все задачи."""
        pass

class InMemoryTaskRepository(TaskRepository):
    """In-memory реализация репозитория для тестирования."""
    
    def __init__(self):
        self._tasks: Dict[int, Task] = {}
        self._next_id = 1
    
    async def save(self, task: Task) -> Task:
        """Сохранить задачу в памяти."""
        if task.id == 0:  # Новая задача
            task.id = self._next_id
            self._next_id += 1
        
        self._tasks[task.id] = task
        return task
    
    async def find_by_id(self, task_id: int) -> Optional[Task]:
        """Найти задачу по ID."""
        return self._tasks.get(task_id)
    
    async def find_all(self) -> List[Task]:
        """Получить все задачи."""
        return list(self._tasks.values())

class TaskService:
    """Сервис для управления задачами."""
    
    def __init__(self, repository: TaskRepository):
        self._repository = repository
    
    async def create_task(
        self,
        title: str,
        description: Optional[str] = None,
        priority: int = 1,
        due_date: Optional[datetime] = None,
        tags: Optional[List[str]] = None
    ) -> Task:
        """
        Создать новую задачу.
        
        Args:
            title: Название задачи
            description: Описание задачи
            priority: Приоритет от 1 до 10
            due_date: Срок выполнения
            tags: Список тегов
            
        Returns:
            Созданная задача
            
        Raises:
            ValueError: При некорректных параметрах
        """
        if not title.strip():
            raise ValueError("Название задачи не может быть пустым")
        
        task = Task(
            id=0,  # Будет назначен в репозитории
            title=title.strip(),
            description=description,
            priority=priority,
            due_date=due_date,
            tags=tags or []
        )
        
        return await self._repository.save(task)
    
    async def complete_task(self, task_id: int) -> Optional[Task]:
        """Отметить задачу как выполненную."""
        task = await self._repository.find_by_id(task_id)
        if not task:
            return None
        
        task.completed = True
        return await self._repository.save(task)
    
    async def get_filtered_tasks(
        self, 
        task_filter: TaskFilter
    ) -> List[Task]:
        """Получить отфильтрованные задачи."""
        all_tasks = await self._repository.find_all()
        return task_filter.apply(all_tasks)
    
    async def get_overdue_tasks(self) -> List[Task]:
        """Получить просроченные задачи."""
        all_tasks = await self._repository.find_all()
        now = datetime.now()
        
        return [
            task for task in all_tasks 
            if task.due_date and task.due_date < now and not task.completed
        ]

# Unit Tests
class TestTaskService:
    """Тесты для TaskService."""
    
    @pytest.fixture
    async def service(self):
        """Создать сервис с in-memory репозиторием."""
        repository = InMemoryTaskRepository()
        return TaskService(repository)
    
    @pytest.mark.asyncio
    async def test_create_task_success(self, service):
        """Тест успешного создания задачи."""
        task = await service.create_task(
            title="Тестовая задача",
            description="Описание задачи",
            priority=5
        )
        
        assert task.id > 0
        assert task.title == "Тестовая задача"
        assert task.priority == 5
        assert not task.completed
    
    @pytest.mark.asyncio
    async def test_create_task_empty_title(self, service):
        """Тест создания задачи с пустым названием."""
        with pytest.raises(ValueError, match="Название задачи не может быть пустым"):
            await service.create_task(title="   ")
    
    @pytest.mark.asyncio
    async def test_complete_task(self, service):
        """Тест завершения задачи."""
        # Создаем задачу
        task = await service.create_task("Задача для завершения")
        
        # Завершаем её
        completed_task = await service.complete_task(task.id)
        
        assert completed_task is not None
        assert completed_task.completed is True
    
    @pytest.mark.asyncio
    async def test_filter_by_priority(self, service):
        """Тест фильтрации по приоритету."""
        # Создаем задачи с разными приоритетами
        await service.create_task("Низкий приоритет", priority=2)
        await service.create_task("Высокий приоритет", priority=8)
        
        # Фильтруем задачи с приоритетом >= 5
        high_priority_filter = PriorityFilter(5)
        filtered_tasks = await service.get_filtered_tasks(high_priority_filter)
        
        assert len(filtered_tasks) == 1
        assert filtered_tasks[0].title == "Высокий приоритет"

# Пример использования
async def main():
    """Демонстрация работы системы управления задачами."""
    # Создание сервиса
    repository = InMemoryTaskRepository()
    service = TaskService(repository)
    
    # Создание задач
    task1 = await service.create_task(
        title="Изучить FastAPI",
        description="Освоить создание REST API",
        priority=8,
        due_date=datetime.now() + timedelta(days=7),
        tags=["обучение", "python"]
    )
    
    task2 = await service.create_task(
        title="Написать тесты",
        priority=6,
        tags=["testing", "качество"]
    )
    
    print(f"Создана задача: {{task1.title}} (ID: {{task1.id}})")
    print(f"Создана задача: {{task2.title}} (ID: {{task2.id}})")
    
    # Фильтрация задач
    high_priority = PriorityFilter(7)
    important_tasks = await service.get_filtered_tasks(high_priority)
    
    print(f"\nВажные задачи (приоритет >= 7):")
    for task in important_tasks:
        print(f"- {{task.title}} (приоритет: {{task.priority}})")
    
    # Завершение задачи
    await service.complete_task(task2.id)
    print(f"\nЗадача '{{task2.title}}' завершена!")

if __name__ == "__main__":
    asyncio.run(main())

Особенности: Полная типизация, async/await, SOLID принципы, dependency injection, comprehensive тесты

Похожие промпты

Программирование и Разработка

Профессиональный Генератор Кода

Генерирует production-ready код с чистой архитектурой, документацией, обработкой ошибок и тестами по вашему ТЗ.

Программирование и Разработка

Оптимизатор Производительности

Анализирует код, находит узкие места и выдаёт оптимизированную версию с оценкой прироста производительности.

Программирование и Разработка

Специалист по Code Review

Проводит профессиональный код-ревью с оценкой читаемости, SOLID, безопасности и приоритизированными рекомендациями по рефакторингу.

Программирование и Разработка

Стратег Тестирования

Разрабатывает комплексную стратегию тестирования кода: модульные, интеграционные и нагрузочные тесты с готовыми тест-кейсами и оценкой покрытия.