Browse Source

fix: status_code, login page works

version-14
Rushabh Mehta 4 years ago
parent
commit
3f38c33004
4 changed files with 34 additions and 11 deletions
  1. +6
    -2
      frappe/app.py
  2. +16
    -1
      frappe/tests/test_website_new.py
  3. +10
    -8
      frappe/website/serve.py
  4. +2
    -0
      frappe/www/error.py

+ 6
- 2
frappe/app.py View File

@@ -18,7 +18,8 @@ import frappe.handler
import frappe.auth import frappe.auth
import frappe.api import frappe.api
import frappe.utils.response 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.utils import get_site_name, sanitize_html
from frappe.middlewares import StaticDataMiddleware from frappe.middlewares import StaticDataMiddleware
from frappe.utils.error import make_error_snapshot from frappe.utils.error import make_error_snapshot
@@ -73,7 +74,10 @@ def application(request):
response = frappe.utils.response.download_private_file(request.path) response = frappe.utils.response.download_private_file(request.path)


elif request.method in ('GET', 'HEAD', 'POST'): 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: else:
raise NotFound raise NotFound


+ 16
- 1
frappe/tests/test_website_new.py View File

@@ -8,6 +8,12 @@ from frappe.website.utils import get_home_page
from frappe.utils import set_request from frappe.utils import set_request


class TestWebsite(unittest.TestCase): class TestWebsite(unittest.TestCase):
def setUp(self):
frappe.set_user('Guest')

def tearDown(self):
frappe.set_user('Administrator')

def test_static_page(self): def test_static_page(self):
set_request(method='GET', path='/_test/static-file-test.png') set_request(method='GET', path='/_test/static-file-test.png')
response = serve.StaticPage().get() response = serve.StaticPage().get()
@@ -16,5 +22,14 @@ class TestWebsite(unittest.TestCase):
def test_error_page(self): def test_error_page(self):
set_request(method='GET', path='/error') set_request(method='GET', path='/error')
response = serve.TemplatePage().get() 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) 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('<!-- login.html -->' in html)

+ 10
- 8
frappe/website/serve.py View File

@@ -22,6 +22,8 @@ def render(path=None, http_status_code=None):
path = resolve_path(path) path = resolve_path(path)
data = None 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() response = StaticPage(path).get()
if not response: if not response:
response = TemplatePage(path).get() response = TemplatePage(path).get()
@@ -93,7 +95,8 @@ class TemplatePage(WebPage):


def find_page_in_app(self, app): 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) app_path = frappe.get_app_path(app)
folders = get_start_folders() folders = get_start_folders()
@@ -128,9 +131,7 @@ class TemplatePage(WebPage):


self.set_pymodule() self.set_pymodule()
self.setup_template() self.setup_template()

if self.pymodule_name:
self.update_context()
self.update_context()


if self.source: if self.source:
html = frappe.render_template(self.source, self.context) 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(get_website_settings(self.context))
self.context.update(frappe.local.conf.get("website_context") or {}) 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() self.set_pymodule_properties()


data = self.run_pymodule_method('get_context') data = self.run_pymodule_method('get_context')

# some methods may return a "context" object # some methods may return a "context" object
if data: self.context.update(data) if data: self.context.update(data)


# TODO: self.context.children = self.run_pymodule_method('get_children') # TODO: self.context.children = self.run_pymodule_method('get_children')


self.context.developer_mode = frappe.conf.developer_mode self.context.developer_mode = frappe.conf.developer_mode
self.status_code = self.context.http_status_code or 200


def set_pymodule_properties(self): def set_pymodule_properties(self):
for prop in ("base_template_path", "template", "no_cache", "sitemap", for prop in ("base_template_path", "template", "no_cache", "sitemap",
@@ -203,7 +205,7 @@ class TemplatePage(WebPage):
def run_pymodule_method(self, method): def run_pymodule_method(self, method):
if hasattr(self.pymodule, method): if hasattr(self.pymodule, method):
try: try:
return getattr(self.pymodule, method)(self)
return getattr(self.pymodule, method)(self.context)
except (frappe.PermissionError, frappe.DoesNotExistError, frappe.Redirect): except (frappe.PermissionError, frappe.DoesNotExistError, frappe.Redirect):
raise raise
except: except:


+ 2
- 0
frappe/www/error.py View File

@@ -8,5 +8,7 @@ no_cache = 1


def get_context(context): def get_context(context):
if frappe.flags.in_migrate: return if frappe.flags.in_migrate: return
context.http_status_code = 500

print(frappe.get_traceback().encode("utf-8")) print(frappe.get_traceback().encode("utf-8"))
return {"error": frappe.get_traceback().replace("<", "&lt;").replace(">", "&gt;") } return {"error": frappe.get_traceback().replace("<", "&lt;").replace(">", "&gt;") }

Loading…
Cancel
Save