Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add information knowledge panel #124

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open

Conversation

raphael0202
Copy link
Contributor

@raphael0202 raphael0202 commented Aug 18, 2023

Add a first implementation of information knowledge panel for facets.

Example of input YAML file:

items:
  - lang: fr
    country: fr
    tag_type: label
    value_tag: en:ab-agriculture-biologique
    content: |
      La marque Agriculture biologique (AB) est une certification contrôlée par l'Agence bio, sous la tutelle du ministère de l'Agriculture et de la Souveraineté alimentaire.
      Elle vous permet d'identifier des produits 100 % bio ou, pour les produits transformés, composés à 95 % de produits agricoles bio.
      La marque AB repose sur la notion de respect de la biodiversité et la préservation des ressources naturelles.
      Les produits biologiques sont identifiables grâce à deux logos : l’Eurofeuille, logo bio européen, et la marque AB.
    
      ## La certification « agriculture biologique » (AB)

      La certification AB atteste que la production a eu recours à des pratiques de culture et d’élevage soucieuses du respect de la santé des consommateurs et des équilibres naturels. Le logo identifie les produits 100% bio ou les produits bio transformés contenant au moins 95 % des ingrédients élaborés sans produits chimiques tels que pesticides et engrais chimiques de synthèse, sans antibiotiques ni OGM. Ce logo est désormais facultatif au profit du logo bio européen.
      
      ## Le logo européen "agriculture biologique" ou "eurofeuille"
    
      Le logo bio européen est obligatoire sur les produits bio alimentaires pré-emballés au sein de l’Union Européenne. Il comprend le code de l’organisme certificateur (FR-BIO-XX) qui a contrôlé la conformité du produit bio aux règles définies. La mention Agriculture suivi du nom de pays ou UE informe qu’au moins 98% des ingrédients du produit en sont originaires. Dans le cas contraire, c’est la mention Agriculture NON-UE qui est affichée.
  - lang: fr
    country: world
    tag_type: label
    value_tag: fr:haute-valeur-environnementale
    content: |
      On le retrouve sur les produits issus d’exploitation agricole, engagé dans la transition écologique de l'agriculture. Son exigence porte sur 4 thématiques :

      - la préservation de la biodiversité : fleurs, insectes, arbres et haies ;
      - La gestion de la ressource en eau ;
      - La gestion de la fertilisation ;
      - La stratégie phytosanitaire.

      Acheter des produits issus des fermes certifiées haute valeur environnementale, c’est encourager les efforts des agriculteurs en faveur de la biodiversité et de l'environnement. Les exploitations agricoles sont contrôlées par un organisme indépendant agréé par l'État. Le nombre d'agriculteurs engagés dans cette démarche est en constante augmentation. Le Gouvernement veut accélérer ce dynamisme et a fixé l’objectif de 50 000 fermes certifiées haute valeur environnementale d'ici à 2030.

app/information_kp.py Fixed Show fixed Hide fixed
app/information_kp.py Fixed Show fixed Hide fixed
@raphael0202 raphael0202 force-pushed the add-information-kp branch 2 times, most recently from 5b90d47 to 9003c6a Compare August 18, 2023 11:55
@raphael0202 raphael0202 temporarily deployed to facets-kp-net August 18, 2023 12:17 — with GitHub Actions Inactive
@raphael0202 raphael0202 temporarily deployed to facets-kp-net August 18, 2023 12:35 — with GitHub Actions Inactive
package upgrade broke previous method of exposing prometheus metrics
@raphael0202 raphael0202 temporarily deployed to facets-kp-net August 18, 2023 12:41 — with GitHub Actions Inactive
@raphael0202 raphael0202 temporarily deployed to facets-kp-net August 18, 2023 12:56 — with GitHub Actions Inactive
Copy link
Member

@alexgarel alexgarel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems we are going to implement it in product opener instead… so I didn't finish the review.

Comment on lines +188 to +196
def unique_items(cls, v):
count = Counter(
(item.lang, item.tag_type, item.value_tag, item.country, item.category_tag)
for item in v
)
most_common = count.most_common(1)
if most_common and most_common[0][1] > 1:
raise ValueError(f"more than 1 item with fields={most_common[0][0]}")
return v
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a doc string to explain a bit more what you are doing here (what and why ?)

Comment on lines +121 to +122
add_contribution_panels: bool = True,
add_information_panels: bool = True,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I proposed to instead use an include/exclude list, as it may be more flexible in the future. see #38

If we start to use this API instead, we will lack this flexibility.

if soon_value.value:
panels.update(soon_value.value)

if add_information_panels and value_tag is not None:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why don't you use active_translation here ? If it's legit, add a comment to explain why.

Comment on lines +177 to +178
facet_tag_safe = secure_filename(facet_tag)
value_tag_safe = secure_filename(value_tag)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Comment on lines +180 to +192
if facet_tag_safe and value_tag_safe:
file_path = find_kp_html_path(
HTML_DIR, facet_tag_safe, value_tag_safe, country, lang_code
)
panel = None
if file_path is not None:
async with async_open(file_path, "r") as f:
html_content = await f.read()
panel = {
"elements": [{"element_type": "text", "text_element": {"html": html_content}}],
"title_element": {"title": "Description"},
}
panels["Description"] = panel
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why didn't you follow the pattern above and just add a function to do things asynchronously ? It seem to me it hinders readability to break the pattern.

Normally the add_information_panels can be check to decide to add or not the task to soon_panels.
And all the rest should be done inside the method (you can return None to have no panel added).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: 🏗 In progress
Development

Successfully merging this pull request may close these issues.

2 participants