Skip to content
This repository has been archived by the owner on Mar 15, 2018. It is now read-only.

Commit

Permalink
Merge pull request #3098 from robhudson/1080270-jingo
Browse files Browse the repository at this point in the history
Upgrade jingo and remove urlparams (bug 1080270)
  • Loading branch information
robhudson committed May 22, 2015
2 parents 51f3616 + 9d6e219 commit 4cc0c31
Show file tree
Hide file tree
Showing 20 changed files with 29 additions and 94 deletions.
2 changes: 1 addition & 1 deletion mkt/account/helpers.py
Expand Up @@ -4,9 +4,9 @@

import jinja2
from jingo import register
from jingo.helpers import urlparams

from mkt.account.views import fxa_oauth_api
from mkt.site.utils import urlparams


@jinja2.contextfunction
Expand Down
3 changes: 2 additions & 1 deletion mkt/account/tests/test_views.py
Expand Up @@ -10,6 +10,7 @@
from django.http import QueryDict
from django.utils.http import urlencode

from jingo.helpers import urlparams
from mock import patch, Mock
from nose.tools import eq_, ok_

Expand All @@ -19,7 +20,7 @@
from mkt.constants.apps import INSTALL_TYPE_REVIEWER
from mkt.site.fixtures import fixture
from mkt.site.tests import TestCase
from mkt.site.utils import app_factory, urlparams
from mkt.site.utils import app_factory
from mkt.webapps.models import Installed, Webapp
from mkt.users.models import UserProfile

Expand Down
2 changes: 1 addition & 1 deletion mkt/api/oauth.py
Expand Up @@ -8,10 +8,10 @@
import commonware.log
from oauthlib import oauth1
from oauthlib.common import safe_string_equals
from jingo.helpers import urlparams

from mkt.api.models import Access, Nonce, Token, REQUEST_TOKEN, ACCESS_TOKEN
from mkt.site.decorators import login_required
from mkt.site.utils import urlparams


DUMMY_CLIENT_KEY = u'DummyOAuthClientKeyString'
Expand Down
2 changes: 1 addition & 1 deletion mkt/api/tests/test_oauth.py
Expand Up @@ -10,6 +10,7 @@
from django.utils.encoding import iri_to_uri, smart_str

from django_browserid.tests import mock_browserid
from jingo.helpers import urlparams
from nose.tools import eq_, ok_
from oauthlib import oauth1
from pyquery import PyQuery as pq
Expand All @@ -22,7 +23,6 @@
from mkt.site.fixtures import fixture
from mkt.site.helpers import absolutify
from mkt.site.tests import JSONClient, TestCase
from mkt.site.utils import urlparams
from mkt.users.models import UserProfile


Expand Down
2 changes: 1 addition & 1 deletion mkt/api/tests/test_views.py
@@ -1,5 +1,6 @@
import json

from jingo.helpers import urlparams
from mock import patch
from nose import SkipTest
from nose.tools import eq_, ok_
Expand All @@ -15,7 +16,6 @@
from mkt.api.tests.test_oauth import RestOAuth
from mkt.api.views import endpoint_removed, ErrorViewSet
from mkt.site.fixtures import fixture
from mkt.site.utils import urlparams


class TestErrorService(RestOAuth):
Expand Down
2 changes: 1 addition & 1 deletion mkt/developers/tests/test_views.py
Expand Up @@ -15,6 +15,7 @@
from django.utils.encoding import smart_unicode

import mock
from jingo.helpers import urlparams
from jinja2.utils import escape
from nose.plugins.attrib import attr
from nose.tools import eq_, ok_
Expand All @@ -38,7 +39,6 @@
from mkt.site.tests import assert_no_validation_errors
from mkt.site.utils import app_factory, version_factory
from mkt.site.tests.test_utils_ import get_image_path
from mkt.site.utils import urlparams
from mkt.submit.models import AppSubmissionChecklist
from mkt.translations.models import Translation
from mkt.users.models import UserProfile
Expand Down
3 changes: 2 additions & 1 deletion mkt/developers/tests/test_views_api.py
Expand Up @@ -6,14 +6,15 @@
from django.test.utils import override_settings

