diff --git a/frappe/app.py b/frappe/app.py index adf2bfa8c9..9495268f00 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -18,7 +18,8 @@ import frappe.handler import frappe.auth import frappe.api import frappe.utils.response -import frappe.website.render +import frappe.website.serve +import frappe.website.page from frappe.utils import get_site_name, sanitize_html from frappe.middlewares import StaticDataMiddleware from frappe.utils.error import make_error_snapshot @@ -73,7 +74,10 @@ def application(request): response = frappe.utils.response.download_private_file(request.path) elif request.method in ('GET', 'HEAD', 'POST'): - response = frappe.website.render.render() + if frappe.conf.flag_new_website: + response = frappe.website.serve.render() + else: + response = frappe.website.render.render() else: raise NotFound diff --git a/frappe/tests/test_website_new.py b/frappe/tests/test_website_new.py index aa9e77d5ba..34786611d6 100644 --- a/frappe/tests/test_website_new.py +++ b/frappe/tests/test_website_new.py @@ -8,6 +8,12 @@ from frappe.website.utils import get_home_page from frappe.utils import set_request class TestWebsite(unittest.TestCase): + def setUp(self): + frappe.set_user('Guest') + + def tearDown(self): + frappe.set_user('Administrator') + def test_static_page(self): set_request(method='GET', path='/_test/static-file-test.png') response = serve.StaticPage().get() @@ -16,5 +22,14 @@ class TestWebsite(unittest.TestCase): def test_error_page(self): set_request(method='GET', path='/error') response = serve.TemplatePage().get() + self.assertEquals(response.status_code, 500) + + def test_login(self): + set_request(method='GET', path='/login') + response = serve.TemplatePage().get() self.assertEquals(response.status_code, 200) - print(response.get_data()) + + html = frappe.safe_decode(response.get_data()) + + self.assertTrue('// login.js' in html) + self.assertTrue('' in html) diff --git a/frappe/website/serve.py b/frappe/website/serve.py index 3f3e1d4571..a0710b9988 100644 --- a/frappe/website/serve.py +++ b/frappe/website/serve.py @@ -22,6 +22,8 @@ def render(path=None, http_status_code=None): path = resolve_path(path) data = None + # there is no way to determine the type of the page based on the route + # so evaluate each type of page sequentially response = StaticPage(path).get() if not response: response = TemplatePage(path).get() @@ -93,7 +95,8 @@ class TemplatePage(WebPage): def find_page_in_app(self, app): ''' - Searches for file matching the path in the /www and /templates/pages folders + Searches for file matching the path in the /www + and /templates/pages folders ''' app_path = frappe.get_app_path(app) folders = get_start_folders() @@ -128,9 +131,7 @@ class TemplatePage(WebPage): self.set_pymodule() self.setup_template() - - if self.pymodule_name: - self.update_context() + self.update_context() if self.source: html = frappe.render_template(self.source, self.context) @@ -178,18 +179,19 @@ class TemplatePage(WebPage): self.context.update(get_website_settings(self.context)) self.context.update(frappe.local.conf.get("website_context") or {}) - self.pymodule = frappe.get_module(self.pymodule_name) - - if self.pymodule: + if self.pymodule_name: + self.pymodule = frappe.get_module(self.pymodule_name) self.set_pymodule_properties() data = self.run_pymodule_method('get_context') + # some methods may return a "context" object if data: self.context.update(data) # TODO: self.context.children = self.run_pymodule_method('get_children') self.context.developer_mode = frappe.conf.developer_mode + self.status_code = self.context.http_status_code or 200 def set_pymodule_properties(self): for prop in ("base_template_path", "template", "no_cache", "sitemap", @@ -203,7 +205,7 @@ class TemplatePage(WebPage): def run_pymodule_method(self, method): if hasattr(self.pymodule, method): try: - return getattr(self.pymodule, method)(self) + return getattr(self.pymodule, method)(self.context) except (frappe.PermissionError, frappe.DoesNotExistError, frappe.Redirect): raise except: diff --git a/frappe/www/error.py b/frappe/www/error.py index 161038373d..9274fe7c26 100644 --- a/frappe/www/error.py +++ b/frappe/www/error.py @@ -8,5 +8,7 @@ no_cache = 1 def get_context(context): if frappe.flags.in_migrate: return + context.http_status_code = 500 + print(frappe.get_traceback().encode("utf-8")) return {"error": frappe.get_traceback().replace("<", "<").replace(">", ">") }