def cb_prepare(args): request = args['request'] config = request.get_configuration() data = request.get_data() entries = data['entry_list'] elems = {} if config.get('ogp_fb_app_id'): elems['fb:app_id'] = config.get('ogp_fb_app_id') if config.get('ogp_fb_admins'): elems['fb:admins'] = config.get('ogp_fb_admins') image = None if len(entries) == 1: entry = entries[0] elems['og:type'] = 'article' elems['og:title'] = tools.escape_text(entry['title'].strip()) elems['og:url'] = "%s/%s.html" % (config['base_url'], entry['file_path']) if len(entries) == 1 and config.get('ogp_fb_author_url'): elems['article:author'] = config.get('ogp_fb_author_url') body = entry['body'] if isinstance(body, unicode): body = body.encode(config.get('blog_encoding', 'utf-8')) line = _DESC_REGEXP.sub('', body.split("\n")[0]) elems['og:description'] = tools.escape_text(line) images = [x[1] for x in _IMG_REGEXP.findall(body)] if images: image = images[0] if not image.startswith('http'): image = urlparse.urljoin(config.get('base_url', ''), image) else: elems['og:type'] = 'blog' elems['og:title'] = config['blog_title'] elems['og:url'] = config['base_url'] description = config.get('blog_description') if description: elems['og:description'] = tools.escape_text(description) elems['og:site_name'] = config['blog_title'] if image: elems['og:image'] = image else: elems['og:image'] = config.get('blog_image_url', _IMAGE_URL) data['ogp_tag'] = '\n'.join( [_TAG_TEMPLATE % (key, elems[key]) for key in elems])
def __getitem__(self, key, default=None): """ Retrieves an item from this dict based on the key given. If the item does not exist, then we return the default. If the item is CONTENT_KEY then we return the result from self.getData(). This is just a convenience method for getData(...) and getMetadata(...). There's no reason to override this--override getData and getMetadata instead. @param key: the key being sought @type key: varies @param default: the default to return if the key does not exist @type default: varies @returns: the value of self._metadata.get(key, default) or self.getData() @rtype: varies """ if key == CONTENT_KEY: return self.getData() if key == CONTENT_KEY + "_escaped": return tools.escape_text(self.getData()) return self.getMetadata(key, default)
def escv(s): """ Takes in a value. If it's not a string, we repr it and turn it into a string. Then we escape it so it can be printed in HTML safely. :param s: any value :returns: a safe-to-print-in-html string representation of the value """ if not s: return "" if not isinstance(s, str): s = repr(s) return tools.escape_text(s)
def test_ampersand(self): self.eq_(tools.escape_text("a&b"), "a&b")
def test_empty_string_to_empty_string(self): assert tools.escape_text("") == ""
def test_everything_else_unchanged(self): for mem in ((None, None), ("", ""), ("abc", "abc")): self.eq_(tools.escape_text(mem[0]), mem[1])
def test_greater_than(self): self.eq_(tools.escape_text("a>b"), "a>b")
def test_single_quote_to_pos(self): self.eq_(tools.escape_text("a'b"), "a'b")
def test_none_to_none(self): self.eq_(tools.escape_text(None), None)
def test_everything_else_unchanged(self): assert tools.escape_text(None) == None assert tools.escape_text("") == "" assert tools.escape_text("abc") == "abc"
def test_double_quote_to_quot(self): assert tools.escape_text("a\"b") == "a"b"
def test_single_quote_to_pos(self): assert tools.escape_text("a'b") == "a'b"
def test_complicated_case(self): self.eq_(tools.escape_text("a&>b"), "a&>b")
def test_empty_string_to_empty_string(self): self.eq_(tools.escape_text(""), "")
def test_double_quote_to_quot(self): self.eq_(tools.escape_text('a"b'), "a"b")
def test_lesser_than(self): self.eq_(tools.escape_text("a<b"), "a<b")
def test_double_quote_to_quot(self): self.eq_(tools.escape_text("a\"b"), "a"b")
def test_none_to_none(self): assert tools.escape_text(None) == None