From fa89ef8b988e1796697539d3fc72292b0021b74a Mon Sep 17 00:00:00 2001 From: Raphael Odini Date: Wed, 13 Mar 2024 14:22:04 +0100 Subject: [PATCH] feat: new Product.ecoscore_grade field (#247) --- ...5b4775_add_product_ecoscore_grade_field.py | 30 +++++++++++++++++++ app/models.py | 1 + app/schemas.py | 6 +++- app/utils.py | 1 + tests/integration/test_api.py | 3 ++ 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 alembic/versions/20240309_1254_7055fe5b4775_add_product_ecoscore_grade_field.py diff --git a/alembic/versions/20240309_1254_7055fe5b4775_add_product_ecoscore_grade_field.py b/alembic/versions/20240309_1254_7055fe5b4775_add_product_ecoscore_grade_field.py new file mode 100644 index 00000000..d2db0c43 --- /dev/null +++ b/alembic/versions/20240309_1254_7055fe5b4775_add_product_ecoscore_grade_field.py @@ -0,0 +1,30 @@ +"""Add Product ecoscore_grade field + +Revision ID: 7055fe5b4775 +Revises: d98171064c5a +Create Date: 2024-03-09 12:54:14.104481 + +""" +from typing import Sequence, Union + +import sqlalchemy as sa + +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "7055fe5b4775" +down_revision: Union[str, None] = "d98171064c5a" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column("products", sa.Column("ecoscore_grade", sa.String(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column("products", "ecoscore_grade") + # ### end Alembic commands ### diff --git a/app/models.py b/app/models.py index 45a88fdd..977c7882 100644 --- a/app/models.py +++ b/app/models.py @@ -68,6 +68,7 @@ class Product(Base): image_url: Mapped[str | None] nutriscore_grade: Mapped[str | None] + ecoscore_grade: Mapped[str | None] unique_scans_n = mapped_column(Integer, nullable=False, server_default="0") prices: Mapped[list["Price"]] = relationship(back_populates="product") diff --git a/app/schemas.py b/app/schemas.py index c2193634..24ffc465 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -95,7 +95,10 @@ class ProductFull(ProductCreate): ], ) nutriscore_grade: str | None = Field( - description="Nutriscore grade.", examples=["a", "unknown"] + description="Nutriscore grade.", examples=["a", "unknown", "not-applicable"] + ) + ecoscore_grade: str | None = Field( + description="Ecoscore grade.", examples=["a", "unknown", "not-applicable"] ) unique_scans_n: int = Field( description="number of unique scans of the product on Open Food Facts.", @@ -456,6 +459,7 @@ class ProductFilter(Filter): labels_tags__contains: Optional[str] | None = None brands__like: Optional[str] | None = None nutriscore_grade: Optional[str] | None = None + ecoscore_grade: Optional[str] | None = None unique_scans_n__gte: Optional[int] | None = None price_count: Optional[int] | None = None price_count__gte: Optional[int] | None = None diff --git a/app/utils.py b/app/utils.py index e1973d89..22489699 100644 --- a/app/utils.py +++ b/app/utils.py @@ -50,6 +50,7 @@ def init_sentry( "labels_tags", "image_url", "nutriscore_grade", + "ecoscore_grade", "unique_scans_n", ] diff --git a/tests/integration/test_api.py b/tests/integration/test_api.py index 4790d8d5..308e815a 100644 --- a/tests/integration/test_api.py +++ b/tests/integration/test_api.py @@ -55,6 +55,7 @@ def override_get_db(): brands_tags=["clement-faugier"], labels_tags=[], nutriscore_grade="d", + ecoscore_grade="b", unique_scans_n=20, ) PRODUCT_2 = ProductCreate( @@ -68,6 +69,7 @@ def override_get_db(): brands_tags=["clement-faugier"], labels_tags=[], nutriscore_grade="d", + ecoscore_grade="c", unique_scans_n=10, ) PRODUCT_3 = ProductCreate( @@ -81,6 +83,7 @@ def override_get_db(): brands_tags=["paysans-d-ici", "ethiquable"], labels_tags=["en:fair-trade", "en:organic", "en:made-in-france"], nutriscore_grade="c", + ecoscore_grade="b", unique_scans_n=0, ) LOCATION = LocationFull(