ВяткинАртём d7cbd876ea
CI / Quality Checks (push) Failing after 12s
CI / Test Suite (push) Successful in 10s
Refactor code style and improve documentation
- Standardized string quotes to single quotes across all files.
- Added docstrings to several functions and classes for better clarity.
- Updated mypy configuration in pyproject.toml for enhanced type checking.
- Ignored specific linting rules for test files in ruff configuration.
- Improved error messages in exception handling for better user feedback.
- Cleaned up code formatting and structure for consistency.
2026-05-27 17:24:30 +03:00
2026-05-27 13:28:29 +00:00

yt-shorts-downloader

Библиотека и CLI для скачивания YouTube Shorts через Netscape cookie session.

Целевой контракт публичного API:

  • вход: ссылка YouTube и путь к session file
  • выход: бинарный MP4 в памяти для интеграции в API

Установка

Для использования библиотеки:

uv pip install .

Для разработки:

uv sync --group dev

Использование библиотеки

from yt_shorts_downloader import download

video = download(
		"https://www.youtube.com/shorts/VIDEO_ID",
		"cookies.txt",
)

assert video.media_type == "video/mp4"
binary_mp4 = video.content
filename = video.filename

Если нужен файл на диске, используйте вспомогательную функцию:

from yt_shorts_downloader import download_to_path

file_path = download_to_path(
		"https://www.youtube.com/shorts/VIDEO_ID",
		"cookies.txt",
		output_dir="downloads",
)

CLI

uv run yt-shorts-downloader \
	"https://www.youtube.com/shorts/VIDEO_ID" \
	cookies.txt \
	--output-dir downloads

Архитектура

  • src/yt_shorts_downloader/api.py: публичный API библиотеки
  • src/yt_shorts_downloader/models: доменные модели
  • src/yt_shorts_downloader/services: валидация и разбор session file
  • src/yt_shorts_downloader/core: интеграция с yt-dlp и инфраструктурные функции
  • stubs: локальные mypy stubs для внешних зависимостей без полной типизации

Качество

  • mypy работает в strict-режиме
  • runtime-зависимости лежат в секции project.dependencies
  • инструменты разработки лежат в секции dependency-groups.dev

Основные команды:

make format
make ci-check
make test
make build

CI/CD

В репозитории добавлены Gitea Actions workflow:

  • .gitea/workflows/ci.yml: lint, mypy, deptry, pytest
  • .gitea/workflows/release.yml: повторный прогон quality/tests на теге и публикация в Gitea Packages только после их успеха

Публикация настроена в Gitea PyPI registry по документации Gitea Packages.

Нужные secrets для release workflow:

  • GITEA_PYPI_REPOSITORY_URL: полный endpoint вида https://gitea.example.com/api/packages//pypi
  • GITEA_PACKAGE_USERNAME: пользователь Gitea
  • GITEA_PACKAGE_TOKEN: personal access token с правом package write

Публикация идёт только на push тега вида v* и только после успешных lint/typecheck/test jobs.

Локально тот же сценарий можно выполнить так:

export GITEA_PYPI_REPOSITORY_URL="https://gitea.example.com/api/packages/<owner>/pypi"
export GITEA_PACKAGE_USERNAME="<username>"
export GITEA_PACKAGE_TOKEN="<token>"
make publish-gitea
S
Description
No description provided
Readme GPL-3.0 133 KiB
Languages
Python 94.5%
Makefile 5.5%