Этот репозиторий — набор практических задач, закрывающих базовые и прикладные навыки Python. Каждая задача размещена в отдельном модуле в src/tasks/ и снабжена тестами в tests/. Запускайте тесты, реализуйте функции, добивайтесь зелёного статуса и покрывайте ключевую логику типами.
# Создание виртуального окружения
python -m venv .venv
# Активация окружения (Linux/Mac)
source .venv/bin/activate
# Активация окружения (Windows)
.venv\Scripts\activate
# Установка зависимостей
pip install -e .[dev]# Запуск всех тестов
pytest -q
# Запуск тестов для конкретного уровня
pytest tests/l1/ -v
pytest tests/l2/ -v
pytest tests/l3/ -v
# Запуск тестов с покрытием
pytest --cov=src --cov-report=htmlsrc/tasks/
├── l1/ # Базовый уровень (7 задач)
├── l2/ # Средний уровень (10 задач)
└── l3/ # Продвинутый уровень (17 задач)
tests/
├── l1/ # Тесты для L1
├── l2/ # Тесты для L2
└── l3/ # Тесты для L3
- Язык и стандартная библиотека: структуры данных, итераторы, исключения, файлы/пути, datetime, regex, ООП, typing/mypy.
- Инструменты разработчика: формат и линт, тестирование, покрытие, логирование, CLI.
- Прикладные основы: HTTP-клиент, парсинг HTML, кеширование, SQLite, Pydantic.
- Асинхронность и конкурентность: asyncio, rate-limiter, планировщики.
- Контейнеризация (минимум): Dockerfile (задачи класса C — опционально).
.
├── src/tasks/ # задачи (каждая — модуль)
│ ├── l1/ # уровень L1 (база) — 7 задач
│ ├── l2/ # уровень L2 (средний) — 10 задач
│ └── l3/ # уровень L3 (продвинутый) — 17 задач
├── tests/ # тесты к задачам
│ ├── l1/ # тесты для L1
│ ├── l2/ # тесты для L2
│ └── l3/ # тесты для L3
├── pyproject.toml # конфиги инструментов
└── README.md
- task01_fizzbuzz — FizzBuzz без if-лестницы.
- task02_csv_normalization — Нормализация CSV с локальными числами в JSON.
- task03_word_freq — Частоты слов (unicode, топ-10).
- task04_merge_dicts — Слияние словарей с on_conflict.
- task05_lru_cache — LRU-кэш O(1).
- task06_log_parser — Парсер логов regex + группировка.
- task07_password_validator — Валидатор паролей (regex).
- task08_find_duplicates — Поиск дубликатов файлов по хешу.
- task09_timezone_convert — Конвертация расписания (zoneinfo).
- task10_retry_decorator — Декоратор retry с backoff.
- task11_pipeline_iterators — Мини-pipeline на генераторах.
- task12_config_dataclass — Конфиг на dataclass(slots,frozen).
- task13_fetch_json — HTTP-клиент с таймаутом/ретраями.
- task14_html_parser — H1..H3 и внутренние ссылки.
- task15_file_cache — Файловый кеш TTL.
- task16_sqlite_crud — SQLite CRUD без ORM.
- task17_pydantic_schemas — NoteIn/NoteOut: строгие типы, валидация тегов/длины.
- task18_rate_limiter — In-memory RPS на IP/ключ.
- task19_pagination_utils — limit/offset, сортировка.
- task20_uploader_limits — Проверка размера/мим-типа.
- task21_http_cache — Кеширование HTTP-ответов (ключ URL+параметры, TTL).
- task22_sqlalchemy_model — SQLAlchemy модель Note и пагинация.
- task23_fastapi_notes — Мини-API /notes с TestClient.
- task24_api_key_auth — X-API-Key зависимость, 401/403.
- task25_rate_limit_fastapi — Простой rate-limit middleware.
- task26_pagination_params — Валидация limit/offset.
- task27_file_upload_endpoint — POST /upload с лимитами.
- task28_token_cli — CLI выпуска API-ключей (uuid4+HMAC).
- task29_async_gatherer — Асинхронный сбор URL с Semaphore/таймаутами.
- task30_async_token_bucket — Асинхронный rate-limiter (token bucket).
- task31_thread_vs_process — Сравнение пулов CPU/I-O.
- task32_async_scheduler — Планировщик задач без наложений.
- task33_logging_config — dictConfig + ротация файлов.
- task34_cli_argparse — Подкоманды scan/report/fix.
- task35_precommit_tooling — Настройка pre-commit (black, ruff, isort).
- task36_mypy_strict — Довести мини-пакет до mypy --strict.
- task37_dockerfile_fastapi — Dockerfile (builder+runtime, non-root, healthcheck).
- task38_docker_compose — API + SQLite volume, .env.
- task39_env_settings — Pydantic Settings: обязательные/дефолты.
- task40_build_dist — Сборка wheel/sdist и консольная точка входа.
На каждую задачу заведён модуль-скелет с NotImplementedError и тесты, которые изначально падают.
L1 — Базовый уровень (7 задач):
task01_fizzbuzz,task02_csv_normalization,task03_word_freq,task04_merge_dictstask07_password_validator,task11_pipeline_iterators,task12_config_dataclass- Цель: Освоить базовый синтаксис Python, структуры данных, типизацию
L2 — Средний уровень (10 задач):
task05_lru_cache,task06_log_parser,task08_find_duplicates,task09_timezone_converttask10_retry_decorator,task14_html_parser,task15_file_cache,task16_sqlite_crudtask19_pagination_utils,task21_http_cache- Цель: Алгоритмы, работа с файлами, базы данных, кеширование
L3 — Продвинутый уровень (17 задач):
- HTTP и API:
task13_fetch_json,task17_pydantic_schemas,task18_rate_limiter,task20_uploader_limits - FastAPI и веб-разработка:
task22_sqlalchemy_model,task23_fastapi_notes,task24_api_key_auth - Middleware и валидация:
task25_rate_limit_fastapi,task26_pagination_params,task27_file_upload_endpoint - CLI и утилиты:
task28_token_cli - Асинхронность:
task29_async_gatherer,task30_async_token_bucket,task31_thread_vs_process,task32_async_scheduler - Контейнеризация:
task37_dockerfile_fastapi,task38_docker_compose - Цель: Создание полноценных веб-приложений, асинхронное программирование, DevOps
Капстоуны (на выбор 1–2, после прохождения всех уровней):
- REST Notes API на FastAPI: CRUD, валидация, пагинация, auth по ключу
- Телеграм-бот «Хабит-трекер»: напоминания, простое хранилище, рейт-лимитер
- Асинхронный сборщик URL: gather+Semaphore, таймауты, отмена, отчёт
- CLI filesync двух директорий: dry-run, exclude, отчёты
- Все тесты для выбранной задачи зелёные.
- Покрытие ключевой логики по проекту ≥ 85% (
pytest --cov). mypy --strictбез ошибок и безtype: ignore.- Код проходит формат и линт:
black,ruff,isort.
В частном CI присутствуют дополнительные тесты на устойчивость и античит (например, проверка идемпотентности, корректности работы исключений путей, граничных состояний времени/таймаутов). Их описание доступно только наставникам.