Python SDK для модерации контента
Официальный Python SDK для VideoCensor API. Анализ и цензура текста, аудио и видео через модерацию мата, hate speech, экстремизма, наркотиков, sexual-контента. Sync + async клиенты, типизированные модели, auto-retry с exponential backoff.
Sync + async клиенты
VideoCensor (синхронный, httpx) и AsyncVideoCensor (async/await). Одинаковое API, общие модели. Выбирайте под фреймворк — FastAPI, Django, Flask, Celery.
Типизированные модели
Pydantic-like dataclasses для всех эндпоинтов. Полная поддержка mypy/pyright. IDE-автокомплит работает из коробки.
Auto-retry с backoff
Ретраи на 429/5xx с exponential backoff. Параметр max_retries в конструкторе. Retry-After заголовок соблюдается.
Загрузка файлов из path или stream
analyze_media принимает путь к файлу, BufferedReader или BytesIO. Не нужно явно открывать файл — SDK сам обработает всё.
wait_for_job helper
Удобный helper для polling до завершения задачи: client.wait_for_job(job_id, timeout=600, poll_interval=2). Поддерживает callback для progress.
Context manager
with VideoCensor(api_key=...) as client — автоматическое закрытие httpx-клиента. Работает и с async: async with AsyncVideoCensor(...).
Быстрый старт
import os
from videocensor import VideoCensor
with VideoCensor(api_key=os.environ["VIDEOCENSOR_API_KEY"]) as client:
result = client.analyze_text("проверяемый текст")
print(result.flagged_count, result.categories)import os
import asyncio
from videocensor import AsyncVideoCensor
async def main():
async with AsyncVideoCensor(api_key=os.environ["VIDEOCENSOR_API_KEY"]) as client:
job = await client.analyze_media("/path/to/video.mp4")
done = await client.wait_for_job(job.id)
analysis = await client.get_job_result(done.id)
print(analysis.censored_count)
asyncio.run(main())import os
from videocensor import VideoCensor
with VideoCensor(api_key=os.environ["VIDEOCENSOR_API_KEY"]) as client:
job = client.censor_media("/path/to/video.mp4", way_of_blocking="beep")
done = client.wait_for_job(job.id)
client.download_job(done.id, "./clean.mp4")from videocensor import VideoCensor, RateLimitError, AuthenticationError
try:
result = client.analyze_text("test")
except RateLimitError as e:
print(f"retry after {e.retry_after}s")
except AuthenticationError:
print("invalid api key")Что умеет SDK
FastAPI backend
async endpoint → AsyncVideoCensor → возвращаем job_id → webhook. Или wait_for_job для синхронного ответа.
Django admin
Синхронный VideoCensor в админ-действии для ручной модерации загруженных файлов.
Celery-задачи
wait_for_job внутри Celery-таска — удобно для очереди обработки больших файлов.
Jupyter notebook
Data-science анализ корпуса текстов / видео — всё через sync API, inline-результаты.
CLI-инструмент
Скрипт для batch-обработки файлов из папки: glob + analyze_media + запись результатов в CSV.
Airflow DAG
DAG для автоматической модерации новых файлов из S3 / GCS — task_instance вызывает VideoCensor.
Python SDK — вопросы
Какая версия Python поддерживается?+
Python 3.10+. SDK использует современные type hints (X | None) и dataclasses.
Какие зависимости у SDK?+
Только httpx >= 0.25. Никаких тяжёлых зависимостей. Размер пакета — ~30 КБ.
Работает ли в AWS Lambda / Cloud Functions?+
Да. SDK не использует subprocess, долгоживущие процессы или локальные файлы. Для длинных задач — webhook вместо wait_for_job.
Есть ли встроенная телеметрия?+
Нет. SDK не отправляет никаких метрик или телеметрии — только прямые вызовы к videocensor.ru/api/v1.
Как обновить SDK?+
pip install --upgrade videocensor. Следуем SemVer — breaking changes только в major-версиях, с deprecation notice за 3 месяца.
Где исходники?+
Открытый исходный код SDK на GitHub — github.com/dzhumaevn/videocensor/tree/main/sdk/python. MIT license.
Установите SDK за секунду
pip install videocensor — и у вас типизированный клиент с sync и async версиями.