def decorator(f): @functools.wraps(f) def wrapper(*args, **kw): if type(key_fn) is str: cache_key = key_fn else: cache_key = key_fn(*args, **kw) out = memcache.get(cache_key) if out is None: context = f(*args, **kw) t = jingo.env.get_template(template).render(context) out = jinja2.Markup(t) memcache.set(cache_key, out, expires) return out return register.function(wrapper)
def test_custom_url(s): # register our url method register.function(url) # re-register Jinja's register.function(helpers.url, override=False) # urls defined in jingo/tests/urls.py s = render('{{ url("url-args", 1, "foo") }}') eq_(s, "/url-args!") s = render('{{ url("url-kwargs", word="bar", num=1) }}') eq_(s, "/url-kwargs!") # teardown register.function(helpers.url, override=True)
request = context['request'] return Markup(u'\n'.join([p.media_js(request) for p in providers.registry.get_list()])) @register.function def social_accounts(user): """ {% set accounts = social_accounts(user) %} Then: {{ accounts.twitter }} -- a list of connected Twitter accounts {{ accounts.twitter.0 }} -- the first Twitter account {% if accounts %} -- if there is at least one social account """ accounts = {} if not user.is_authenticated(): return accounts for account in user.socialaccount_set.all().iterator(): providers = accounts.setdefault(account.provider, []) providers.append(account) return accounts @register.inclusion_tag('honeypot/honeypot_field.html') def honeypot_field(field_name=None): return render_honeypot_field(field_name) register.function(user_display)
from django.conf import settings import jinja2 from jingo import register, env from l10n import ugettext as _ from . import buttons register.function(buttons.install_button) @register.filter @jinja2.contextfilter def statusflags(context, addon): """experimental/recommended status flags for use as CSS classes""" app = context['APP'] lang = context['LANG'] if addon.is_unreviewed(): return 'experimental' elif addon.is_featured(app, lang) or addon.is_category_featured(app, lang): return 'recommended' else: return '' @register.filter @jinja2.contextfilter def flag(context, addon): """experimental/recommended flag heading.""" status = statusflags(context, addon)
from soapbox.models import Message from statici18n.templatetags.statici18n import statici18n from urlobject import URLObject from .exceptions import DateTimeFormatError from .urlresolvers import reverse, split_path htmlparser = HTMLParser.HTMLParser() # Yanking filters from Django and 3rd party libs. register.filter(strip_tags) register.filter(defaultfilters.timesince) register.filter(defaultfilters.truncatewords) register.function(statici18n) @register.filter def paginator(pager): """Render list of pages.""" return Paginator(pager).render() @register.function def url(viewname, *args, **kwargs): """Helper for Django's ``reverse`` in templates.""" locale = kwargs.pop('locale', None) return reverse(viewname, args=args, kwargs=kwargs, locale=locale)
import amo from amo import urlresolvers, utils from constants.licenses import PERSONA_LICENSES_IDS from translations.helpers import truncate from translations.query import order_by_translation from versions.models import License # Yanking filters from Django. register.filter(defaultfilters.slugify) # Registering some utils as filters: urlparams = register.filter(utils.urlparams) register.filter(utils.epoch) register.filter(utils.isotime) register.function(dict) register.function(utils.randslice) @register.filter def link(item): html = """<a href="%s">%s</a>""" % (item.get_url_path(), jinja2.escape(item.name)) return jinja2.Markup(html) @register.filter def xssafe(value): """ Like |safe but for strings with interpolation.
import difflib from django.contrib.staticfiles.templatetags.staticfiles import static from django.template.defaultfilters import filesizeformat from jingo import register static = register.function(static) filesizeformat = register.function(filesizeformat) @register.function def count_diff_lines(before, after): ndiff = difflib.ndiff(before.splitlines(), after.splitlines()) return len(list(ndiff)) @register.function def diff_table(before, after): diff = difflib.unified_diff( before.splitlines(), after.splitlines(), lineterm='', fromfile='original', tofile='optimized' ) return '\n'.join(diff)
import jinja2 from pyquery import PyQuery as pq from tidylib import tidy_document from tower import ugettext as _ import logging from django.contrib.contenttypes.models import ContentType from sumo.urlresolvers import reverse import wiki import wiki.content from wiki import DIFF_WRAP_COLUMN from teamwork.shortcuts import build_policy_admin_links register.function(build_policy_admin_links) def compare_url(doc, from_id, to_id): return (reverse( 'wiki.compare_revisions', args=[doc.full_path], locale=doc.locale) + '?' + urllib.urlencode({ 'from': from_id, 'to': to_id })) # http://stackoverflow.com/q/774316/571420 def show_diff(seqm): """Unify operations between two compared strings seqm is a difflib.SequenceMatcher instance whose a & b are strings"""
return ''.join([u'&#%s;' % ord(i) for i in text]) @register.function def user_list(users): """Turn a list of users into a list of links to their profiles.""" link = u'<a href="%s">%s</a>' list = u', '.join([ link % (escape(u.get_absolute_url()), escape(u.username)) for u in users ]) return Markup(list) # Returns a string representation of a user register.function(user_display) # Returns a list of social authentication providers. register.function(get_providers) @register.function @contextfunction def provider_login_url(context, provider_id, **params): """ {{ provider_login_url("github", next="/some/url") }} {{ provider_login_url("persona", next="/some/other/url") }} """ request = context['request'] provider = providers.registry.by_id(provider_id) auth_params = params.get('auth_params', None)
from django.conf import settings from django.core.urlresolvers import reverse import jinja2 from jingo import register from tower import ugettext as _ import mkt from mkt.access import acl from mkt.constants import CATEGORY_CHOICES_DICT from mkt.site.helpers import mkt_breadcrumbs, page_title from mkt.webapps.helpers import new_context register.function(acl.check_webapp_ownership) @register.inclusion_tag('developers/apps/listing/items.html') @jinja2.contextfunction def hub_webapp_listing_items(context, webapps, src=None, notes=None): return new_context(**locals()) @register.function @jinja2.contextfunction def hub_page_title(context, title=None, webapp=None): """Wrapper for developer page titles.""" if webapp: title = u'%s | %s' % (title, webapp.name) else: devhub = _('Developers')
@contextfunction def trans_str(context, trans_obj): """Pick a translation as an unescaped string. The string is not wrapped in an HTML element and not marked as HTML safe. """ return pick_translation(context, trans_obj)[0] @register.function def current_year(): return date.today().year @register.function def is_debug(): return settings.DEBUG @register.function def add_query_param(url, **query): for key, val in query.items(): url = replace_query_param(url, key, val) return url register.filter(add_class) register.filter(urlize_quoted_links) register.filter(break_long_headers) register.function(static)
import urllib import chardet import jinja2 from jingo import register from jingo.helpers import datetime from tower import ugettext as _, ungettext as ngettext import amo from amo.urlresolvers import reverse from amo.helpers import breadcrumbs, page_title from access import acl from addons.helpers import new_context register.function(acl.has_perm) @register.inclusion_tag('devhub/addons/listing/items.html') @jinja2.contextfunction def dev_addon_listing_items(context, addons, src=None, notes={}): return new_context(**locals()) @register.function @jinja2.contextfunction def dev_page_title(context, title=None, addon=None): """Wrapper for devhub page titles.""" if addon: title = u'%s :: %s' % (title, addon.name) else:
import os from datetime import datetime from django.conf import settings from django.contrib.staticfiles.templatetags.staticfiles import static as static_helper from django.utils.translation import activate as dj_activate, get_language from feincms.module.medialibrary.models import MediaFile from feincms.templatetags.feincms_tags import feincms_render_region from jingo import register from jinja2 import Markup from sorl.thumbnail import get_thumbnail static = register.function(static_helper) @register.function def render_region(feincms_page, region, request): return Markup(feincms_render_region(None, feincms_page, region, request)) @register.function def current_year(): return datetime.now().strftime('%Y') @register.function def activate(language): dj_activate(language) return ''
def unicode_to_html(text): """Turns all unicode into html entities, e.g. E -> E.""" return ''.join([u'&#%s;' % ord(i) for i in text]) @register.function def user_list(users): """Turn a list of users into a list of links to their profiles.""" link = u'<a href="%s">%s</a>' list = u', '.join([link % (escape(u.get_absolute_url()), escape(u.username)) for u in users]) return Markup(list) # Returns a string representation of a user register.function(user_display) # Returns a list of social authentication providers. register.function(get_providers) @register.function @contextfunction def provider_login_url(context, provider_id, **params): """ {{ provider_login_url("github", next="/some/url") }} {{ provider_login_url("persona", next="/some/other/url") }} """ request = context['request'] provider = providers.registry.by_id(provider_id) auth_params = params.get('auth_params', None)
@register.function def provider_login_url( request, provider_id, process, scope=None, auth_params=None, next=None): """Get the login URL for a socialaccount provider. Jingo version of provider_login_url from allauth/socialaccount/templatetags/socialaccount.py """ provider = providers.registry.by_id(provider_id) query = {'process': process} if scope: query['scope'] = scope if auth_params: query['auth_params'] = auth_params if next: query['next'] = next else: next = request.POST.get('next') or request.GET.get('next') if next: query['next'] = next elif process == 'redirect': query['next'] = request.get_full_path() # get the login url and append query as url parameters return provider.get_login_url(request, **query) register.function(user_display) register.function(get_social_accounts)
@contextfunction def providers_media_js(context): """ {{ providers_media_js() }} """ request = context['request'] return Markup(u'\n'.join([p.media_js(request) for p in providers.registry.get_list()])) @register.function def social_accounts(user): """ {% set accounts = social_accounts(user) %} Then: {{ accounts.twitter }} -- a list of connected Twitter accounts {{ accounts.twitter.0 }} -- the first Twitter account {% if accounts %} -- if there is at least one social account """ accounts = {} if not user.is_authenticated(): return accounts for account in user.socialaccount_set.all().iterator(): providers = accounts.setdefault(account.provider, []) providers.append(account) return accounts register.function(user_display)
import jinja2 from jingo import register from tower import ugettext as _ from . import buttons from amo.utils import chunked register.function(buttons.install_button) register.function(buttons.big_install_button) register.function(buttons.mobile_install_button) @register.filter @jinja2.contextfilter def statusflags(context, addon): """unreviewed/recommended status flags for use as CSS classes""" app = context['APP'] lang = context['LANG'] if addon.is_unreviewed(): return 'unreviewed' elif addon.is_featured(app, lang): return 'featuredaddon' else: return '' @register.filter @jinja2.contextfilter def flag(context, addon): """unreviewed/recommended flag heading."""
from django.utils.encoding import smart_unicode import chardet import jinja2 from jingo import register from jingo.helpers import datetime as jingo_datetime from tower import ugettext as _, ungettext as ngettext import amo from amo.urlresolvers import reverse from access import acl from addons.helpers import new_context from mkt.site.helpers import mkt_breadcrumbs register.function(acl.check_addon_ownership) @register.inclusion_tag('developers/apps/listing/items.html') @jinja2.contextfunction def hub_addon_listing_items(context, addons, src=None, notes=None): return new_context(**locals()) @register.function @jinja2.contextfunction def hub_page_title(context, title=None, addon=None): """Wrapper for developer page titles.""" if addon: title = u'%s | %s' % (title, addon.name) else:
import jinja2 from jingo import register, env from tower import ugettext as _ from . import buttons from amo.utils import chunked import amo register.function(buttons.install_button) register.function(buttons.big_install_button) register.function(buttons.mobile_install_button) @register.filter @jinja2.contextfilter def statusflags(context, addon): """unreviewed/recommended status flags for use as CSS classes""" app = context['APP'] lang = context['LANG'] if addon.is_unreviewed(): return 'unreviewed' elif addon.is_featured(app, lang): return 'featuredaddon' else: return '' @register.filter @jinja2.contextfilter
import hashlib import urllib from django.conf import settings import jinja2 from funfactory.urlresolvers import reverse from funfactory.utils import absolutify from jingo import register from larper import UserSession PARAGRAPH_RE = re.compile(r'(?:\r\n|\r|\n){2,}') absolutify = register.function(absolutify) @register.filter def paragraphize(value): return jinja2.Markup( u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', '<br>\n') for p in PARAGRAPH_RE.split(jinja2.escape(value)))) @register.inclusion_tag('phonebook/includes/photo.html') @jinja2.contextfunction def profile_photo(context, person): user = context['request'].user me = bool(user.username == person.username) url = reverse('phonebook.profile_photo', args=[person.unique_id])
from django.contrib.staticfiles.templatetags.staticfiles import static from jingo import register static = register.function(static)
from jingo import register from .utils import allow_add_attachment_by, attachments_payload register.function(allow_add_attachment_by) register.function(attachments_payload)
scope=None, auth_params=None, next=None): """Get the login URL for a socialaccount provider. Jingo version of provider_login_url from allauth/socialaccount/templatetags/socialaccount.py """ provider = providers.registry.by_id(provider_id) query = {'process': process} if scope: query['scope'] = scope if auth_params: query['auth_params'] = auth_params if next: query['next'] = next else: next = request.POST.get('next') or request.GET.get('next') if next: query['next'] = next elif process == 'redirect': query['next'] = request.get_full_path() # get the login url and append query as url parameters return provider.get_login_url(request, **query) register.function(user_display) register.function(get_social_accounts) register.function(get_providers)
from pyquery import PyQuery as pq from tidylib import tidy_document from tower import ugettext as _ import logging from django.contrib.contenttypes.models import ContentType from sumo.urlresolvers import reverse import wiki import wiki.content from wiki import DIFF_WRAP_COLUMN from teamwork.shortcuts import build_policy_admin_links register.function(build_policy_admin_links) def compare_url(doc, from_id, to_id): return ( reverse("wiki.compare_revisions", args=[doc.full_path], locale=doc.locale) + "?" + urllib.urlencode({"from": from_id, "to": to_id}) ) # http://stackoverflow.com/q/774316/571420 def show_diff(seqm): """Unify operations between two compared strings seqm is a difflib.SequenceMatcher instance whose a & b are strings""" lines = constance.config.FEED_DIFF_CONTEXT_LINES
import difflib from django.contrib.staticfiles.templatetags.staticfiles import static from django.template.defaultfilters import filesizeformat from jingo import register static = register.function(static) filesizeformat = register.function(filesizeformat) @register.function def count_diff_lines(before, after): ndiff = difflib.ndiff(before.splitlines(), after.splitlines()) return len(list(ndiff)) @register.function def diff_table(before, after): diff = difflib.unified_diff(before.splitlines(), after.splitlines(), lineterm='', fromfile='original', tofile='optimized') return '\n'.join(diff)
is_external) from olympia import amo from olympia.amo import utils, urlresolvers from olympia.constants.licenses import PERSONA_LICENSES_IDS from olympia.translations.query import order_by_translation from olympia.translations.helpers import truncate # Yanking filters from Django. register.filter(defaultfilters.slugify) # Registering some utils as filters: urlparams = register.filter(utils.urlparams) register.filter(utils.epoch) register.filter(utils.isotime) register.function(dict) register.function(utils.randslice) @register.function def switch_is_active(switch_name): return waffle.switch_is_active(switch_name) @register.filter def link(item): html = """<a href="%s">%s</a>""" % (item.get_url_path(), jinja2.escape(item.name)) return jinja2.Markup(html)
from datetime import datetime from django.conf import settings from django.contrib.staticfiles.templatetags.staticfiles import static as static_helper from django.utils.translation import activate as dj_activate, get_language from feincms.module.medialibrary.models import MediaFile from feincms.templatetags.feincms_tags import feincms_render_region from jingo import register from jinja2 import Markup from jinja2.utils import soft_unicode from sorl.thumbnail import get_thumbnail _word_beginning_split_re = re.compile(r'([-\s\(\{\[\<]+)(?u)') static = register.function(static_helper) @register.function def render_region(feincms_page, region, request): return Markup(feincms_render_region(None, feincms_page, region, request)) @register.function def current_year(): return datetime.now().strftime('%Y') @register.function def activate(language): dj_activate(language)
import time import hashlib import urllib from django.conf import settings import jinja2 from funfactory.urlresolvers import reverse from funfactory.utils import absolutify from jingo import register from larper import UserSession PARAGRAPH_RE = re.compile(r'(?:\r\n|\r|\n){2,}') absolutify = register.function(absolutify) @register.filter def paragraphize(value): return jinja2.Markup(u'\n\n'.join( u'<p>%s</p>' % p.replace('\n', '<br>\n') for p in PARAGRAPH_RE.split(jinja2.escape(value)))) @register.inclusion_tag('phonebook/includes/photo.html') @jinja2.contextfunction def profile_photo(context, person): user = context['request'].user me = bool(user.username == person.username) url = reverse('phonebook.profile_photo', args=[person.unique_id])
from django.contrib.staticfiles.storage import staticfiles_storage from jingo import register @register.function def static(path): return staticfiles_storage.url(path) register.function(max)