Пример #1
0
    def test_tag_list(self):
        addon = Addon.objects.get(id=3615)

        request = Mock()
        request.user = addon.authors.all()[0].create_django_user()
        request.groups = ()

        tags = addon.tags.not_blacklisted()

        ctx = {
            'APP': amo.FIREFOX,
            'LANG': 'en-us',
            'request': request,
            'addon': addon,
            'tags': tags
        }

        # initialize jingo
        jingo.load_helpers()
        cake_csrf_token = lambda: ''
        cake_csrf_token.__name__ = 'cake_csrf_token'
        jingo.register.function(cake_csrf_token)

        # no tags, no list
        s = render('{{ tag_list(addon) }}', ctx)
        self.assertEqual(s.strip(), "")

        s = render('{{ tag_list(addon, tags=tags) }}', ctx)
        assert s, "Non-empty tags must return tag list."
        doc = pq(s)
        eq_(doc('li').length, len(tags))
Пример #2
0
    def test_addon_sharing(self):
        addon = Addon.objects.get(id=7172)

        jingo.load_helpers()
        # mock helpers
        locale_url = lambda url: url
        locale_url.__name__ = 'locale_url'
        jingo.register.function(locale_url)

        request = Mock()
        request.user = DjangoUser()
        request.APP = amo.FIREFOX
        ctx = {'request': request}

        # disable cake csrf token
        cake_csrf_token = lambda: ''
        cake_csrf_token.__name__ = 'cake_csrf_token'
        jingo.register.function(cake_csrf_token)

        doc = pq(addon_sharing(ctx, addon))
        self.assert_(doc.html())
        self.assertEquals(doc('li').length, len(sharing.SERVICES_LIST))

        # Make sure services are in the right order.
        for i in range(len(sharing.SERVICES_LIST)):
            self.assertEquals(doc('li').eq(i).attr('class'),
                              sharing.SERVICES_LIST[i].shortname)
    def test_barometer(self):
        self.client.get('/')
        jingo.load_helpers()
        collection = Collection(upvotes=1,
                                slug='mccrackin',
                                author=UserProfile(username='******'))
        # Mock logged out.
        c = {
            'request':
            Mock(path='yermom',
                 GET=Mock(urlencode=lambda: ''),
                 session={'fxa_state': 'foobar'}),
            'user':
            Mock(),
            'settings':
            Mock()
        }
        c['request'].user.is_authenticated.return_value = False
        doc = pq(barometer(c, collection))
        assert doc('form')[0].action == 'https://login'

        # Mock logged in.
        c['request'].user.votes.filter.return_value = [Mock(vote=1)]
        c['request'].user.is_authenticated.return_value = True
        barometer(c, collection)
        doc = pq(barometer(c, collection))
        assert doc('form')[0].action == (reverse(
            'collections.vote', args=['clouserw', 'mccrackin', 'up']))
Пример #4
0
    def test_tag_list(self):
        addon = Addon.objects.get(id=3615)

        request = Mock()
        request.user = addon.authors.all()[0].create_django_user()
        request.groups = ()

        tags = addon.tags.not_blacklisted()

        ctx = {
            'APP': amo.FIREFOX,
            'LANG': 'en-us',
            'request': request,
            'addon': addon,
            'tags': tags}

        # initialize jingo
        jingo.load_helpers()
        cake_csrf_token = lambda: ''
        cake_csrf_token.__name__ = 'cake_csrf_token'
        jingo.register.function(cake_csrf_token)

        # no tags, no list
        s = render('{{ tag_list(addon) }}', ctx)
        self.assertEqual(s.strip(), "")

        s = render('{{ tag_list(addon, tags=tags) }}', ctx)
        assert s, "Non-empty tags must return tag list."
        doc = pq(s)
        eq_(doc('li').length, len(tags))
