From d7f21cdd81ce304f4264730470e5b952c845b1c9 Mon Sep 17 00:00:00 2001 From: hlad Date: Tue, 9 Aug 2022 22:40:11 +0200 Subject: [PATCH] add product composition --- pyrohlik/client.py | 4 ++++ pyrohlik/endpoints.py | 2 ++ pyrohlik/models/product.py | 46 +++++++++++++++++++++++++++++++++++++- 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/pyrohlik/client.py b/pyrohlik/client.py index eff051e..bb11ace 100644 --- a/pyrohlik/client.py +++ b/pyrohlik/client.py @@ -18,8 +18,12 @@ class Rohlik(APIClient): product = self.get(Endpoints.product.format(product_id=product_id)) prices = self.get(Endpoints.prices.format(product_id=product_id)) stock = self.get(Endpoints.stock.format(product_id=product_id)) + description = self.get(Endpoints.description.format(product_id=product_id)) + composition = self.get(Endpoints.composition.format(product_id=product_id)) product['prices'] = prices product['stock'] = stock + product['description'] = description['description'] + product['composition'] = composition return product @serialize() diff --git a/pyrohlik/endpoints.py b/pyrohlik/endpoints.py index 55fcbe1..301adf5 100644 --- a/pyrohlik/endpoints.py +++ b/pyrohlik/endpoints.py @@ -8,4 +8,6 @@ class Endpoints: recipe: str = 'services/frontend-service/recipe/{recipe_id}' prices: str = 'api/v1/products/{product_id}/prices' stock: str = 'api/v1/products/{product_id}/stock' + description: str = 'api/v1/products/{product_id}/description' + composition: str = 'api/v1/products/{product_id}/composition' cart: str = 'api/v2/cart' \ No newline at end of file diff --git a/pyrohlik/models/product.py b/pyrohlik/models/product.py index a9dd13b..ee88e21 100644 --- a/pyrohlik/models/product.py +++ b/pyrohlik/models/product.py @@ -57,7 +57,49 @@ class Stock(BaseModel): shelf_life: Optional[str] = Field(..., alias='shelfLife') billable_packaging: Optional[str] = Field(..., alias='billablePackaging') sales: List[SaleStock] - in_stock: bool = Field(..., alias='inStock') + in_stock: bool = Field(..., alias='inStock') + + +class Ingredient(BaseModel): + type: str + ingredients: List['Ingredient'] + title: str + code: Optional[str] = None + link: Optional[str] = None + + +class Allergens(BaseModel): + contained: List[str] + possibly_contained: List[str] = Field(..., alias='possiblyContained') + + +class AmountUnit(BaseModel): + amount: Decimal + unit: str + + +class NutritionaValues(BaseModel): + energy_kj: AmountUnit = Field(..., alias='energyKJ') + energy_k_cal: AmountUnit = Field(..., alias='energyKCal') + fats: AmountUnit + saturated_fats: AmountUnit = Field(..., alias='saturatedFats') + carbohydrates: AmountUnit + sugars: AmountUnit + protein: AmountUnit + salt: AmountUnit + fiber: AmountUnit + + +class NutritionalValue(BaseModel): + portion: str + values: NutritionaValues + + +class Composition(BaseModel): + nutritional_values: List[NutritionalValue] = Field(..., alias='nutritionalValues') + ingredients: List[Ingredient] + plain_ingredients: Optional[str] = Field(..., alias='plainIngredients') + allergens: Optional[Allergens] class Product(BaseModel): @@ -82,3 +124,5 @@ class Product(BaseModel): attachments: List prices: ProductPrice stock: Stock + description: str + composition: Composition