From 6d4e64059a6a967041a2efce28ed49b4fe22c326 Mon Sep 17 00:00:00 2001 From: Anand Chitipothu Date: Tue, 25 Jan 2022 07:12:17 +0530 Subject: [PATCH] feat: pass context to page extensions Pass the context to page extensions to allow them to make decisions based on the context. For example, an extension to load the course specific scripts. This is currently not possible because the course details are not availale to the page extensions. Made this possible by passing the context to page extensions. --- school/plugins.py | 5 +++++ school/www/batch/learn.py | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/school/plugins.py b/school/plugins.py index e320ee20..b5c72a9a 100644 --- a/school/plugins.py +++ b/school/plugins.py @@ -24,6 +24,11 @@ class PageExtension: `render_footer()` methods to inject whatever styles/scripts into the webpage. """ + def __init__(self): + self.context = frappe._dict() + + def set_context(self, context): + self.context = context def render_header(self): """Returns the HTML snippet to be included in the head section diff --git a/school/www/batch/learn.py b/school/www/batch/learn.py index c16b11ab..855e79f9 100644 --- a/school/www/batch/learn.py +++ b/school/www/batch/learn.py @@ -31,7 +31,7 @@ def get_context(context): "description": meta_info } - context.page_extensions = get_page_extensions() + context.page_extensions = get_page_extensions(context) context.page_context = { "course": context.course.name, "batch": context.get("batch") and context.batch.name, @@ -52,8 +52,10 @@ def get_lesson_index(course, batch, user): lesson = batch.get_current_lesson(user) return lesson and course.get_lesson_index(lesson) -def get_page_extensions(): +def get_page_extensions(context): default_value = ["school.plugins.PageExtension"] classnames = frappe.get_hooks("school_lesson_page_extensions") or default_value extensions = [frappe.get_attr(name)() for name in classnames] + for e in extensions: + e.set_context(context) return extensions