Пример #5
0
    def test_addon_sharing(self):
        addon = Addon.objects.get(id=7172)

        jingo.load_helpers()

        request = Mock()
        request.user = DjangoUser()
        request.APP = amo.FIREFOX
        ctx = {'request': request,
               'APP': request.APP,
               'LANG': translation.get_language()}

        # disable cake csrf token
        cake_csrf_token = lambda: ''
        cake_csrf_token.__name__ = 'cake_csrf_token'
        jingo.register.function(cake_csrf_token)

        doc = pq(addon_sharing(ctx, addon))
        self.assert_(doc.html())
        self.assertEquals(doc('li').length, len(sharing.SERVICES_LIST))

        # Make sure services are in the right order.
        for i in range(len(sharing.SERVICES_LIST)):
            self.assertEquals(doc('li').eq(i).attr('class'),
                              sharing.SERVICES_LIST[i].shortname)
            assert doc('li a').eq(i).attr('target') in ('_blank', '_self'), (
                'Sharing link target must either be blank or self.')
Пример #6
0
def render_xml_to_string(request, template, context={}):
    if not jingo._helpers_loaded:
        jingo.load_helpers()

    for processor in get_standard_processors():
        context.update(processor(request))

    template = xml_env.get_template(template)
    return template.render(context)
Пример #7
0
def render_xml_to_string(request, template, context={}):
    if not jingo._helpers_loaded:
        jingo.load_helpers()

    for processor in get_standard_processors():
        context.update(processor(request))

    template = xml_env.get_template(template)
    return template.render(**context)
Пример #8
0
    def ready(self):
        """ Bootstrapping stuff """

        # Install gettext translations
        # Note: we'll remove these things with django-jinja
        import jingo
        from django.utils import translation
        jingo.get_env().install_gettext_translations(translation,
                                                     newstyle=True)
        jingo.load_helpers()
Пример #9
0
def test_pagination_result_count():
    jingo.load_helpers()
    pager = Mock()
    pager.start_index = lambda: 1
    pager.end_index = lambda: 20
    pager.paginator.count = 999
    c = dict(pager=pager)
    assert (u'Results <strong>1</strong>-<strong>20</strong> of '
            '<strong>999</strong>') == render(
                "{{ pagination_result_count(pager) }}", c)
Пример #10
0
def test_pagination_result_count():
    jingo.load_helpers()
    pager = Mock()
    pager.start_index = lambda: 1
    pager.end_index = lambda: 20
    pager.paginator.count = 999
    c = dict(pager=pager)
    eq_(u'Results <strong>1</strong>-<strong>20</strong> of '
        '<strong>999</strong>',
        render("{{ pagination_result_count(pager) }}", c))
Пример #11
0
    def ready(self):
        """ Bootstrapping stuff """

        # Install gettext translations
        # Note: we'll remove these things with django-jinja
        import jingo
        from django.utils import translation

        jingo.get_env().install_gettext_translations(translation, newstyle=True)
        jingo.load_helpers()
Пример #12
0
def render_xml(request, template, context={}, **kwargs):
    """Safely renders xml, stripping out nasty control characters."""
    if not jingo._helpers_loaded:
        jingo.load_helpers()

    for processor in get_standard_processors():
        context.update(processor(request))

    template = xml_env.get_template(template)
    rendered = template.render(**context)
    return HttpResponse(rendered, **kwargs)
Пример #13
0
    def test_tag_list(self):
        addon = Addon.objects.get(id=3615)

        request = Mock()
        request.user = addon.authors.all()[0].create_django_user()
        request.groups = ()

        tags = addon.tags.filter(blacklisted=False)
        dev_tags = tags.filter(addon_tags__user__in=addon.authors.all())
        user_tags = tags.exclude(addon_tags__user__in=addon.authors.all())

        ctx = {
            'APP': amo.FIREFOX,
            'LANG': 'en-us',
            'request': request,
            'addon': addon,
            'dev_tags': dev_tags,
            'user_tags': user_tags,
        }

        # initialize jingo
        jingo.load_helpers()
        cake_csrf_token = lambda: ''
        cake_csrf_token.__name__ = 'cake_csrf_token'
        jingo.register.function(cake_csrf_token)

        # no tags, no list
        s = render('{{ tag_list(addon) }}', ctx)
        self.assertEqual(s.strip(), "")
        return

        # regular lists
        s = render('{{ tag_list(addon, dev_tags=dev_tags) }}', ctx)
        assert s, "Non-empty tags must return tag list."
        doc = pq(s)
        eq_(doc('li.developertag').length, len(dev_tags))
        eq_(doc('li').length, len(dev_tags))

        s = render('{{ tag_list(addon, user_tags=user_tags) }}', ctx)
        assert s, "Non-empty tags must return tag list."
        doc = pq(s)
        eq_(doc('li.usertag').length, len(user_tags))
        eq_(doc('li').length, len(user_tags))

        s = render("""{{ tag_list(addon, dev_tags=dev_tags,
                                  user_tags=user_tags) }}""", ctx)
        assert s, "Non-empty tags must return tag list."
        doc = pq(s)
        eq_(doc('li.usertag').length, len(user_tags))
        eq_(doc('li.developertag').length, len(dev_tags))
        eq_(doc('li').length, len(user_tags)+len(dev_tags))

        # delete buttons are shown
        assert doc('li input.removetag').length > 0
