Python SDK: Context: запуск, данные и прогресс
Платформа передаёт ctx в def run(ctx):. Через него вы получаете параметры, обращаетесь к разрешённым сервисам и отдаёте результаты. Не создавайте ctx самостоятельно.
Примеры являются фрагментами тела def run(ctx):. Все методы SDK синхронны, await не нужен.
Методы
http()state()storage()browser()captcha()wildberries()dom()json()text()url()emit()flush()log()progress()metric()param()params()credential()sleep()cancelled()abort()fail()now()mail()documents()ai()sources()
http
ctx.http() -> HttpClient
Аргументы не нужны.
Результат: HttpClient. Объект SDK: используйте его методы, не передавайте целиком в emit.
Получить клиент для запросов к сайту. Все запросы используют сетевые настройки текущего сайта.
result = ctx.http()
state
ctx.state() -> KeyValue
Аргументы не нужны.
Результат: KeyValue. Объект SDK: используйте его методы, не передавайте целиком в emit.
Получить хранилище небольшого состояния обхода. Подходит для номера последней обработанной страницы.
result = ctx.state()
storage
ctx.storage(code) -> Storage
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
code |
str |
Да | Код заранее настроенного подключения. |
Результат: Storage. Объект SDK: используйте его методы, не передавайте целиком в emit.
Выбрать файловое S3-хранилище по коду подключения. Подключение нужно заранее настроить и разрешить для сайта.
result = ctx.storage('media')
browser
ctx.browser() -> Browser
Аргументы не нужны.
Результат: Browser. Объект SDK: используйте его методы, не передавайте целиком в emit.
Получить браузер для страниц, которым нужен Python, клики или прокрутка.
result = ctx.browser()
wildberries
ctx.wildberries() -> Wildberries
Аргументы не нужны.
Результат: Wildberries. Объект SDK: используйте его методы, не передавайте целиком в emit.
Получить готовый источник карточек для сайта, созданного из решения Wildberries. Список товаров и регионов берётся из настроек сайта. Все методы и пример.
result = ctx.wildberries()
dom
ctx.dom(html, base_url=None) -> Dom
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
html |
str |
Да | HTML-строка, не путь/URL для загрузки. |
base_url |
str | None |
Нет, default в сигнатуре | Базовый URL для относительных ссылок. |
Результат: Dom. Объект SDK: используйте его методы, не передавайте целиком в emit.
Разобрать уже полученный HTML. base_url нужен для преобразования относительных ссылок в полные.
result = ctx.dom('<a href="/product">Product</a>', 'https://example.com')
json
ctx.json(text) -> Any
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
text |
str |
Да | Текст для разбора, поиска или ввода. |
Результат: Any.
Разбирает JSON-текст средствами Python. При невалидном JSON выбрасывает ошибку; параметра глубины у Python-метода нет.
result = ctx.json('{"items": []}')
text
ctx.text() -> TextTools
Аргументы не нужны.
Результат: TextTools. Объект SDK: используйте его методы, не передавайте целиком в emit.
Получить помощник для очистки текста, цен и артикулов.
result = ctx.text()
url
ctx.url() -> UrlTools
Аргументы не нужны.
Результат: UrlTools. Объект SDK: используйте его методы, не передавайте целиком в emit.
Получить помощник для ссылок, query-параметров и шаблонов страниц.
result = ctx.url()
emit
ctx.emit(item, key=None) -> None
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
item |
dict[str, Any] |
Да | Словарь записи со строковыми полями и JSON-значениями. |
key |
str | None |
Нет, default в сигнатуре | Ключ записи, состояния, объекта или входа по назначению метода. |
Результат: None. Метод не возвращает значение данных.
Добавляет словарь Python в результат. Не передавайте объекты Response, Dom или Document целиком: соберите нужные поля. Стабильный key позволит обновить запись в следующем прогоне.
ctx.emit({'sku': 'A-1', 'price': 1250}, 'A-1')
flush
ctx.flush() -> None
Аргументы не нужны.
Результат: None. Метод не возвращает значение данных.
Отправить накопленную пачку записей, не дожидаясь автоматической отправки.
result = ctx.flush()
log
ctx.log(message, context=None, level='info') -> None
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
message |
str |
Да | Сообщение без паролей и приватного содержимого. |
context |
dict[str, Any] | None |
Нет, default в сигнатуре | Дополнительные JSON-совместимые поля журнала без секретов. |
level |
str |
Нет, default в сигнатуре | Уровень сообщения журнала. |
Результат: None. Метод не возвращает значение данных.
Записать понятное сообщение в журнал прогона. Дополнительные значения передаются объектом context.
ctx.log('Collection started', {'category': 'cables'}, 'info')
progress
ctx.progress(done, total=None, label=None, percent=None) -> None
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
done |
int |
Да | Уже выполненная часть работы. |
total |
int | None |
Нет, default в сигнатуре | Общий объём работы или None, если неизвестен. |
label |
str | None |
Нет, default в сигнатуре | Понятное пользователю название этапа. |
percent |
float | None |
Нет, default в сигнатуре | Необязательный известный процент выполнения. |
Результат: None. Метод не возвращает значение данных.
Показать выполненную часть работы и название пользовательского этапа. total можно не знать заранее.
ctx.progress(1, 10, 'Catalog')
metric
ctx.metric(name, value=1) -> None
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
name |
str |
Да | Имя поля, заголовка, файла, секрета или метрики по назначению метода. |
value |
Any |
Нет, default в сигнатуре | Значение по назначению метода; см. описание результата. |
Результат: None. Метод не возвращает значение данных.
Добавить числовую метрику выполнения, например количество пропущенных карточек.
ctx.metric('processed', 1)
param
ctx.param(name, default=None) -> Any
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
name |
str |
Да | Имя поля, заголовка, файла, секрета или метрики по назначению метода. |
default |
Any |
Нет, default в сигнатуре | Резервное значение при отсутствии результата. |
Результат: Any.
Получить один параметр запуска. default используется, если параметра нет или его значение None.
result = ctx.param('catalog_url', '')
params
ctx.params() -> dict[str, Any]
Аргументы не нужны.
Результат: dict[str, Any].
Получить сразу все параметры запуска.
result = ctx.params()
credential
ctx.credential(name) -> str
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
name |
str |
Да | Имя поля, заголовка, файла, секрета или метрики по назначению метода. |
Результат: str.
Получить именованный секрет для доступа к целевому сайту. Имя должно соответствовать настроенному ключу.
result = ctx.credential('site_token')
sleep
ctx.sleep(ms) -> None
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
ms |
int |
Да | Длительность паузы в миллисекундах; платформа ограничивает 0–60000. |
Результат: None. Метод не возвращает значение данных.
Сделать контролируемую паузу. Аргумент измеряется в миллисекундах.
ctx.sleep(250)
cancelled
ctx.cancelled() -> bool
Аргументы не нужны.
Результат: bool.
Узнать, запросил ли пользователь остановку. Проверяйте в длительных циклах.
result = ctx.cancelled()
abort
ctx.abort(reason) -> NoReturn
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
reason |
str |
Да | Безопасное и понятное объяснение остановки/ошибки. |
Результат: NoReturn.
Остановить выполнение с объяснением причины, сохранив состояние для возможного продолжения. Прогон получает статус остановленного. Если источник ответил ошибкой или сломался формат данных, используйте fail().
ctx.abort('Collection stopped')
fail
ctx.fail(reason) -> NoReturn
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
reason |
str |
Да | Безопасное и понятное объяснение остановки/ошибки. |
Результат: NoReturn.
Завершить прогон с ошибкой, когда источник недоступен или ответ не соответствует ожидаемому формату. В отличие от abort(), такая остановка отмечается как ошибка, а не отмена.
ctx.fail('Website returned an unexpected response')
now
ctx.now() -> datetime
Аргументы не нужны.
Результат: datetime.
Возвращает datetime.datetime с текущим временем UTC и timezone. Для JSON используйте ctx.now().isoformat(); объект datetime целиком не сериализуется в emit.
result = ctx.now()
ctx.mail() -> Mail
Аргументы не нужны.
Результат: Mail. Объект SDK: используйте его методы, не передавайте целиком в emit.
Открывает методы чтения входящего письма в почтовом сценарии. Содержимое доступно только для закреплённого события.
result = ctx.mail()
documents
ctx.documents() -> Documents
Аргументы не нужны.
Результат: Documents. Объект SDK: используйте его методы, не передавайте целиком в emit.
Открывает чтение и разбор разрешённых файлов Excel, PDF, Word, CSV и текста.
result = ctx.documents()
ai
ctx.ai() -> Ai
Аргументы не нужны.
Результат: Ai. Объект SDK: используйте его методы, не передавайте целиком в emit.
Открывает методы анализа, извлечения и преобразования данных. Сетевые вызовы AI синхронны и учитываются в бюджете пространства.
result = ctx.ai()
sources
ctx.sources() -> Sources
Аргументы не нужны.
Результат: Sources. Объект SDK: используйте его методы, не передавайте целиком в emit.
Открывает закреплённые входы процесса и локальное сравнение цен. Сами входы доступны только сценарию соответствующего процесса.
result = ctx.sources()
yandex_market
ctx.yandex_market() -> YandexMarket
Аргументы не нужны.
Результат: YandexMarket. Объект SDK: используйте его методы, не передавайте целиком в emit.
Получить настроенный источник Яндекс Маркета. Его методы сохраняют проверки готового решения.
result = ctx.yandex_market()
Ошибки и контекст выполнения
Все вызовы синхронны. Неверный аргумент или формат данных может вызвать ValueError/TypeError; отказ платформы или недоступность сервиса вызывает RuntimeError. Отсутствие элемента/значения даёт None либо пустой список только там, где это явно описано. Не превращайте любое исключение в пустой успешный результат. Методы внешних сервисов недоступны в преобразовании выгрузки; см. ограничения преобразований и среду.
captcha
captcha() -> Captcha
Возвращает API явных заданий. Каталог и оценка цены не создают платное задание. Создание, получение статуса и обратная связь работают через учёт пространства в облаке и на агенте.