import mock
from jingo.helpers import urlparams
from nose.tools import eq_

import mkt
from mkt.api.models import Access
from mkt.api.tests.test_oauth import RestOAuth
from mkt.site.fixtures import fixture
from mkt.site.tests import TestCase
from mkt.site.utils import app_factory, urlparams
from mkt.site.utils import app_factory
from mkt.webapps.models import ContentRating, Geodata
from mkt.users.models import UserProfile

Expand Down
3 changes: 2 additions & 1 deletion mkt/files/models.py
Expand Up @@ -13,14 +13,15 @@
from django.utils.encoding import smart_str

import commonware
from jingo.helpers import urlparams
from uuidfield.fields import UUIDField

import mkt
from mkt.site.storage_utils import copy_stored_file, move_stored_file
from mkt.site.decorators import use_master
from mkt.site.helpers import absolutify
from mkt.site.models import ModelBase, OnChangeMixin, UncachedManagerBase
from mkt.site.utils import smart_path, urlparams
from mkt.site.utils import smart_path

log = commonware.log.getLogger('z.files')

Expand Down
3 changes: 2 additions & 1 deletion mkt/files/views.py
Expand Up @@ -10,6 +10,7 @@

import commonware.log
from cache_nuggets.lib import Message, Token
from jingo.helpers import urlparams
from tower import ugettext as _

from mkt.access import acl
Expand All @@ -19,7 +20,7 @@
webapp_file_view_token)
from mkt.files.tasks import extract_file
from mkt.site.decorators import json_view
from mkt.site.utils import HttpResponseSendFile, urlparams
from mkt.site.utils import HttpResponseSendFile

log = commonware.log.getLogger('z.addons')

Expand Down
2 changes: 1 addition & 1 deletion mkt/purchase/models.py
Expand Up @@ -7,13 +7,13 @@
import tower
from babel import Locale, numbers
from jingo import env
from jingo.helpers import urlparams
from jinja2.filters import do_dictsort

import mkt
from mkt.site.helpers import absolutify
from mkt.site.mail import send_mail
from mkt.site.models import ModelBase
from mkt.site.utils import urlparams
from mkt.translations.utils import get_locale_from_lang


Expand Down
4 changes: 2 additions & 2 deletions mkt/reviewers/tests/test_views.py
Expand Up @@ -19,6 +19,7 @@
import requests
import waffle
from cache_nuggets.lib import Token
from jingo.helpers import urlparams
from nose import SkipTest
from nose.tools import eq_, ok_
from pyquery import PyQuery as pq
Expand Down Expand Up @@ -46,8 +47,7 @@
from mkt.site.helpers import absolutify, isotime
from mkt.site.tests import (check_links, days_ago, formset, initial,
req_factory_factory, user_factory)
from mkt.site.utils import (app_factory, make_game, paginate, urlparams,
version_factory)
from mkt.site.utils import app_factory, make_game, paginate, version_factory
from mkt.submit.tests.test_views import BasePackagedAppTest
from mkt.tags.models import Tag
from mkt.users.models import UserProfile
Expand Down
3 changes: 2 additions & 1 deletion mkt/reviewers/views.py
Expand Up @@ -26,6 +26,7 @@
import waffle
from appvalidator.constants import PERMISSIONS
from cache_nuggets.lib import Token
from jingo.helpers import urlparams
from rest_framework import viewsets
from rest_framework.exceptions import ParseError
from rest_framework.generics import (CreateAPIView, ListAPIView, UpdateAPIView,
Expand Down Expand Up @@ -71,7 +72,7 @@
from mkt.site.helpers import absolutify, product_as_dict
from mkt.site.utils import (days_ago, escape_all, HttpResponseSendFile,
JSONEncoder, paginate, redirect_for_login,
smart_decode, urlparams)
smart_decode)
from mkt.submit.forms import AppFeaturesForm
from mkt.tags.models import Tag
from mkt.users.models import UserProfile
Expand Down
11 changes: 4 additions & 7 deletions mkt/site/helpers.py
Expand Up @@ -21,14 +21,11 @@

