Perekrestok (Перекрёсток) - https://www.perekrestok.ru/
Библиотека полностью повторяет сетевую работу обычного пользователя на сайте.
pip install perekrestok_apifrom perekrestok_api import PerekrestokAPI
from perekrestok_api import abstraction
import asyncio
async def main():
async with PerekrestokAPI() as Api:
geopos_handler = await Api.Geolocation.current()
geopos = geopos_handler.json()
print(f'Текущий город сессии {geopos["content"]["city"]["name"]} ({geopos["content"]["city"]["id"]})')
# Получаем список категорий
categories = await Api.Catalog.tree()
cat = categories.json()
print(f'Список категорий: {len(cat["content"]["items"])}')
# Выводим первую категорию
print(f'Категория: {cat["content"]["items"][0]["category"]["title"]} ({cat["content"]["items"][0]["category"]["id"]})')
# Получаем список товаров
filter = abstraction.CatalogFeedFilter()
filter.CATEGORY_ID = cat["content"]["items"][0]["category"]["id"]
filter.PROMO_LISTING = 27
products = await Api.Catalog.feed(filter=filter)
prod = products.json()
# Выводим первый товар
print(f'Первый товар: {prod["content"]["items"][0]["title"]} ({prod["content"]["items"][0]["id"]})')
# Запуск асинхронной функции main
if __name__ == "__main__":
asyncio.run(main())> Текущий город сессии Москва (81)
> Список категорий: 31
> Категория: Встречаем Новый год (1692)
> Первый товар: Икра Камчатское Море горбуши зернистая солёная, 320г (487063)Для более подробной информации смотрите референсы документации.
В проекте используется автотест-фреймворк из human_requests:
- endpoint-методы в бизнес-коде помечаются
@autotest; - pytest-плагин сам находит эти методы и запускает их;
- JSON-ответы проверяются через
pytest-jsonschema-snapshot(schemashot); - параметры вызова и пост-обработка результата регистрируются в
tests/endpoints/*через:@autotest_params@autotest_hook@autotest_depends_on
Минимальная конфигурация уже включена в pyproject.toml:
[tool.pytest.ini_options]
anyio_mode = "auto"
autotest_start_class = "perekrestok_api.PerekrestokAPI"
autotest_typecheck = "strict"Запуск тестов:
pytestВажно:
- используется
pytest-anyio(неpytest-asyncio); - проверка типов аргументов
@autotest_paramsберётся из аннотаций endpoint-методов (autotest_typecheck = "strict"); - ручные тесты остаются только для кейсов, которые не относятся к JSON-схемам endpoint-методов (например,
download_image).
If you have any problems using it / suggestions, do not hesitate to write to the project's GitHub!