11"""Работа с каталогом"""
22
3+ from __future__ import annotations
4+
35import urllib .parse
6+ from dataclasses import dataclass
47from typing import TYPE_CHECKING , Optional
58
9+ from human_requests import ApiChild , ApiParent , api_child_field , autotest
610from human_requests .abstraction import FetchResponse , HttpMethod
711
812if TYPE_CHECKING :
9- from ..manager import ChizhikAPI
13+ from ..manager import ChizhikAPI # noqa: F401
1014
1115
12- class ClassCatalog :
16+ @dataclass (init = False )
17+ class ClassCatalog (ApiChild ["ChizhikAPI" ], ApiParent ):
1318 """Методы для работы с каталогом товаров.
1419
1520 Включает поиск товаров, получение информации о категориях,
1621 работу с фидами товаров и отзывами.
1722 """
1823
19- def __init__ (self , parent : "ChizhikAPI" , CATALOG_URL : str ):
20- self ._parent : "ChizhikAPI" = parent
21- self .CATALOG_URL : str = CATALOG_URL
22- self .Product : ProductService = ProductService (
23- parent = self ._parent , CATALOG_URL = CATALOG_URL
24- )
25- """Сервис для работы с товарами в каталоге."""
24+ Product : ProductService = api_child_field (
25+ lambda parent : ProductService (parent .parent )
26+ )
27+ """Сервис для работы с товарами в каталоге."""
28+
29+ def __init__ (self , parent : "ChizhikAPI" ):
30+ super ().__init__ (parent )
31+ ApiParent .__post_init__ (self )
2632
33+ @autotest
2734 async def tree (self , city_id : Optional [str ] = None ) -> FetchResponse :
2835 """Получить дерево категорий."""
29- url = f"{ self .CATALOG_URL } /catalog/unauthorized/categories/"
36+ url = f"{ self ._parent . CATALOG_URL } /catalog/unauthorized/categories/"
3037 if city_id :
3138 url += f"?city_id={ city_id } "
3239 return await self ._parent ._request (HttpMethod .GET , url )
3340
41+ @autotest
3442 async def products_list (
3543 self ,
3644 page : int = 1 ,
@@ -39,7 +47,7 @@ async def products_list(
3947 search : Optional [str ] = None ,
4048 ) -> FetchResponse :
4149 """Получить список продуктов в категории."""
42- url = f"{ self .CATALOG_URL } /catalog/unauthorized/products/?page={ page } "
50+ url = f"{ self ._parent . CATALOG_URL } /catalog/unauthorized/products/?page={ page } "
4351 if category_id :
4452 url += f"&category_id={ category_id } "
4553 if city_id :
@@ -49,13 +57,10 @@ async def products_list(
4957 return await self ._parent ._request (HttpMethod .GET , url )
5058
5159
52- class ProductService :
60+ class ProductService ( ApiChild [ "ChizhikAPI" ]) :
5361 """Сервис для работы с товарами в каталоге."""
5462
55- def __init__ (self , parent : "ChizhikAPI" , CATALOG_URL : str ):
56- self ._parent : "ChizhikAPI" = parent
57- self .CATALOG_URL : str = CATALOG_URL
58-
63+ @autotest
5964 async def info (
6065 self , product_id : int , city_id : Optional [str ] = None
6166 ) -> FetchResponse :
@@ -69,7 +74,7 @@ async def info(
6974 Response: Ответ от сервера с информацией о товаре.
7075 """
7176
72- url = f"{ self .CATALOG_URL } /catalog/unauthorized/products/{ product_id } /"
77+ url = f"{ self ._parent . CATALOG_URL } /catalog/unauthorized/products/{ product_id } /"
7378 if city_id :
7479 url += f"?city_id={ city_id } "
7580 return await self ._parent ._request (HttpMethod .GET , url )
0 commit comments