Пример #14
0
def test_inline_css(monkeypatch):
    jingo.load_helpers()
    env = jingo.env
    t = env.from_string("{{ inline_css('zamboni/mobile', debug=True) }}")

    # Monkeypatch settings.LESS_BIN to not call the less compiler. We don't
    # need nor want it in tests.
    monkeypatch.setattr(settings, 'LESS_BIN', 'ls')
    # Monkeypatch jingo_minify.helpers.is_external to counter-effect the
    # autouse fixture in conftest.py.
    monkeypatch.setattr(amo.helpers, 'is_external', lambda css: False)
    s = t.render()

    ok_('background-image: url(/static/img/icons/stars.png);' in s)
Пример #15
0
def test_inline_css(monkeypatch):
    jingo.load_helpers()
    env = jingo.get_env()
    t = env.from_string("{{ inline_css('zamboni/mobile', debug=True) }}")

    # Monkeypatch settings.LESS_BIN to not call the less compiler. We don't
    # need nor want it in tests.
    monkeypatch.setattr(settings, 'LESS_BIN', 'ls')
    # Monkeypatch jingo_minify.helpers.is_external to counter-effect the
    # autouse fixture in conftest.py.
    monkeypatch.setattr(amo.helpers, 'is_external', lambda css: False)
    s = t.render()

    assert 'background-image: url(/static/img/icons/stars.png);' in s
Пример #16
0
def render_xml(request, template, context={}, **kwargs):
    """Safely renders xml, stripping out nasty control characters."""
    if not jingo._helpers_loaded:
        jingo.load_helpers()

    for processor in get_standard_processors():
        context.update(processor(request))

    template = xml_env.get_template(template)
    rendered = template.render(**context)

    if 'mimetype' not in kwargs:
        kwargs['mimetype'] = 'text/xml'

    return HttpResponse(rendered, **kwargs)
Пример #17
0
    def test_tag_list(self):
        addon = Addon.objects.get(id=3615)

        request = Mock()
        request.user = addon.authors.all()[0].create_django_user()

        tags = addon.tags.filter(blacklisted=False)
        dev_tags = tags.filter(addon_tags__user__in=addon.authors.all())
        user_tags = tags.exclude(addon_tags__user__in=addon.authors.all())

        ctx = {
            'request': request,
            'addon': addon,
            'dev_tags': dev_tags,
            'user_tags': user_tags,
        }

        # initialize jingo
        jingo.load_helpers()
        cake_csrf_token = lambda: ''
        cake_csrf_token.__name__ = 'cake_csrf_token'
        jingo.register.function(cake_csrf_token)

        # no tags, no list
        s = render('{{ tag_list(addon) }}', ctx)
        assert not s, "Empty tags should not return tag list."

        # regular lists
        s = render('{{ tag_list(addon, dev_tags=dev_tags) }}', ctx)
        assert s, "Non-empty tags must return tag list."
        doc = pq(s)
        eq_(doc('li.developertag').length, len(dev_tags))
        eq_(doc('li').length, len(dev_tags))

        s = render('{{ tag_list(addon, user_tags=user_tags) }}', ctx)
        assert s, "Non-empty tags must return tag list."
        doc = pq(s)
        eq_(doc('li.usertag').length, len(user_tags))
        eq_(doc('li').length, len(user_tags))

        s = render("""{{ tag_list(addon, dev_tags=dev_tags,
                                  user_tags=user_tags) }}""", ctx)
        assert s, "Non-empty tags must return tag list."
        doc = pq(s)
        eq_(doc('li.usertag').length, len(user_tags))
        eq_(doc('li.developertag').length, len(dev_tags))
        eq_(doc('li').length, len(user_tags)+len(dev_tags))
