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

Course searching fixes #4

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open

Conversation

tomaspemora
Copy link
Contributor

Se mejora la lógica en helpers.py para clasificar cursos según su estado y fecha, incluyendo casos sin cursos destacados y ordenándolos por proximidad a la fecha actual. También se refactorizan nombres de variables y se actualizan los tests para soportar parámetros de fecha en las pruebas.

…red `get_course_ctgs` function to fix variable naming issues. Added `classify_and_sort_courses` function to classify courses based on state and date, including handling for cases with no featured courses. Updated tests to support `start_date` parameter in `CourseFactory.create` calls.

# Sorting each state group by proximity to the present
def sort_key_start(course):

Choose a reason for hiding this comment

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

Por orden del código estas funciones deberían quedar afuera de la función

return float('inf')

def sort_key_end(course):

Choose a reason for hiding this comment

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

mismo comentario de arriba

return sorted_courses


Choose a reason for hiding this comment

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

eliminar lineas en blanco

Classify and sort courses based on their state and proximity to the current date.
"""
# Classify courses by state

Choose a reason for hiding this comment

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

esta comentario quedo como flotando por así decirlo

Copy link
Contributor

@fsologureng fsologureng left a comment

Choose a reason for hiding this comment

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

En general veo que el código está ok, aunque todavía tiene puntos de optimización. El código de la función classify_and_sort_courses es bien caro en tiempo y espacio, y creo que empeorará considerablemente el desempeño de la presentación de cursos featured y por categorías, el cual ya tiene un problema de escala importante. Ese problema se va a ir mostrando gradualmente a medida que crezca la cantidad de cursos.

Los pedidos de este review tienen más que ver con facilitar la comprensión del funcionamiento.

if ret_courses['featured']:
return ret_courses, mc_courses
del ret_courses['featured']
if featured_courses:
Copy link
Contributor

Choose a reason for hiding this comment

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

Esta condición quedaría más clara si explicitara el no-vacío del arreglo. Algo como len(featured_courses) > 0.

mc_courses[course.id] = {'name': course_class.MainClass.name,'logo': course_class.MainClass.logo,'days_left': days_left}
else:
if course_class.MainClass:
days_left = (course_start - today).days
Copy link
Contributor

Choose a reason for hiding this comment

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

Este código está duplicado. Todo el if course_class.MainClass: puede ir 1 sola vez fuera del if course_class.is_featured_course: porque se hace idénticamente en el else.
Ojo que esto significa, además, que antes el mc_courses sólo incluía cursos "featured" por tanto hay un cambio de comportamiento en la vista asociada y ahora se agregan todos los cursos, lo cual tiene un impacto en en el uso de memoria del contexto.
Además, tiene un impacto en 2 condiciones para mostrar el curso en https://github.com/open-uchile/open-uchile-theme/blob/main/lms/templates/course.html#L35 y https://github.com/open-uchile/open-uchile-theme/blob/main/lms/templates/course.html#L39 que ahora buscan en un diccionario más grande.

categories = CourseCategory.objects.all().order_by('sequence')
if categories.exists():
for main in categories:
ret_courses[main.id] = {'id':main.id,'name':main.name, 'seq':main.sequence,'show_opt':main.show_opt, 'courses':[]}
Copy link
Contributor

Choose a reason for hiding this comment

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

Para qué es necesario agregar el id de la categoría al objeto si el mismo id está en la llave para indexarlo?

Copy link
Contributor

Choose a reason for hiding this comment

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

Confunde mucho que el nombre de la variable para almacenar las categorías se llame ret_courses cuando almacena categorías. Dado que el caso es un else del caso "featured" se podría usar otra variable para evitar esa confusión.

# If no featured courses, proceed to build categories
categories = CourseCategory.objects.all().order_by('sequence')
if categories.exists():
for main in categories:
Copy link
Contributor

Choose a reason for hiding this comment

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

Si se puede renombrar esta variable iterable en el for, sería de ayuda para entender el código. Como está ahora toda categoría es una "main", lo cual es raro. Podría ser cat o ctg.

pass
# Apply classification and sorting to courses in each category
for key in ret_courses:
if key != 'featured':
Copy link
Contributor

Choose a reason for hiding this comment

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

Me parece que con tu refactor está condición pasa a ser siempre verdadera.


# Combine the lists
sorted_courses = (
Copy link
Contributor

Choose a reason for hiding this comment

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

No entendí para qué trabajar los grupos por separado si dp se van a juntar todos; Qué hace este "combine" exactamente? concatena los arreglos uno tras otro? me hace dudar el paréntesis redondo en el envoltorio.

mc_courses= {}
today = timezone.now() # Get timezone-aware current datetime
Copy link
Contributor

Choose a reason for hiding this comment

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

No tengo claro si esta fecha está en UTC o no, y me parece que debería.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: In Progress
Development

Successfully merging this pull request may close these issues.

3 participants