Source code for pypom_navigation.util

try:
    from urlparse import urljoin
except ImportError:
    # python3 compatibility
    from urllib.parse import urljoin
from zope.dottedname.resolve import resolve


[docs]def get_page_url(skin_name, page_mappings, page_id): """ Returns the page_url for the given page_id and skin_name """ fallback = '/' if page_id is not None: return page_mappings[page_id].get('path', '/') return fallback
[docs]def get_page_class(skin_name, page_mappings, page_id=None, fallback=None, default_pages=None): """ Returns the page class for a given skin name and page mapping. First of all, if there is no page id it will return the given fallback if defined of the default page for the skin in use. If there is a page id, it will return: * the match for the given skin if defined * a fallback if defined * the given fallback if defined or the global default page class """ fallback = fallback and fallback or resolve(default_pages[ skin_name]) if not page_id: return fallback page_class_mapping = page_mappings[page_id].get('page_class', None) if page_class_mapping is not None: result = page_class_mapping.get( skin_name, page_class_mapping.get('fallback', None)) return result and resolve(result) or fallback return fallback
def page_factory(base_url, browser, default_page_class, page_mappings, skin_name, page_id=None, **kwargs): url = base_url if page_id is None: url = base_url page_class = default_page_class else: path = page_mappings[page_id]['path'] page_class = get_page_class( skin_name, page_mappings, page_id=page_id, fallback=default_page_class) url = urljoin(base_url, path) page = page_class(browser, base_url=url, **kwargs) return page