coderedcorp / coderedcorp/coderedcms

[BUG] Incorrect methodology for `is_menu_item_dropdown` simple tag

Abierto
#184 1 comentario 0 reacciones 0 asignados Ver en GitHub
Area: Core ⚙ Type: Tech Debt
Lenguaje dominante
Python
Estrellas
765
Forks
154
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

**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.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Busca en el repositorio la etiqueta simple is_menu_item_dropdown e inspecciona cómo se usa su valor page. Reproduce el caso en el que page está ausente o tiene un valor predeterminado incorrecto y, después, verifica que la etiqueta evita llamar a métodos de page cuando su valor no es una página, al tiempo que conserva el comportamiento de los subenlaces y los enlaces secundarios.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
django, python
Área
backend
Tipo de issue
Error
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.