coderedcorp / coderedcorp/coderedcms

[BUG] Incorrect methodology for `is_menu_item_dropdown` simple tag

Ouverte
#184 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Area: Core ⚙ Type: Tech Debt
Langage dominant
Python
Étoiles
765
Forks
154
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

**Describe the bug**
A clear and concise description of what the bug is.

This code block:

@register.simple_tag
def is_menu_item_dropdown(value):
return \
len(value.get('sub_links', [])) > 0 or \
(
value.get('show_child_links', False) and \
len(value.get('page', []).get_children().live()) > 0
)

What if you actually hit the case where `value.get('page', [])` defaults to a list? Then `.get_children().live()` is being called on an object which doesn't have these methods. Also, probably shouldn't inline all of this for readability despite the faster evaluation.

One simple fix:

@register.simple_tag
def is_menu_item_dropdown(value):
has_sub_links = len(value.get('sub_links', [])) > 0
show_child_links = value.get('show_child_links', False)
page_has_children = False
if has_sub_links or show_child_links: # No need to evaluate the below if this case fails...
page = value.get('page')
if page is not None:
page_has_children= len(page.get_children().live()) > 0
return has_sub_links or (show_child_links and page_has_children)

This is also assuming you still want to be verbose with the evaluation into booleans here.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Recherchez dans le dépôt le simple tag is_menu_item_dropdown et examinez comment sa valeur page est utilisée. Reproduisez le cas où page est absente ou définie par défaut de manière incorrecte, puis vérifiez que le tag évite d’appeler des méthodes de page lorsque sa valeur n’est pas une page, tout en préservant le comportement des sous-liens et des liens enfants.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
django, python
Domaine
backend
Type d'issue
Bug
Difficulté
2/5
Temps estimé
1-3 heures
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.