def test_url_scan_on_put(self): """Should scan for links and store referenced URLNode ids on save""" url_node_1 = URLNode( url_order=0, title='Test URLNode', url_fragment='test-url-node-1', ) url_node_1.put() url_node_2 = URLNode( url_order=0, title='Test URLNode 2', url_fragment='test-url-node-2', ) url_node_2.put() test_widget = DummyWidget( name='Dummy Widget', html_element='p', content=( 'Content with multiple links: ' '{% page_url "test-url-node-1" %} ' '{% page_url "test-url-node-2" %} ' '{% page_url "test-url-node-1" %} ' ) ) test_widget.put() self.assertEqual(2, len(test_widget.linked_url_node_keys)) expected = set([str(url_node_1.key()), str(url_node_2.key())]) found = set(test_widget.linked_url_node_keys) self.assertEqual(expected, found)
def test_tag(self): """Should return a URLNode's URL and collect the node in the context""" url_fragment = 'this-does-exist' node = URLNode( url_order=0, title='Title', url_fragment=url_fragment, ) node.put() ctx = template.Context({}) ret = page_url(ctx, 'this-does-exist') self.assertEqual(ret, node.denormalized_url) self.assertTrue('_linked_url_nodes' in ctx) self.assertEqual( ctx['_linked_url_nodes'][url_fragment].key(), node.key())
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