Skip to content

RadioCpp/python-intern-tasks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Учебный проект: Python 3.12 — дорожная карта задач с тестами

Этот репозиторий — набор практических задач, закрывающих базовые и прикладные навыки Python. Каждая задача размещена в отдельном модуле в src/tasks/ и снабжена тестами в tests/. Запускайте тесты, реализуйте функции, добивайтесь зелёного статуса и покрывайте ключевую логику типами.

Как начать

1. Настройка окружения

# Создание виртуального окружения
python -m venv .venv

# Активация окружения (Linux/Mac)
source .venv/bin/activate

# Активация окружения (Windows)
.venv\Scripts\activate

# Установка зависимостей
pip install -e .[dev]

2. Запуск тестов

# Запуск всех тестов
pytest -q

# Запуск тестов для конкретного уровня
pytest tests/l1/ -v
pytest tests/l2/ -v  
pytest tests/l3/ -v

# Запуск тестов с покрытием
pytest --cov=src --cov-report=html

3. Структура проекта

src/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

Полный индекс задач (1–40)

  1. task01_fizzbuzz — FizzBuzz без if-лестницы.
  2. task02_csv_normalization — Нормализация CSV с локальными числами в JSON.
  3. task03_word_freq — Частоты слов (unicode, топ-10).
  4. task04_merge_dicts — Слияние словарей с on_conflict.
  5. task05_lru_cache — LRU-кэш O(1).
  6. task06_log_parser — Парсер логов regex + группировка.
  7. task07_password_validator — Валидатор паролей (regex).
  8. task08_find_duplicates — Поиск дубликатов файлов по хешу.
  9. task09_timezone_convert — Конвертация расписания (zoneinfo).
  10. task10_retry_decorator — Декоратор retry с backoff.
  11. task11_pipeline_iterators — Мини-pipeline на генераторах.
  12. task12_config_dataclass — Конфиг на dataclass(slots,frozen).
  13. task13_fetch_json — HTTP-клиент с таймаутом/ретраями.
  14. task14_html_parser — H1..H3 и внутренние ссылки.
  15. task15_file_cache — Файловый кеш TTL.
  16. task16_sqlite_crud — SQLite CRUD без ORM.
  17. task17_pydantic_schemas — NoteIn/NoteOut: строгие типы, валидация тегов/длины.
  18. task18_rate_limiter — In-memory RPS на IP/ключ.
  19. task19_pagination_utils — limit/offset, сортировка.
  20. task20_uploader_limits — Проверка размера/мим-типа.
  21. task21_http_cache — Кеширование HTTP-ответов (ключ URL+параметры, TTL).
  22. task22_sqlalchemy_model — SQLAlchemy модель Note и пагинация.
  23. task23_fastapi_notes — Мини-API /notes с TestClient.
  24. task24_api_key_auth — X-API-Key зависимость, 401/403.
  25. task25_rate_limit_fastapi — Простой rate-limit middleware.
  26. task26_pagination_params — Валидация limit/offset.
  27. task27_file_upload_endpoint — POST /upload с лимитами.
  28. task28_token_cli — CLI выпуска API-ключей (uuid4+HMAC).
  29. task29_async_gatherer — Асинхронный сбор URL с Semaphore/таймаутами.
  30. task30_async_token_bucket — Асинхронный rate-limiter (token bucket).
  31. task31_thread_vs_process — Сравнение пулов CPU/I-O.
  32. task32_async_scheduler — Планировщик задач без наложений.
  33. task33_logging_config — dictConfig + ротация файлов.
  34. task34_cli_argparse — Подкоманды scan/report/fix.
  35. task35_precommit_tooling — Настройка pre-commit (black, ruff, isort).
  36. task36_mypy_strict — Довести мини-пакет до mypy --strict.
  37. task37_dockerfile_fastapi — Dockerfile (builder+runtime, non-root, healthcheck).
  38. task38_docker_compose — API + SQLite volume, .env.
  39. task39_env_settings — Pydantic Settings: обязательные/дефолты.
  40. task40_build_dist — Сборка wheel/sdist и консольная точка входа.

На каждую задачу заведён модуль-скелет с NotImplementedError и тесты, которые изначально падают.

Уровни сложности и капстоуны

L1 — Базовый уровень (7 задач):

  • task01_fizzbuzz, task02_csv_normalization, task03_word_freq, task04_merge_dicts
  • task07_password_validator, task11_pipeline_iterators, task12_config_dataclass
  • Цель: Освоить базовый синтаксис Python, структуры данных, типизацию

L2 — Средний уровень (10 задач):

  • task05_lru_cache, task06_log_parser, task08_find_duplicates, task09_timezone_convert
  • task10_retry_decorator, task14_html_parser, task15_file_cache, task16_sqlite_crud
  • task19_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 присутствуют дополнительные тесты на устойчивость и античит (например, проверка идемпотентности, корректности работы исключений путей, граничных состояний времени/таймаутов). Их описание доступно только наставникам.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages