def get_direct_url_node_children(node): from megacms.basewidgets.widgetmodels import URLNode assert isinstance(node, URLNode) ret = ( URLNode.all() .filter('url_parent =', node.key()) .order('url_order') .fetch(limit=None)) return ret
def get_match_by_path(path): from megacms.basewidgets.widgetmodels import URLNode matches = (URLNode.all() .filter('denormalized_url = ', path) .fetch(None)) if len(matches) > 1: raise Exception( 'Found %s matches, expected only one for path ' '"%s"' % (len(matches), path)) return matches[0] if len(matches) == 1 else None
def page_url(context, url_fragment): from megacms.basewidgets.widgetmodels import URLNode context_key = '_linked_url_nodes' if not context_key in context: context[context_key] = dict() cached_nodes = context[context_key] if url_fragment in cached_nodes: url_node = cached_nodes[url_fragment] else: url_nodes = (URLNode.all() .filter('url_fragment =', unicode(url_fragment)) .fetch(None)) count = len(url_nodes) if not count == 1: raise InvalidURLNodeReference( 'Expected one match for URLNode "%s". ' 'Found %s.' % (url_fragment, count,) ) else: url_node = url_nodes[0] cached_nodes[url_fragment] = url_node return url_node.denormalized_url