Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Perekrestok API (not official)

Tests last run (ISO) Tests PyPI - Python Version PyPI - Package Version PyPI - Downloads License Discord Telegram

Perekrestok (Перекрёсток) - https://www.perekrestok.ru/

⭐ Star us on GitHub | 📚 Read the Docs | 🐛 Report Bug

Принцип работы

Библиотека полностью повторяет сетевую работу обычного пользователя на сайте.

Usage

pip install perekrestok_api
from 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)

Для более подробной информации смотрите референсы документации.


Автотесты API (pytest + snapshots)

В проекте используется автотест-фреймворк из 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).

Report

If you have any problems using it / suggestions, do not hesitate to write to the project's GitHub!