@@ -6,7 +6,7 @@ from __future__ import unicode_literals | |||||
import urllib | import urllib | ||||
import frappe | import frappe | ||||
from frappe.utils import get_request_site_address, get_datetime, nowdate | from frappe.utils import get_request_site_address, get_datetime, nowdate | ||||
from frappe.website.router import get_pages, get_generator_routes | |||||
from frappe.website.router import get_pages, get_page_context_from_doctypes | |||||
no_cache = 1 | no_cache = 1 | ||||
no_sitemap = 1 | no_sitemap = 1 | ||||
@@ -23,7 +23,7 @@ def get_context(context): | |||||
"lastmod": nowdate() | "lastmod": nowdate() | ||||
}) | }) | ||||
for route, data in get_generator_routes().iteritems(): | |||||
for route, data in get_page_context_from_doctypes().iteritems(): | |||||
links.append({ | links.append({ | ||||
"loc": urllib.basejoin(host, urllib.quote((route or "").encode("utf-8"))), | "loc": urllib.basejoin(host, urllib.quote((route or "").encode("utf-8"))), | ||||
"lastmod": get_datetime(data.get("modified")).strftime("%Y-%m-%d") | "lastmod": get_datetime(data.get("modified")).strftime("%Y-%m-%d") | ||||
@@ -5,10 +5,10 @@ from __future__ import unicode_literals | |||||
import frappe | import frappe | ||||
from frappe.website.doctype.website_settings.website_settings import get_website_settings | from frappe.website.doctype.website_settings.website_settings import get_website_settings | ||||
from frappe.website.router import get_route_info | |||||
from frappe.website.router import get_page_context | |||||
def get_context(path, args=None): | def get_context(path, args=None): | ||||
context = get_route_info(path) | |||||
context = get_page_context(path) | |||||
if args: | if args: | ||||
context.update(args) | context.update(args) | ||||
@@ -7,23 +7,21 @@ import frappe, os | |||||
from frappe.website.utils import can_cache, delete_page_cache | from frappe.website.utils import can_cache, delete_page_cache | ||||
from frappe.model.document import get_controller | from frappe.model.document import get_controller | ||||
def get_route_info(path): | |||||
sitemap_options = None | |||||
cache_key = "sitemap_options:{0}:{1}".format(path, frappe.local.lang) | |||||
def get_page_context(path): | |||||
page_context = None | |||||
if can_cache(): | if can_cache(): | ||||
sitemap_options_cache = frappe.cache().hget("sitemap_options", path) or {} | |||||
sitemap_options = sitemap_options_cache.get(frappe.local.lang, None) | |||||
page_context_cache = frappe.cache().hget("page_context", path) or {} | |||||
page_context = page_context_cache.get(frappe.local.lang, None) | |||||
if not sitemap_options: | |||||
sitemap_options = build_route(path) | |||||
if can_cache(sitemap_options.no_cache): | |||||
sitemap_options_cache[frappe.local.lang] = sitemap_options | |||||
frappe.cache().hset("sitemap_options", path, sitemap_options_cache) | |||||
if not page_context: | |||||
page_context = make_page_context(path) | |||||
if can_cache(page_context.no_cache): | |||||
page_context_cache[frappe.local.lang] = page_context | |||||
frappe.cache().hset("page_context", path, page_context_cache) | |||||
return sitemap_options | |||||
return page_context | |||||
def build_route(path): | |||||
def make_page_context(path): | |||||
context = resolve_route(path) | context = resolve_route(path) | ||||
if not context: | if not context: | ||||
raise frappe.DoesNotExistError | raise frappe.DoesNotExistError | ||||
@@ -41,20 +39,22 @@ def resolve_route(path): | |||||
The only exceptions are `/about` and `/contact` these will be searched in Web Pages | The only exceptions are `/about` and `/contact` these will be searched in Web Pages | ||||
first before checking the standard pages.""" | first before checking the standard pages.""" | ||||
if path not in ("about", "contact"): | if path not in ("about", "contact"): | ||||
route = get_page_route(path) | |||||
if route: return route | |||||
return get_generator_route(path) | |||||
context = get_page_context_from_template(path) | |||||
if context: | |||||
return context | |||||
return get_page_context_from_doctype(path) | |||||
else: | else: | ||||
route = get_generator_route(path) | |||||
if route: return route | |||||
return get_page_route(path) | |||||
context = get_page_context_from_doctype(path) | |||||
if context: | |||||
return context | |||||
return get_page_context_from_template(path) | |||||
def get_page_route(path): | |||||
def get_page_context_from_template(path): | |||||
found = filter(lambda p: p.page_name==path, get_pages()) | found = filter(lambda p: p.page_name==path, get_pages()) | ||||
return found[0] if found else None | return found[0] if found else None | ||||
def get_generator_route(path): | |||||
generator_routes = get_generator_routes() | |||||
def get_page_context_from_doctype(path): | |||||
generator_routes = get_page_context_from_doctypes() | |||||
if path in generator_routes: | if path in generator_routes: | ||||
route = generator_routes[path] | route = generator_routes[path] | ||||
return frappe.get_doc(route.get("doctype"), route.get("name")).get_route_context() | return frappe.get_doc(route.get("doctype"), route.get("name")).get_route_context() | ||||
@@ -62,7 +62,7 @@ def get_generator_route(path): | |||||
def clear_sitemap(): | def clear_sitemap(): | ||||
delete_page_cache("*") | delete_page_cache("*") | ||||
def get_generator_routes(): | |||||
def get_page_context_from_doctypes(): | |||||
routes = frappe.cache().get_value("website_generator_routes") | routes = frappe.cache().get_value("website_generator_routes") | ||||
if not routes: | if not routes: | ||||
routes = {} | routes = {} | ||||
@@ -6,7 +6,7 @@ import frappe, re, os | |||||
def delete_page_cache(path): | def delete_page_cache(path): | ||||
cache = frappe.cache() | cache = frappe.cache() | ||||
groups = ("website_page", "sitemap_options") | |||||
groups = ("website_page", "page_context") | |||||
if path: | if path: | ||||
for name in groups: | for name in groups: | ||||
cache.hdel(name, path) | cache.hdel(name, path) | ||||
@@ -9,7 +9,7 @@ from frappe.model.naming import append_number_if_name_exists | |||||
from frappe.website.utils import cleanup_page_name, get_home_page | from frappe.website.utils import cleanup_page_name, get_home_page | ||||
from frappe.website.render import clear_cache | from frappe.website.render import clear_cache | ||||
from frappe.modules import get_module_name | from frappe.modules import get_module_name | ||||
from frappe.website.router import get_page_route, get_route_info | |||||
from frappe.website.router import get_page_context_from_template, get_page_context | |||||
class WebsiteGenerator(Document): | class WebsiteGenerator(Document): | ||||
website = frappe._dict( | website = frappe._dict( | ||||
@@ -151,7 +151,7 @@ class WebsiteGenerator(Document): | |||||
# if no parent and not home page, then parent is home page | # if no parent and not home page, then parent is home page | ||||
if not _parent_val and me.get_route() != home_page: | if not _parent_val and me.get_route() != home_page: | ||||
# parents.append(frappe._dict(name=home_page, title=get_route_info(home_page).title)) | |||||
# parents.append(frappe._dict(name=home_page, title=get_page_context(home_page).title)) | |||||
break | break | ||||
elif _parent_val: | elif _parent_val: | ||||
@@ -178,7 +178,7 @@ class WebsiteGenerator(Document): | |||||
else: | else: | ||||
# parent route is a page e.g. "blog" | # parent route is a page e.g. "blog" | ||||
if me.get("parent_website_route"): | if me.get("parent_website_route"): | ||||
page_route = get_page_route(me.parent_website_route) | |||||
page_route = get_page_context_from_template(me.parent_website_route) | |||||
if page_route: | if page_route: | ||||
parents.append(frappe._dict(name = page_route.name, | parents.append(frappe._dict(name = page_route.name, | ||||
title=page_route.page_title)) | title=page_route.page_title)) | ||||