Пример #18
0
    def test_barometer(self):
        jingo.load_helpers()
        collection = Collection.objects.get(pk=57274)
        collection.up_votes = 1
        # Mock logged out.
        c = dict(request=Mock())
        c["request"].path = "yermom"
        c["request"].user.is_authenticated = lambda: False
        doc = pq(barometer(c, collection))
        eq_(doc("form")[0].action, "/users/login?to=yermom")

        # Mock logged in.
        c["request"].amo_user.votes.filter = lambda collection: [1]
        c["request"].user.is_authenticated = lambda: True
        barometer(c, collection)
        doc = pq(barometer(c, collection))
        eq_(doc("form")[0].action, remora_url("collections/vote/%s/up" % collection.uuid))
Пример #19
0
    def save_related(self, request, form, formsets, change):
        """
        After saving the related objects, remove and add
        SnippetTemplateVariables depending on how the template code changed.
        """
        super(SnippetTemplateAdmin, self).save_related(request, form, formsets,
                                                       change)
        load_helpers()  # Ensure jingo helpers are loaded.
        ast = env.parse(form.instance.code)
        new_vars = find_undeclared_variables(ast)
        var_manager = form.instance.variable_set

        # Filter out reserved variable names.
        new_vars = filter(lambda x: not x in RESERVED_VARIABLES, new_vars)

        # Delete variables not in the new set.
        var_manager.filter(~Q(name__in=new_vars)).delete()

        # Create variables that don't exist.
        for variable in new_vars:
            var_manager.get_or_create(name=variable)
Пример #20
0
    def test_barometer(self):
        jingo.load_helpers()
        collection = Collection.objects.get(pk=80)
        collection.upvotes = 1
        # Mock logged out.
        c = dict(request=Mock(), user=Mock(), LANG='en-US', APP='firefox')
        c['request'].path = 'yermom'
        c['request'].GET.urlencode = lambda: ''
        c['request'].user.is_authenticated = lambda: False
        doc = pq(barometer(c, collection))
        eq_(doc('form')[0].action, '/en-US/firefox/users/login?to=yermom')

        # Mock logged in.
        vote = Mock()
        vote.vote = 1
        c['request'].amo_user.votes.filter.return_value = [vote]
        c['request'].user.is_authenticated = lambda: True
        barometer(c, collection)
        doc = pq(barometer(c, collection))
        eq_(doc('form')[0].action,
            reverse('collections.vote', args=['clouserw', 'mccrackin', 'up']))
Пример #21
0
    def test_barometer(self):
        jingo.load_helpers()
        collection = Collection.objects.get(pk=57274)
        collection.upvotes = 1
        # Mock logged out.
        c = dict(request=Mock(), user=Mock(), LANG='en-US', APP='firefox')
        c['request'].path = 'yermom'
        c['request'].GET.urlencode = lambda: ''
        c['request'].user.is_authenticated = lambda: False
        doc = pq(barometer(c, collection))
        eq_(doc('form')[0].action, '/en-US/firefox/users/login?to=yermom')

        # Mock logged in.
        vote = Mock()
        vote.vote = 1
        c['request'].amo_user.votes.filter.return_value = [vote]
        c['request'].user.is_authenticated = lambda: True
        barometer(c, collection)
        doc = pq(barometer(c, collection))
        eq_(doc('form')[0].action,
            reverse('collections.vote', args=['anonymous', None, 'up']))
