Example #1
0
    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)
Example #2
0
    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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
    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)
Example #6
0
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)
Example #7
0
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)

Example #8
0
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.
Example #9
0
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)
Example #10
0
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"""
Example #11
0
    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)
Example #12
0
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')
Example #13
0
@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)
Example #14
0
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:
Example #15
0
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 ''
Example #16
0
def unicode_to_html(text):
    """Turns all unicode into html entities, e.g. &#69; -> 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)
Example #17
0
@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)
Example #18
0
@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)
Example #19
0
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."""
Example #20
0
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:
Example #21
0
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
Example #22
0
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])
Example #23
0
from django.contrib.staticfiles.templatetags.staticfiles import static
from jingo import register


static = register.function(static)
Example #24
0
from jingo import register

from .utils import allow_add_attachment_by, attachments_payload

register.function(allow_add_attachment_by)

register.function(attachments_payload)
Example #25
0
                       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)
Example #26
0
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
Example #27
0
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:
Example #28
0
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)
Example #29
0
                                  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)

Example #30
0
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)
Example #31
0
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])
Example #32
0
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)