from mkt.translations.helpers import truncate
from mkt.translations.utils import get_locale_from_lang
from mkt.site.utils import append_tz, urlparams
from mkt.site.utils import append_tz


log = commonware.log.getLogger('z.mkt.site')

# Registering some utils as filters:
register.filter(urlparams)


@jinja2.contextfunction
@register.function
Expand Down Expand Up @@ -121,7 +118,7 @@ def product_as_dict(request, product, purchased=None, receipt_type=None,
'name': product.name,
'categories': product.categories,
'manifest_url': product.get_manifest_url(reviewer),
'recordUrl': urlparams(receipt_url, src=src),
'recordUrl': helpers.urlparams(receipt_url, src=src),
'tokenUrl': token_url,
'is_packaged': product.is_packaged,
'src': src
Expand Down Expand Up @@ -325,7 +322,7 @@ def url(viewname, *args, **kwargs):
src = kwargs.pop('src', '')
url = '%s%s' % (host, reverse(viewname, args=args, kwargs=kwargs))
if src:
url = urlparams(url, src=src)
url = helpers.urlparams(url, src=src)
return url


Expand Down Expand Up @@ -353,7 +350,7 @@ def media(context, url, key='MEDIA_URL'):
build = context['BUILD_ID_CSS']
else:
build = context['BUILD_ID_IMG']
return urljoin(context[key], urlparams(url, b=build))
return urljoin(context[key], helpers.urlparams(url, b=build))


@register.function
Expand Down
46 changes: 0 additions & 46 deletions mkt/site/tests/test_helpers.py
Expand Up @@ -11,7 +11,6 @@
import mkt.site.tests
from mkt.site.helpers import absolutify, css, js, product_as_dict, timesince
from mkt.site.fixtures import fixture
from mkt.site.utils import urlparams
from mkt.webapps.models import Webapp


Expand Down Expand Up @@ -177,48 +176,3 @@ def test_isotime():
eq_(s, '2009-12-25T18:11:12Z')
s = render('{{ d|isotime }}', {'d': None})
eq_(s, '')


def test_urlparams():
url = '/developers'
c = {'base': url,
'base_frag': url + '#hash',
'base_query': url + '?x=y',
'sort': 'name', 'frag': 'frag'}

# Adding a query.
s = render('{{ base_frag|urlparams(sort=sort) }}', c)
eq_(s, '%s?sort=name#hash' % url)

# Adding a fragment.
s = render('{{ base|urlparams(frag) }}', c)
eq_(s, '%s#frag' % url)

# Replacing a fragment.
s = render('{{ base_frag|urlparams(frag) }}', c)
eq_(s, '%s#frag' % url)

# Adding query and fragment.
s = render('{{ base_frag|urlparams(frag, sort=sort) }}', c)
eq_(s, '%s?sort=name#frag' % url)

# Adding query with existing params.
s = render('{{ base_query|urlparams(frag, sort=sort) }}', c)
eq_(s, '%s?sort=name&x=y#frag' % url)

# Replacing a query param.
s = render('{{ base_query|urlparams(frag, x="z") }}', c)
eq_(s, '%s?x=z#frag' % url)

# Params with value of None get dropped.
s = render('{{ base|urlparams(sort=None) }}', c)
eq_(s, url)

# Removing a query
s = render('{{ base_query|urlparams(x=None) }}', c)
eq_(s, url)


def test_urlparams_unicode():
url = u'/xx?evil=reco\ufffd\ufffd\ufffd\u02f5'
urlparams(url)
23 changes: 0 additions & 23 deletions mkt/site/utils.py
Expand Up @@ -10,7 +10,6 @@
import time
import unicodedata
import urllib
import urlparse
import uuid

from django import forms, http
Expand Down Expand Up @@ -56,28 +55,6 @@ def days_ago(n):
log = commonware.log.getLogger('z.mkt')


def urlparams(url_, hash=None, **query):
"""
Add a fragment and/or query paramaters to a URL.
New query params will be appended to exising parameters, except duplicate
names, which will be replaced.
"""
url = urlparse.urlparse(url_)
fragment = hash if hash is not None else url.fragment

# Use dict(parse_qsl) so we don't get lists of values.
q = url.query
query_dict = dict(urlparse.parse_qsl(smart_str(q))) if q else {}
query_dict.update((k, v) for k, v in query.items())

query_string = _urlencode([(k, v) for k, v in query_dict.items()
if v is not None])
new = urlparse.ParseResult(url.scheme, url.netloc, url.path, url.params,
query_string, fragment)
return new.geturl()


def epoch(t):
"""Date/Time converted to seconds since epoch"""
if not hasattr(t, 'tzinfo'):
Expand Down
3 changes: 2 additions & 1 deletion mkt/site/views.py
Expand Up @@ -17,6 +17,7 @@
import commonware.log
import jingo_minify
import waffle
from jingo.helpers import urlparams
from django_statsd.clients import statsd
from django_statsd.views import record as django_statsd_record

Expand All @@ -25,7 +26,7 @@
from mkt.site import monitors
from mkt.site.context_processors import get_collect_timings
from mkt.site.helpers import media
from mkt.site.utils import log_cef, urlparams
from mkt.site.utils import log_cef


log = commonware.log.getLogger('z.mkt.site')
Expand Down
2 changes: 1 addition & 1 deletion mkt/users/tests/test_views.py
Expand Up @@ -4,13 +4,13 @@

from django.core.urlresolvers import reverse

from jingo.helpers import urlparams
from nose.tools import eq_, ok_
from pyquery import PyQuery as pq
from waffle import helpers # NOQA

from mkt.site.fixtures import fixture
from mkt.site.tests import TestCase
from mkt.site.utils import urlparams
from mkt.users.models import UserProfile


Expand Down
3 changes: 2 additions & 1 deletion mkt/webapps/models.py
Expand Up @@ -23,6 +23,7 @@
import commonware.log
from cache_nuggets.lib import memoize, memoize_key
from django_extensions.db.fields.json import JSONField
from jingo.helpers import urlparams
from jinja2.filters import do_dictsort
from tower import ugettext as _
from tower import ugettext_lazy as _lazy
Expand All @@ -49,7 +50,7 @@
OnChangeMixin)
from mkt.site.storage_utils import copy_stored_file
from mkt.site.utils import (cached_property, get_icon_url, slugify, smart_path,
sorted_groupby, urlparams)
sorted_groupby)
from mkt.tags.models import Tag
from mkt.translations.fields import (PurifiedField, save_signal,
TranslatedField, Translation)
Expand Down
2 changes: 1 addition & 1 deletion mkt/webpay/views.py
Expand Up @@ -7,6 +7,7 @@
from django.http import Http404

import commonware.log
from jingo.helpers import urlparams
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.generics import GenericAPIView
Expand All @@ -27,7 +28,6 @@
from mkt.receipts.utils import create_inapp_receipt
from mkt.site.mail import send_mail_jinja
from mkt.site.helpers import absolutify
from mkt.site.utils import urlparams
from mkt.webpay.forms import FailureForm, PrepareInAppForm, PrepareWebAppForm
from mkt.webpay.models import ProductIcon
from mkt.webpay.serializers import (ContributionSerializer,
Expand Down

0 comments on commit 4cc0c31

Please sign in to comment.