Пример #22
0
    def test_barometer(self):
        self.client.get('/')
        jingo.load_helpers()
        collection = Collection(upvotes=1, slug='mccrackin',
                                author=UserProfile(username='******'))
        # Mock logged out.
        c = {
            'request': Mock(path='yermom', GET=Mock(urlencode=lambda: '')),
            'user': Mock(),
            'settings': Mock()
        }
        c['request'].user.is_authenticated.return_value = False
        doc = pq(barometer(c, collection))
        eq_(doc('form')[0].action, '/en-US/firefox/users/login?to=yermom')

        # Mock logged in.
        c['request'].user.votes.filter.return_value = [Mock(vote=1)]
        c['request'].user.is_authenticated.return_value = True
        barometer(c, collection)
        doc = pq(barometer(c, collection))
        eq_(doc('form')[0].action,
            reverse('collections.vote', args=['clouserw', 'mccrackin', 'up']))
Пример #23
0
def monkeypatch():
    """All the monkeypatching we have to do to get things running"""
    global _has_patched
    if _has_patched:
        return

    # Import for side-effect: configures logging handlers.
    from fjord.settings.log_settings import noop
    noop()

    # Monkey-patch admin site.
    from django.contrib import admin
    from django.contrib.auth.decorators import login_required
    from session_csrf import anonymous_csrf
    from adminplus.sites import AdminSitePlus

    # Patch the admin
    admin.site = AdminSitePlus()
    admin.site.login = login_required(anonymous_csrf(admin.site.login))

    # Monkey-patch django forms to avoid having to use Jinja2's |safe
    # everywhere.
    import jingo.monkey
    jingo.monkey.patch()

    # Monkey-patch Django's csrf_protect decorator to use
    # session-based CSRF tokens.
    import session_csrf
    session_csrf.monkeypatch()

    from jingo import load_helpers
    load_helpers()

    logging.debug("Note: monkeypatches executed in %s" % __file__)

    # Prevent it from being run again later.
    _has_patched = True
Пример #24
0
    def test_barometer(self):
        self.client.get('/')
        jingo.load_helpers()
        collection = Collection(upvotes=1,
                                slug='mccrackin',
                                author=UserProfile(username='******'))
        # Mock logged out.
        c = {
            'request': Mock(path='yermom', GET=Mock(urlencode=lambda: '')),
            'user': Mock(),
            'settings': Mock()
        }
        c['request'].user.is_authenticated.return_value = False
        doc = pq(barometer(c, collection))
        eq_(doc('form')[0].action, '/en-US/firefox/users/login?to=yermom')

        # Mock logged in.
        c['request'].amo_user.votes.filter.return_value = [Mock(vote=1)]
        c['request'].user.is_authenticated.return_value = True
        barometer(c, collection)
        doc = pq(barometer(c, collection))
        eq_(
            doc('form')[0].action,
            reverse('collections.vote', args=['clouserw', 'mccrackin', 'up']))
Пример #25
0
def patch():
    global _has_patched
    if _has_patched:
        return

    # Import for side-effect: configures logging handlers.
    from fjord.settings.log_settings import noop
    noop()

    # Monkey-patch admin site.
    from django.contrib import admin
    from django.contrib.auth.decorators import login_required
    from session_csrf import anonymous_csrf
    from adminplus.sites import AdminSitePlus

    # Patch the admin
    admin.site = AdminSitePlus()
    admin.site.login = login_required(anonymous_csrf(admin.site.login))

    # Monkey-patch django forms to avoid having to use Jinja2's |safe
    # everywhere.
    import jingo.monkey
    jingo.monkey.patch()

    # Monkey-patch Django's csrf_protect decorator to use
    # session-based CSRF tokens.
    import session_csrf
    session_csrf.monkeypatch()

    from jingo import load_helpers
    load_helpers()

    logging.debug("Note: monkey patches executed in %s" % __file__)

    # Prevent it from being run again later.
    _has_patched = True
Пример #26
0
    def save_related(self, request, form, formsets, change):
        """
        After saving the related objects, remove and add
        SnippetTemplateVariables depending on how the template code changed.
        """
        super(SnippetTemplateAdmin, self).save_related(request, form, formsets,
                                                       change)
        load_helpers()  # Ensure jingo helpers are loaded.

        # Parse the template code and find any undefined variables.
        ast = env.parse(form.instance.code)
        new_vars = find_undeclared_variables(ast)
        var_manager = form.instance.variable_set

        # Filter out reserved variable names.
        new_vars = filter(lambda x: not x in RESERVED_VARIABLES, new_vars)

        # Delete variables not in the new set.
        var_manager.filter(~Q(name__in=new_vars)).delete()

        # Create variables that don't exist.
        for variable in new_vars:
            models.SnippetTemplateVariable.objects.get_or_create(
                template=form.instance, name=variable)
Пример #27
0
def setup():
    jingo.load_helpers()
Пример #28
0
def setup():
    jingo.load_helpers()
Пример #29
0
def _collect(self, objs, source_attr=None, **kwargs):
    for obj in objs:
        if source_attr:
            # We just added a default of None below and that gets around
            # the problem.
            self.add_edge(getattr(obj, source_attr, None), obj)
        else:
            self.add_edge(None, obj)
    try:
        return super(NestedObjects, self).collect(objs,
                                                  source_attr=source_attr,
                                                  **kwargs)
    except models.ProtectedError as e:
        self.protected.update(e.protected_objects)


util.NestedObjects.collect = _collect

# Make |safe less necessary for form fields
import jingo.monkey
jingo.monkey.patch()

# Monkey patch django's csrf
import session_csrf
session_csrf.monkeypatch()

# Load jingo helpers
from jingo import load_helpers
load_helpers()
Пример #30
0
def patch():
    global _has_been_patched, URLWidget

    if _has_been_patched:
        return

    # Monkey patch preserves the old values, so we can pick up any changes
    # in CharField.widget_attrs and Field.widget_attrs
    # paulc filed a Django ticket for it, #14884
    field_widget_attrs = fields.Field.widget_attrs
    charfield_widget_attrs = fields.CharField.widget_attrs

    def required_field_attrs(self, widget):
        """This function is for use on the base Field class."""
        attrs = field_widget_attrs(self, widget)
        # required="required" isn't supported for groups of checkboxes.
        if (self.required and 'required' not in attrs and not widget.is_hidden
                and not isinstance(widget, widgets.CheckboxSelectMultiple)):
            attrs['required'] = 'required'
        return attrs

    def required_char_field_attrs(self, widget, *args, **kwargs):
        """This function is for use on the CharField class."""
        # We need to call super() here, since Django's CharField.widget_attrs
        # doesn't call its super and thus won't use the required_field_attrs
        # above.
        attrs = super(fields.CharField,
                      self).widget_attrs(widget, *args, **kwargs)
        original_attrs = charfield_widget_attrs(self, widget) or {}
        attrs.update(original_attrs)
        return attrs

    fields.Field.widget_attrs = required_field_attrs
    fields.CharField.widget_attrs = required_char_field_attrs
    fields.DateField.widget = DateWidget
    fields.TimeField.widget = TimeWidget
    fields.URLField.widget = URLWidget
    fields.EmailField.widget = EmailWidget

    # Workaround until https://code.djangoproject.com/ticket/16920 gets fixed.
    from django.contrib.admin import util
    from django.contrib.admin.util import NestedObjects
    from django.db import models

    def _collect(self, objs, source_attr=None, **kwargs):
        for obj in objs:
            if source_attr:
                # We just added a default of None below and that gets around
                # the problem.
                self.add_edge(getattr(obj, source_attr, None), obj)
            else:
                self.add_edge(None, obj)
        try:
            return super(NestedObjects, self).collect(objs,
                                                      source_attr=source_attr,
                                                      **kwargs)
        except models.ProtectedError as e:
            self.protected.update(e.protected_objects)

    util.NestedObjects.collect = _collect

    # Make |safe less necessary for form fields
    import jingo.monkey
    jingo.monkey.patch()

    # Monkey patch django's csrf
    import session_csrf
    session_csrf.monkeypatch()

    # Load jingo helpers
    from jingo import load_helpers
    load_helpers()

    _has_been_patched = True
Пример #31
0
def patch():
    global _has_been_patched, URLWidget

    if _has_been_patched:
        return

    # Monkey patch preserves the old values, so we can pick up any changes
    # in CharField.widget_attrs and Field.widget_attrs
    # paulc filed a Django ticket for it, #14884
    field_widget_attrs = fields.Field.widget_attrs
    charfield_widget_attrs = fields.CharField.widget_attrs

    def required_field_attrs(self, widget):
        """This function is for use on the base Field class."""
        attrs = field_widget_attrs(self, widget)
        # required="required" isn't supported for groups of checkboxes.
        if (
            self.required
            and (not "required" in attrs)
            and not widget.is_hidden
            and not isinstance(widget, widgets.CheckboxSelectMultiple)
        ):
            attrs["required"] = "required"
        return attrs

    def required_char_field_attrs(self, widget, *args, **kwargs):
        """This function is for use on the CharField class."""
        # We need to call super() here, since Django's CharField.widget_attrs
        # doesn't call its super and thus won't use the required_field_attrs
        # above.
        attrs = super(fields.CharField, self).widget_attrs(widget, *args, **kwargs)
        original_attrs = charfield_widget_attrs(self, widget) or {}
        attrs.update(original_attrs)
        return attrs

    fields.Field.widget_attrs = required_field_attrs
    fields.CharField.widget_attrs = required_char_field_attrs
    fields.DateField.widget = DateWidget
    fields.TimeField.widget = TimeWidget
    fields.URLField.widget = URLWidget
    fields.EmailField.widget = EmailWidget

    # Workaround until https://code.djangoproject.com/ticket/16920 gets fixed.
    from django.contrib.admin import util
    from django.contrib.admin.util import NestedObjects
    from django.db import models

    def _collect(self, objs, source_attr=None, **kwargs):
        for obj in objs:
            if source_attr:
                # We just added a default of None below and that gets around
                # the problem.
                self.add_edge(getattr(obj, source_attr, None), obj)
            else:
                self.add_edge(None, obj)
        try:
            return super(NestedObjects, self).collect(objs, source_attr=source_attr, **kwargs)
        except models.ProtectedError as e:
            self.protected.update(e.protected_objects)

    util.NestedObjects.collect = _collect

    # Make |safe less necessary for form fields
    import jingo.monkey

    jingo.monkey.patch()

    # Monkey patch django's csrf
    import session_csrf

    session_csrf.monkeypatch()

    # Load jingo helpers
    from jingo import load_helpers

    load_helpers()

    _has_been_patched = True
Пример #32
0
def super():
    jingo.load_helpers()
Пример #33
0
 def setUp(self):
     jingo.load_helpers()
Пример #34
0
 def get_template(self, template_name, template_dirs=None):
     if not jingo._helpers_loaded:
         jingo.load_helpers()
     template = jingo.env.get_template(template_name)
     return JingoTemplateLoaderWrapper(template)
Пример #35
0
 def setUp(self):
     jingo.load_helpers()
Пример #36
0
def _collect(self, objs, source_attr=None, **kwargs):
    for obj in objs:
        if source_attr:
            # We just added a default of None below and that gets around
            # the problem.
            self.add_edge(getattr(obj, source_attr, None), obj)
        else:
            self.add_edge(None, obj)
    try:
        return super(NestedObjects, self).collect(
            objs, source_attr=source_attr, **kwargs)
    except models.ProtectedError as e:
        self.protected.update(e.protected_objects)

util.NestedObjects.collect = _collect


# Make |safe less necessary for form fields
import jingo.monkey
jingo.monkey.patch()


# Monkey patch django's csrf
import session_csrf
session_csrf.monkeypatch()


# Load jingo helpers
from jingo import load_helpers
load_helpers()
Пример #37
0
def test_inline_css():
    jingo.load_helpers()
    env = jingo.env
    t = env.from_string("{{ inline_css('zamboni/mobile', debug=True) }}")
    s = t.render()
    ok_('background-image: url(/static/img/icons/stars.png);' in s)
Пример #38
0
 def get_template(self, template_name, template_dirs=None):
     if not jingo._helpers_loaded:
         jingo.load_helpers()
     template = jingo.env.get_template(template_name)
     return JingoTemplateLoaderWrapper(template)
Пример #39
0
def test_inline_css():
    jingo.load_helpers()
    env = jingo.env
    t = env.from_string("{{ inline_css('zamboni/mobile', debug=True) }}")
    s = t.render()
    ok_('background-image: url(/media/img/icons/stars.png);' in s)