misc: fix import-error pylint error (#56288)

This commit is contained in:
Lauréline Guérin 2021-08-20 16:56:41 +02:00
parent aa12256f47
commit ea10ae6b98
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
19 changed files with 149 additions and 146 deletions

View File

@ -19,6 +19,7 @@ import datetime
import json
import logging
import re
import urllib.parse
from decimal import Decimal
from functools import reduce
@ -39,7 +40,6 @@ from django.urls import reverse
from django.utils import dateparse, timezone
from django.utils.encoding import force_bytes, python_2_unicode_compatible
from django.utils.formats import localize
from django.utils.six.moves.urllib import parse as urlparse
from django.utils.timezone import make_aware, now, utc
from django.utils.translation import ugettext_lazy as _
from requests import RequestException
@ -557,7 +557,7 @@ class Regie(models.Model):
payment_url = reverse('view-item', kwargs={'regie_id': self.id, 'item_crypto_id': invoice.crypto_id})
ctx = settings.TEMPLATE_VARS.copy()
ctx['invoice'] = invoice
ctx['payment_url'] = urlparse.urljoin(settings.SITE_BASE_URL, payment_url)
ctx['payment_url'] = urllib.parse.urljoin(settings.SITE_BASE_URL, payment_url)
ctx['portal_url'] = settings.SITE_BASE_URL
subject = render_to_string([subject_template], ctx).strip()
text_body = render_to_string([text_body_template], ctx)

View File

@ -15,6 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import re
import urllib.parse
import ratelimit.utils
from django.conf import settings
@ -22,7 +23,6 @@ from django.contrib import messages
from django.core.exceptions import DisallowedRedirect, PermissionDenied
from django.http import HttpResponseBadRequest, HttpResponseRedirect, JsonResponse
from django.utils.http import urlquote
from django.utils.six.moves.urllib import parse as urlparse
from django.utils.translation import ugettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import View
@ -79,9 +79,9 @@ class TrackingCodeView(View):
code = request.POST['code']
next_url = request.POST.get('url') or '/'
next_netloc = urlparse.urlparse(next_url).netloc
next_netloc = urllib.parse.urlparse(next_url).netloc
redirect_to_other_domain = bool(
next_netloc and next_netloc != urlparse.urlparse(request.build_absolute_uri()).netloc
next_netloc and next_netloc != urllib.parse.urlparse(request.build_absolute_uri()).netloc
)
if redirect_to_other_domain and not is_url_from_known_service(next_url):

View File

@ -24,6 +24,7 @@ import logging
import os
import re
import subprocess
import urllib.parse
import feedparser
import requests
@ -51,7 +52,6 @@ from django.utils import timezone
from django.utils.encoding import force_text, python_2_unicode_compatible, smart_bytes
from django.utils.html import strip_tags
from django.utils.safestring import mark_safe
from django.utils.six.moves.urllib import parse as urlparse
from django.utils.text import slugify
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _
@ -1432,7 +1432,7 @@ class LinkCell(CellBase):
else:
extra_context['title'] = self.title or self.url
url = self.get_url(context)
if force_absolute_url and not urlparse.urlparse(url).netloc:
if force_absolute_url and not urllib.parse.urlparse(url).netloc:
# create full URL when used in a skeleton
url = request.build_absolute_uri(url)
extra_context['url'] = url

View File

@ -16,6 +16,7 @@
import json
import re
import urllib.parse
from itertools import chain
from django.conf import settings
@ -40,8 +41,6 @@ from django.template import engines
from django.template.loader import TemplateDoesNotExist, get_template
from django.utils import lorem_ipsum, timezone
from django.utils.encoding import force_text
from django.utils.six.moves.urllib import parse as urllib
from django.utils.six.moves.urllib import parse as urlparse
from django.utils.translation import ugettext as _
from django.views.decorators.csrf import csrf_exempt
from django.views.defaults import page_not_found
@ -73,7 +72,7 @@ class LoginView(auth_views.LoginView):
if 'next' not in request.GET:
return HttpResponseRedirect(resolve_url('mellon_login'))
try:
quoted_next_url = urllib.quote(request.GET.get('next'))
quoted_next_url = urllib.parse.quote(request.GET.get('next'))
except KeyError:
return HttpResponseBadRequest('invalid value for "next" parameter')
return HttpResponseRedirect(resolve_url('mellon_login') + '?next=' + quoted_next_url)
@ -274,7 +273,7 @@ def skeleton(request):
response.status_code = 200
return response
parsed_source = urlparse.urlparse(source)
parsed_source = urllib.parse.urlparse(source)
netloc = parsed_source.netloc
if parsed_source.scheme == 'https' and netloc.endswith(':443'):
# somme HTTP client (like Mozilla/1.1 (compatible; MSPIE 2.0; Windows
@ -300,7 +299,7 @@ def skeleton(request):
if selected_page is None or len(redirect_url) >= len(selected_page.get_redirect_url()):
selected_page = page
if urlparse.urlparse(redirect_url).netloc == netloc:
if urllib.parse.urlparse(redirect_url).netloc == netloc:
same_domain_pages.append(page)
if selected_page is None and same_domain_pages:
@ -313,7 +312,7 @@ def skeleton(request):
for service_id in settings.KNOWN_SERVICES or {}:
for service_key in settings.KNOWN_SERVICES[service_id]:
service = settings.KNOWN_SERVICES[service_id][service_key]
if urlparse.urlparse(service.get('url')).netloc == netloc:
if urllib.parse.urlparse(service.get('url')).netloc == netloc:
selected_page = Page()
selected_page.id = '__root'
selected_page.template_name = 'standard'

View File

@ -369,7 +369,7 @@ LEGACY_CHART_CELL_ENABLED = False
def debug_show_toolbar(request):
from debug_toolbar.middleware import show_toolbar as dt_show_toolbar
from debug_toolbar.middleware import show_toolbar as dt_show_toolbar # pylint: disable=import-error
return dt_show_toolbar(request) and not request.path.startswith('/__skeleton__/')

View File

@ -54,7 +54,7 @@ urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
if settings.DEBUG and 'debug_toolbar' in settings.INSTALLED_APPS:
import debug_toolbar
import debug_toolbar # pylint: disable=import-error
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls)),

View File

@ -15,11 +15,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import html
import urllib.parse
from django.conf import settings
from django.template.context import BaseContext
from django.utils.html import strip_tags
from django.utils.six.moves.urllib import parse as urlparse
def ellipsize(text, length=50):
@ -42,12 +42,12 @@ def flatten_context(context):
def is_url_from_known_service(url):
netloc = urlparse.urlparse(url).netloc
netloc = urllib.parse.urlparse(url).netloc
if not netloc:
return True
for service_id in settings.KNOWN_SERVICES or {}:
for service_key in settings.KNOWN_SERVICES[service_id]:
service = settings.KNOWN_SERVICES[service_id][service_key]
if urlparse.urlparse(service.get('url')).netloc == netloc:
if urllib.parse.urlparse(service.get('url')).netloc == netloc:
return True
return False

View File

@ -16,13 +16,13 @@
import hashlib
import logging
import urllib.parse
from django.conf import settings
from django.core.cache import cache
from django.utils.encoding import smart_bytes
from django.utils.http import urlencode
from django.utils.six import BytesIO
from django.utils.six.moves.urllib import parse as urlparse
from requests import Response
from requests import Session as RequestsSession
from requests.auth import AuthBase
@ -60,11 +60,13 @@ class Requests(RequestsSession):
if remote_service == 'auto':
remote_service = None
scheme, netloc, path, params, query, fragment = urlparse.urlparse(url)
scheme, netloc, path, params, query, fragment = urllib.parse.urlparse(url)
for services in settings.KNOWN_SERVICES.values():
for service in services.values():
remote_url = service.get('url')
remote_scheme, remote_netloc, dummy, dummy, dummy, dummy = urlparse.urlparse(remote_url)
remote_scheme, remote_netloc, dummy, dummy, dummy, dummy = urllib.parse.urlparse(
remote_url
)
if remote_scheme == scheme and remote_netloc == netloc:
remote_service = service
break
@ -74,7 +76,7 @@ class Requests(RequestsSession):
if remote_service:
# only keeps the path (URI) in url parameter, scheme and netloc are
# in remote_service
url = urlparse.urlunparse(('', '', path, params, query, fragment))
url = urllib.parse.urlunparse(('', '', path, params, query, fragment))
else:
logging.warning('service not found in settings.KNOWN_SERVICES for %s', url)
@ -103,7 +105,9 @@ class Requests(RequestsSession):
query_params['orig'] = remote_service.get('orig')
remote_service_base_url = remote_service.get('url')
scheme, netloc, dummy, params, old_query, fragment = urlparse.urlparse(remote_service_base_url)
scheme, netloc, dummy, params, old_query, fragment = urllib.parse.urlparse(
remote_service_base_url
)
query = urlencode(query_params)
if '?' in url:
@ -112,7 +116,7 @@ class Requests(RequestsSession):
else:
path = url
url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
url = urllib.parse.urlunparse((scheme, netloc, path, params, query, fragment))
if method == 'GET' and cache_duration:
# handle cache

View File

@ -19,19 +19,19 @@ import datetime
import hashlib
import hmac
import random
import urllib.parse
from django.conf import settings
from django.utils.encoding import smart_bytes
from django.utils.http import quote, urlencode
from django.utils.six.moves.urllib import parse as urlparse
# Simple signature scheme for query strings
def sign_url(url, key, algo='sha256', timestamp=None, nonce=None):
parsed = urlparse.urlparse(url)
parsed = urllib.parse.urlparse(url)
new_query = sign_query(parsed.query, key, algo, timestamp, nonce)
return urlparse.urlunparse(parsed[:4] + (new_query,) + parsed[5:])
return urllib.parse.urlunparse(parsed[:4] + (new_query,) + parsed[5:])
def sign_query(query, key, algo='sha256', timestamp=None, nonce=None):
@ -71,7 +71,7 @@ def check_request_signature(django_request, keys=[]):
def check_query(query, keys, known_nonce=None, timedelta=30):
parsed = urlparse.parse_qs(query)
parsed = urllib.parse.parse_qs(query)
if not ('signature' in parsed and 'algo' in parsed and 'timestamp' in parsed and 'nonce' in parsed):
return False
unsigned_query, signature_content = query.split('&signature=', 1)

View File

@ -44,8 +44,8 @@ def ensure_db(func):
@contextlib.contextmanager
def tenant_context(domain):
from hobo.multitenant.middleware import TenantMiddleware
from tenant_schemas.utils import tenant_context
from hobo.multitenant.middleware import TenantMiddleware # pylint: disable=import-error
from tenant_schemas.utils import tenant_context # pylint: disable=import-error
tenant = TenantMiddleware.get_tenant_by_hostname(domain)
with tenant_context(tenant):

View File

@ -19,6 +19,6 @@ if 'hobo.context_processors.statics_hash' in settings.TEMPLATES[0]['OPTIONS']['c
# initialize versions as soon as possible as it may be used in most
# requests via the statics_hash template var and we prefer not to
# load the information during a user request.
from hobo.scrutiny.wsgi.middleware import VersionMiddleware
from hobo.scrutiny.wsgi.middleware import VersionMiddleware # pylint: disable=import-error
VersionMiddleware.get_packages_version()

View File

@ -1,12 +1,12 @@
import datetime
import json
import urllib.parse
from unittest import mock
import pytest
from django.contrib.auth.models import User
from django.core.cache import cache
from django.urls import reverse
from django.utils.six.moves.urllib import parse as urlparse
from combo.apps.calendar.models import BookingCalendar
from combo.apps.calendar.utils import get_calendar, get_chrono_service
@ -215,9 +215,9 @@ def test_cell_rendering(mocked_send, client, cell, async_url):
resp.form.set('slots', True, 1)
resp.form.set('slots', True, 2)
resp = resp.form.submit()
parsed = urlparse.urlparse(resp.url)
parsed = urllib.parse.urlparse(resp.url)
assert parsed.path == '/test/'
qs = urlparse.parse_qs(parsed.query)
qs = urllib.parse.parse_qs(parsed.query)
assert qs['session_var_booking_agenda_slug'] == ['test']
assert qs['session_var_booking_start'] == ['2017-06-13T08:00:00+00:00']
assert qs['session_var_booking_end'] == ['2017-06-13T09:30:00+00:00']

View File

@ -1,6 +1,7 @@
import datetime
import json
import os
import urllib.parse
from unittest import mock
import pytest
@ -9,7 +10,6 @@ from django.conf import settings
from django.contrib.auth.models import User
from django.test import override_settings
from django.urls import reverse
from django.utils.six.moves.urllib import parse as urlparse
from combo.apps.dashboard.models import DashboardCell, Tile
from combo.data.models import Page, TextCell
@ -50,7 +50,7 @@ def test_add_to_dashboard(app, site):
dashboard = DashboardCell.objects.all()[0]
user = User.objects.all()[0]
resp = app.get(reverse('combo-dashboard-add-tile', kwargs={'cell_reference': cell.get_reference()}))
assert urlparse.urlparse(resp.location).path == dashboard.page.get_online_url()
assert urllib.parse.urlparse(resp.location).path == dashboard.page.get_online_url()
assert Tile.objects.count() == 1
assert Tile.objects.all()[0].cell.id != cell.id
assert Tile.objects.all()[0].cell.text == cell.text

View File

@ -1,4 +1,5 @@
import json
import urllib.parse
import uuid
from contextlib import contextmanager
from datetime import datetime, timedelta
@ -16,7 +17,6 @@ from django.http.request import QueryDict
from django.test import override_settings
from django.urls import reverse
from django.utils import timezone
from django.utils.six.moves.urllib import parse as urlparse
from django.utils.timezone import now, utc
from mellon.models import UserSAMLIdentifier
from requests.exceptions import ConnectionError
@ -141,7 +141,7 @@ def assert_payment_status(url, transaction_id=None):
if transaction_id:
url, part = url.split('?')
query = urlparse.parse_qs(part)
query = urllib.parse.parse_qs(part)
assert 'transaction-id' in query
assert ':' not in query['transaction-id']
assert signing_loads(query['transaction-id'][0]) == transaction_id
@ -233,12 +233,12 @@ def test_successfull_items_payment(app, basket_page, regie, user, with_payment_b
assert resp.status_code == 302
location = resp.location
assert 'dummy-payment' in location
parsed = urlparse.urlparse(location)
parsed = urllib.parse.urlparse(location)
# get return_url and transaction id from location
qs = urlparse.parse_qs(parsed.query)
qs = urllib.parse.parse_qs(parsed.query)
args = {'transaction_id': qs['transaction_id'][0], 'signed': True, 'ok': True, 'reason': 'Paid'}
# make sure return url is the user return URL
assert urlparse.urlparse(qs['return_url'][0]).path.startswith(
assert urllib.parse.urlparse(qs['return_url'][0]).path.startswith(
'/lingo/return-payment-backend/%s/' % regie.payment_backend.id
)
# simulate successful call to callback URL
@ -249,10 +249,10 @@ def test_successfull_items_payment(app, basket_page, regie, user, with_payment_b
resp = app.get(qs['return_url'][0], params=args)
# redirect to payment status
assert resp.status_code == 302
assert urlparse.urlparse(resp.url).path.startswith('/lingo/payment-status')
assert urllib.parse.urlparse(resp.url).path.startswith('/lingo/payment-status')
resp = resp.follow()
assert 'Your payment has been succesfully registered.' in resp.text
assert urlparse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path == '/test_basket_cell/'
assert urllib.parse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path == '/test_basket_cell/'
def test_add_amount_to_basket(app, key, regie, user_name_id):
@ -346,7 +346,7 @@ def test_add_amount_to_basket(app, key, regie, user_name_id):
assert resp.status_code == 200
response = json.loads(resp.text)
assert response['result'] == 'success'
payment_url = urlparse.urlparse(response['payment_url'])
payment_url = urllib.parse.urlparse(response['payment_url'])
assert payment_url.path.startswith('/lingo/item/')
assert payment_url.path.endswith('/pay')
assert BasketItem.objects.filter(amount=Decimal('22.23')).exists()
@ -395,7 +395,7 @@ def test_basket_item_with_capture_date(app, user, user_name_id, regie, basket_pa
monkeypatch.setattr(eopayment.Payment, 'request', eopayment_mock)
resp = resp.form.submit()
assert resp.status_code == 302
location = urlparse.urlparse(resp.location)
location = urllib.parse.urlparse(resp.location)
assert location.path == '/'
assert location.hostname == 'dummy-payment.demo.entrouvert.com'
@ -527,7 +527,7 @@ def test_cant_pay_if_different_capture_date(app, basket_page, regie, user):
resp = login(app).get('/test_basket_cell/')
resp = resp.form.submit()
assert resp.status_code == 302
assert urlparse.urlparse(resp.location).path == '/test_basket_cell/'
assert urllib.parse.urlparse(resp.location).path == '/test_basket_cell/'
resp = resp.follow()
assert "Invalid grouping for basket items: different capture dates." in resp.text
@ -572,7 +572,7 @@ def test_pay_single_basket_item(app, key, regie, user_name_id, john_doe):
# make sure the redirection is done to the payment backend
assert resp.location.startswith('http://dummy-payment.demo.entrouvert.com/')
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['amount'] == ['12.00']
# simulate successful payment response from dummy backend
data = {'transaction_id': qs['transaction_id'][0], 'ok': True, 'amount': qs['amount'][0], 'signed': True}
@ -610,7 +610,7 @@ def test_pay_single_basket_item_another_user(app, key, regie, user_name_id, john
# make sure the redirection is done to the payment backend
assert resp.location.startswith('http://dummy-payment.demo.entrouvert.com/')
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['amount'] == ['12.00']
# simulate successful payment response from dummy backend
data = {'transaction_id': qs['transaction_id'][0], 'ok': True, 'amount': qs['amount'][0], 'signed': True}
@ -635,12 +635,12 @@ def test_pay_multiple_regies(app, key, regie, user_name_id):
resp = login(app).get(page.get_online_url())
resp = resp.forms[0].submit()
assert resp.location.startswith('http://dummy-payment.demo.entrouvert.com/')
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['amount'] == ['234.46']
resp = login(app).get(page.get_online_url())
resp = resp.forms[1].submit()
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['amount'] == ['22.23']
@ -816,8 +816,8 @@ def test_payment_callback(app, basket_page, regie, user, with_payment_backend):
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
transaction_id = qs['transaction_id'][0]
data = {'transaction_id': transaction_id, 'signed': True, 'amount': qs['amount'][0], 'ok': True}
assert data['amount'] == '10.50'
@ -838,8 +838,8 @@ def test_payment_callback(app, basket_page, regie, user, with_payment_backend):
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
transaction_id = qs['transaction_id'][0]
return_url = qs['return_url'][0]
data = {'transaction_id': transaction_id, 'signed': True, 'amount': qs['amount'][0], 'ok': True}
@ -867,8 +867,8 @@ def test_payment_callback_no_regie(app, basket_page, regie, user, with_payment_b
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
transaction_id = qs['transaction_id'][0]
data = {'transaction_id': transaction_id, 'signed': True, 'amount': qs['amount'][0], 'ok': True}
assert data['amount'] == '10.50'
@ -889,8 +889,8 @@ def test_payment_callback_no_regie(app, basket_page, regie, user, with_payment_b
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
transaction_id = qs['transaction_id'][0]
data = {'transaction_id': transaction_id, 'signed': True, 'amount': qs['amount'][0], 'ok': True}
assert data['amount'] == '11.50'
@ -907,8 +907,8 @@ def test_payment_return_without_query_string(app, basket_page, regie, user, with
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
return_url = qs['return_url'][0]
transaction_id = qs['transaction_id'][0]
data = {'transaction_id': transaction_id, 'signed': True, 'amount': qs['amount'][0], 'ok': True}
@ -957,8 +957,8 @@ def test_payment_callback_waiting(app, basket_page, regie, user, with_payment_ba
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
transaction_id = qs['transaction_id'][0]
data = {'transaction_id': transaction_id, 'signed': True, 'amount': qs['amount'][0], 'waiting': True}
assert data['amount'] == '10.50'
@ -994,8 +994,8 @@ def test_payment_no_callback_just_return(caplog, app, basket_page, regie, user,
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
transaction_id = qs['transaction_id'][0]
data = {'transaction_id': transaction_id, 'amount': qs['amount'][0], 'ok': True}
assert data['amount'] == '10.50'
@ -1007,7 +1007,7 @@ def test_payment_no_callback_just_return(caplog, app, basket_page, regie, user,
get_resp = app.post(return_url, params=data)
assert request.call_count == 0
assert get_resp.status_code == 302
assert urlparse.urlparse(get_resp['location']).path == '/lingo/payment-status'
assert urllib.parse.urlparse(get_resp['location']).path == '/lingo/payment-status'
assert Transaction.objects.get(order_id=transaction_id).status == 0 # not paid
# call return with missing data
@ -1030,10 +1030,10 @@ def test_payment_no_callback_just_return(caplog, app, basket_page, regie, user,
assert url.startswith('http://example.org/testitem/jump/trigger/paid')
# redirect to payment status
assert get_resp.status_code == 302
assert urlparse.urlparse(get_resp.url).path.startswith('/lingo/payment-status')
assert urllib.parse.urlparse(get_resp.url).path.startswith('/lingo/payment-status')
resp = get_resp.follow()
assert 'Your payment has been succesfully registered.' in resp.text
assert urlparse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path == '/test_basket_cell/'
assert urllib.parse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path == '/test_basket_cell/'
assert Transaction.objects.get(order_id=transaction_id).status == eopayment.PAID
@ -1353,8 +1353,8 @@ def test_extra_fees(app, basket_page, key, regie, user_name_id):
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
transaction_id = qs['transaction_id'][0]
data = {'transaction_id': transaction_id, 'signed': True, 'amount': qs['amount'][0], 'ok': True}
assert data['amount'] == '44.00'
@ -1369,8 +1369,8 @@ def test_extra_fees(app, basket_page, key, regie, user_name_id):
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
transaction_id = qs['transaction_id'][0]
data = {'transaction_id': transaction_id, 'signed': True, 'amount': qs['amount'][0], 'ok': True}
assert data['amount'] == '45.00'
@ -1391,8 +1391,8 @@ def test_payment_callback_error(app, basket_page, regie, user, with_payment_back
resp = resp.form.submit()
assert resp.status_code == 302
location = resp.location
parsed = urlparse.urlparse(location)
qs = urlparse.parse_qs(parsed.query)
parsed = urllib.parse.urlparse(location)
qs = urllib.parse.parse_qs(parsed.query)
transaction_id = qs['transaction_id'][0]
data = {'transaction_id': transaction_id, 'signed': True, 'amount': qs['amount'][0], 'ok': True}
assert data['amount'] == '10.50'
@ -1463,7 +1463,7 @@ def test_payment_no_basket(app, user_name_id, regie, authenticated):
item = BasketItem.objects.first()
assert item.user is None
assert item.amount == Decimal('10.00')
path = urlparse.urlparse(payment_url).path
path = urllib.parse.urlparse(payment_url).path
start = '/lingo/item/'
end = '/pay'
assert path.startswith(start)
@ -1489,7 +1489,7 @@ def test_payment_no_basket(app, user_name_id, regie, authenticated):
item.save()
resp = app.get(payment_url)
assert resp.location.startswith('http://dummy-payment.demo.entrouvert.com/')
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['amount'] == ['10.00']
if authenticated:
assert qs['email'] == ['foo@example.com']
@ -1504,7 +1504,7 @@ def test_payment_no_basket(app, user_name_id, regie, authenticated):
},
)
assert resp.location.startswith('http://dummy-payment.demo.entrouvert.com/')
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['amount'] == ['10.00']
if authenticated:
assert qs['email'] == ['foo@example.com']
@ -1644,7 +1644,7 @@ def test_bank_transaction_date(app, key, regie, user, john_doe, caplog, transact
# make sure the redirection is done to the payment backend
assert resp.location.startswith('http://dummy-payment.demo.entrouvert.com/')
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['amount'] == ['12.00']
# simulate successful payment response from dummy backend
transaction_id = (qs['transaction_id'][0],)
@ -1722,7 +1722,7 @@ def test_successfull_items_can_pay_only_one_basket_item(app, basket_page, mono_r
resp = resp.click('Pay', href=item.payment_url)
# successful payment
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['subject'][0] == 'foo item', 'item.subject was not provided to eopayment'
assert qs['orderid'][0] == 'form-3-23'
args = {'transaction_id': qs['transaction_id'][0], 'signed': True, 'ok': True, 'reason': 'Paid'}
@ -1744,7 +1744,7 @@ def test_extra_kwargs_can_pay_only_one_basket_item(app, basket_page, mono_regie,
)
resp = login(app).get(item.payment_url)
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['subject'][0] == 'foo item', 'item.subject was not provided to eopayment'
assert qs['info3'][0] == 'très fragile'
@ -1789,7 +1789,7 @@ def test_tipi_kwargs_can_pay_only_one_basket_item(app, basket_page, mono_regie,
mono_regie.payment_backend.save()
resp = login(app).get(item.payment_url)
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
qs = urllib.parse.parse_qs(urllib.parse.urlparse(resp.location).query)
assert qs['refdet'][0] == 'F20201030'
assert qs['exer'][0] == '2020'
@ -1836,7 +1836,7 @@ def remote_invoices_httmock():
def test_email_from_basket(app, regie, remote_invoices_httmock):
def parse_qs(url):
return QueryDict(urlparse.urlparse(url).query)
return QueryDict(urllib.parse.urlparse(url).query)
user1 = User.objects.create(username='user1', email='user1@example.com')
user2 = User.objects.create(username='user2', email='user2@example.com')

View File

@ -1,5 +1,6 @@
import copy
import json
import urllib.parse
from decimal import Decimal
from unittest import mock
@ -14,7 +15,6 @@ from django.test import override_settings
from django.test.client import RequestFactory
from django.urls import reverse
from django.utils.encoding import force_bytes, force_text
from django.utils.six.moves.urllib import parse as urlparse
from django.utils.timezone import now, timedelta
from requests.exceptions import ConnectionError
from requests.models import Response
@ -156,11 +156,11 @@ def test_remote_regie_active_invoices_cell(mock_send, remote_regie):
# check if regie webservice has been correctly called
assert mock_send.call_args[0][0].method == 'GET'
url = mock_send.call_args[0][0].url
scheme, netloc, path, dummy, querystring, dummy = urlparse.urlparse(url)
scheme, netloc, path, dummy, querystring, dummy = urllib.parse.urlparse(url)
assert scheme == 'http'
assert netloc == 'example.org'
assert path == '/regie/invoices/'
query = urlparse.parse_qs(querystring, keep_blank_values=True)
query = urllib.parse.parse_qs(querystring, keep_blank_values=True)
assert query['NameID'][0] == 'r2d2'
assert query['orig'][0] == 'combo'
assert check_query(querystring, 'combo') is True
@ -285,11 +285,11 @@ def test_remote_regie_past_invoices_cell(mock_send, remote_regie):
# check if regie webservice has been correctly called
assert mock_send.call_args[0][0].method == 'GET'
url = mock_send.call_args[0][0].url
scheme, netloc, path, dummy, querystring, dummy = urlparse.urlparse(url)
scheme, netloc, path, dummy, querystring, dummy = urllib.parse.urlparse(url)
assert scheme == 'http'
assert netloc == 'example.org'
assert path == '/regie/invoices/history/'
query = urlparse.parse_qs(querystring, keep_blank_values=True)
query = urllib.parse.parse_qs(querystring, keep_blank_values=True)
assert query['NameID'][0] == 'r2d2'
assert query['orig'][0] == 'combo'
assert check_query(querystring, 'combo') is True
@ -408,20 +408,20 @@ def test_anonymous_successful_item_payment(mock_get, mock_pay_invoice, app, remo
assert resp.status_code == 302
location = resp.location
assert 'dummy-payment' in location
parsed = urlparse.urlparse(location)
parsed = urllib.parse.urlparse(location)
# get return_url and transaction id from location
qs = urlparse.parse_qs(parsed.query)
qs = urllib.parse.parse_qs(parsed.query)
args = {'transaction_id': qs['transaction_id'][0], 'signed': True, 'ok': True, 'reason': 'Paid'}
# make sure return url is the user return URL
return_url = qs['return_url'][0]
assert urlparse.urlparse(return_url).path.startswith('/lingo/return-payment-backend')
assert urllib.parse.urlparse(return_url).path.startswith('/lingo/return-payment-backend')
# simulate successful return URL
resp = app.get(qs['return_url'][0], params=args)
# redirect to payment status
assert resp.status_code == 302
assert urlparse.urlparse(resp.url).path.startswith('/lingo/payment-status')
assert urllib.parse.urlparse(resp.url).path.startswith('/lingo/payment-status')
resp = resp.follow()
assert urlparse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path == '/'
assert urllib.parse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path == '/'
# simulate successful call to callback URL
resp = app.get(reverse('lingo-callback', kwargs={'regie_pk': remote_regie.id}), params=args)
trans = Transaction.objects.all()
@ -520,7 +520,7 @@ def test_anonymous_item_payment_email_error(mock_get, app, remote_regie):
resp = form.submit()
assert resp.status_code == 302
path = urlparse.urlparse(resp.location).path
path = urllib.parse.urlparse(resp.location).path
assert path == '/lingo/item/%s/%s/' % (remote_regie.id, encrypt_id)
@ -570,7 +570,7 @@ def test_self_declared_invoice(mock_get, app, remote_regie):
resp.form['invoice-number'] = 'F201601'
resp.form['invoice-amount'] = '123.45'
resp = resp.form.submit()
path = urlparse.urlparse(resp.location).path
path = urllib.parse.urlparse(resp.location).path
assert path.startswith('/lingo/item/%s/' % remote_regie.id)
resp = resp.follow()
@ -605,13 +605,13 @@ def test_remote_item_payment_failure(mock_post, mock_get, mock_pay_invoice, app,
assert resp.status_code == 302
location = resp.location
assert 'dummy-payment' in location
parsed = urlparse.urlparse(location)
parsed = urllib.parse.urlparse(location)
# get return_url and transaction id from location
qs = urlparse.parse_qs(parsed.query)
qs = urllib.parse.parse_qs(parsed.query)
args = {'transaction_id': qs['transaction_id'][0], 'signed': True, 'ok': True, 'reason': 'Paid'}
# make sure return url is the user return URL
return_url = qs['return_url'][0]
assert urlparse.urlparse(return_url).path.startswith(
assert urllib.parse.urlparse(return_url).path.startswith(
'/lingo/return-payment-backend/%s/' % remote_regie.payment_backend.id
)
# simulate payment failure
@ -619,10 +619,10 @@ def test_remote_item_payment_failure(mock_post, mock_get, mock_pay_invoice, app,
resp = app.get(qs['return_url'][0], params=args)
# redirect to payment status
assert resp.status_code == 302
assert urlparse.urlparse(resp.url).path.startswith('/lingo/payment-status')
assert urllib.parse.urlparse(resp.url).path.startswith('/lingo/payment-status')
resp = resp.follow()
assert (
urlparse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path
urllib.parse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path
== '/active-remote-invoices-page/'
)
@ -674,9 +674,9 @@ def test_remote_invoice_successfull_payment_redirect(
assert resp.status_code == 302
location = resp.location
assert 'dummy-payment' in location
parsed = urlparse.urlparse(location)
parsed = urllib.parse.urlparse(location)
# get return_url and transaction id from location
qs = urlparse.parse_qs(parsed.query)
qs = urllib.parse.parse_qs(parsed.query)
if can_pay_only_one_basket_item:
assert qs['orderid'] == ['order-id-1']
assert qs['subject'] == ['invoice-one']
@ -687,10 +687,10 @@ def test_remote_invoice_successfull_payment_redirect(
resp = app.get(qs['return_url'][0], params=args)
# redirect to payment status
assert resp.status_code == 302
assert urlparse.urlparse(resp.url).path.startswith('/lingo/payment-status')
assert urllib.parse.urlparse(resp.url).path.startswith('/lingo/payment-status')
resp = resp.follow()
assert (
urlparse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path
urllib.parse.urlparse(resp.html.find('a', {'id': 'next-url'})['href']).path
== '/active-remote-invoices-page/'
)

View File

@ -4,6 +4,7 @@ import json
import os
import re
import shutil
import urllib.parse
from unittest import mock
import pytest
@ -21,7 +22,6 @@ from django.urls import reverse
from django.utils.encoding import force_bytes, force_str
from django.utils.http import urlencode
from django.utils.six import BytesIO
from django.utils.six.moves.urllib import parse as urlparse
from django.utils.timezone import now
from webtest import Upload
@ -2369,7 +2369,7 @@ def test_django_admin(app, admin_user):
assert '/admin/logout/' in resp.text
resp = resp.click(href='/admin/logout/')
resp = resp.follow() # -> /logout/
assert urlparse.urlparse(resp.location).path == '/'
assert urllib.parse.urlparse(resp.location).path == '/'
def test_json_cell_syntax_validation(app, admin_user):

View File

@ -2,6 +2,7 @@ import datetime
import json
import os
import re
import urllib.parse
from unittest import mock
import pytest
@ -14,7 +15,6 @@ from django.test.utils import CaptureQueriesContext
from django.urls import reverse
from django.utils.http import quote
from django.utils.six import StringIO
from django.utils.six.moves.urllib import parse as urlparse
try:
import mellon # pylint: disable=unused-import
@ -52,7 +52,7 @@ def test_index(app):
page = Page(title='Home', slug='index', template_name='standard')
page.save()
resp = app.get('/index', status=301)
assert urlparse.urlparse(resp.location).path == '/'
assert urllib.parse.urlparse(resp.location).path == '/'
resp = app.get('/', status=200)
# check {% now %} inside a skeleton_extra_placeholder is interpreted
@ -88,9 +88,9 @@ def test_mellon_login(app):
with mock.patch('combo.public.views.get_idps') as get_idps:
get_idps.return_value = ['xxx']
resp = app.get('/login/')
assert urlparse.urlparse(resp.location).path == '/accounts/mellon/login/'
assert urllib.parse.urlparse(resp.location).path == '/accounts/mellon/login/'
resp = app.get('/login/?next=whatever')
assert urlparse.urlparse(resp.location).query == 'next=whatever'
assert urllib.parse.urlparse(resp.location).query == 'next=whatever'
def test_page_contents_group_presence(app, normal_user):
@ -158,7 +158,7 @@ def test_page_footer_acquisition(app):
ParentContentCell(page=page, placeholder='footer', order=0).save()
TextCell(page=page, placeholder='footer', text='BAR2FOO', order=1).save()
resp = app.get('/second', status=301)
assert urlparse.urlparse(resp.location).path == '/second/'
assert urllib.parse.urlparse(resp.location).path == '/second/'
with CaptureQueriesContext(connection) as ctx:
resp = app.get('/second/', status=200)
assert resp.text.count('BARFOO') == 1
@ -447,7 +447,7 @@ def test_subpage_location(app):
assert 'Grand child of home' in resp.text
assert (
urlparse.urlparse(app.get('/child-home/grand-child-home', status=301).location).path
urllib.parse.urlparse(app.get('/child-home/grand-child-home', status=301).location).path
== '/child-home/grand-child-home/'
)
app.get('/grand-child-home/', status=404)
@ -653,7 +653,7 @@ def test_initial_login_page(app, admin_user):
# first visit
app = login(app)
resp = app.get('/', status=302)
assert urlparse.urlparse(resp.location).path == '/initial-login/'
assert urllib.parse.urlparse(resp.location).path == '/initial-login/'
# visit again
resp = app.get('/', status=200)
@ -669,13 +669,13 @@ def test_welcome_page(app, admin_user):
with override_settings(COMBO_WELCOME_PAGE_PATH='/welcome/'):
app.cookiejar.clear()
resp = app.get('/', status=302)
assert urlparse.urlparse(resp.location).path == '/welcome/'
assert urllib.parse.urlparse(resp.location).path == '/welcome/'
resp = app.get('/', status=200)
app.cookiejar.clear()
resp = app.get('/', status=302)
assert urlparse.urlparse(resp.location).path == '/welcome/'
assert urllib.parse.urlparse(resp.location).path == '/welcome/'
app.cookiejar.clear()
app = login(app)
@ -749,7 +749,7 @@ def test_post_cell(app):
assert requests_post.call_args[0][0] == 'POST'
assert requests_post.call_args[0][1] == 'http://test-post-cell/slug/create/'
assert requests_post.call_args[1]['json'] == {'value': 'plop', 'items': ['1']}
assert urlparse.urlparse(resp2.location).path == '/'
assert urllib.parse.urlparse(resp2.location).path == '/'
# check ajax call
with mock.patch('combo.utils.requests.request') as requests_post:
@ -764,7 +764,7 @@ def test_post_cell(app):
with mock.patch('combo.utils.requests.request') as requests_post:
requests_post.return_value = mock.Mock(content=json.dumps({'err': 0}), status_code=400)
resp2 = resp.form.submit()
assert urlparse.urlparse(resp2.location).path == '/'
assert urllib.parse.urlparse(resp2.location).path == '/'
resp2 = resp2.follow()
assert 'Error sending data.' in resp2.text
@ -772,7 +772,7 @@ def test_post_cell(app):
'error-message'
] = 'Failed to create stuff.'
resp2 = resp.form.submit()
assert urlparse.urlparse(resp2.location).path == '/'
assert urllib.parse.urlparse(resp2.location).path == '/'
resp2 = resp2.follow()
assert 'Failed to create stuff.' in resp2.text
@ -799,7 +799,7 @@ def test_post_cell(app):
assert requests_patch.call_args[0][0] == 'PATCH'
assert requests_patch.call_args[0][1] == 'http://test-post-cell/slug/update/'
assert requests_patch.call_args[1]['json'] == {'value': 'plop', 'items': ['1']}
assert urlparse.urlparse(resp2.location).path == '/'
assert urllib.parse.urlparse(resp2.location).path == '/'
# check raw result
with mock.patch('combo.utils.requests.request') as requests_search:
@ -1016,31 +1016,31 @@ def test_redirects(app):
redirect = Redirect(old_url='/whatever/', page=page3)
redirect.save()
assert urlparse.urlparse(app.get('/whatever/', status=302).location).path == '/second/third/'
assert urlparse.urlparse(app.get('/whatever', status=301).location).path == '/whatever/'
assert urllib.parse.urlparse(app.get('/whatever/', status=302).location).path == '/second/third/'
assert urllib.parse.urlparse(app.get('/whatever', status=301).location).path == '/whatever/'
# check the most recent redirect is called
redirect = Redirect(old_url='/whatever/', page=page2)
redirect.save()
assert urlparse.urlparse(app.get('/whatever/', status=302).location).path == '/second/'
assert urllib.parse.urlparse(app.get('/whatever/', status=302).location).path == '/second/'
# rename page
page3.slug = 'third2'
page3.save()
assert app.get('/second/third2/', status=200)
assert urlparse.urlparse(app.get('/second/third/', status=302).location).path == '/second/third2/'
assert urllib.parse.urlparse(app.get('/second/third/', status=302).location).path == '/second/third2/'
page2.slug = 'second2'
page2.save()
assert urlparse.urlparse(app.get('/second/third/', status=302).location).path == '/second2/third2/'
assert urlparse.urlparse(app.get('/second/third2/', status=302).location).path == '/second2/third2/'
assert urlparse.urlparse(app.get('/second/', status=302).location).path == '/second2/'
assert urllib.parse.urlparse(app.get('/second/third/', status=302).location).path == '/second2/third2/'
assert urllib.parse.urlparse(app.get('/second/third2/', status=302).location).path == '/second2/third2/'
assert urllib.parse.urlparse(app.get('/second/', status=302).location).path == '/second2/'
# change parent
page3.parent = None
page3.save()
assert urlparse.urlparse(app.get('/second/third/', status=302).location).path == '/third2/'
assert urlparse.urlparse(app.get('/second2/third2/', status=302).location).path == '/third2/'
assert urllib.parse.urlparse(app.get('/second/third/', status=302).location).path == '/third2/'
assert urllib.parse.urlparse(app.get('/second2/third2/', status=302).location).path == '/third2/'
def test_sub_slug(app, john_doe, jane_doe):
@ -1158,10 +1158,10 @@ def test_cell_slugs(app):
def test_missing_trailing_slashes(app):
# redirect to path with slash
assert urlparse.urlparse(app.get('/login', status=301).location).path == '/login/'
assert urlparse.urlparse(app.get('/foo', status=301).location).path == '/foo/'
assert urllib.parse.urlparse(app.get('/login', status=301).location).path == '/login/'
assert urllib.parse.urlparse(app.get('/foo', status=301).location).path == '/foo/'
# don't be tricked by double slashes
assert urlparse.urlparse(app.get('//foo', status=301).location).path == '/foo/'
assert urllib.parse.urlparse(app.get('//foo', status=301).location).path == '/foo/'
def test_cell_asset_css_classes(settings, app, admin_user):

View File

@ -1,8 +1,8 @@
import urllib.parse
from unittest import mock
import pytest
from django.contrib.auth.models import AnonymousUser
from django.utils.six.moves.urllib import parse as urlparse
from combo.utils import NothingInCacheException, check_query, requests
@ -32,8 +32,8 @@ def test_sign():
requests.get('/foo/bar/', remote_service=remote_service)
url = send.call_args[0][0].url
assert url.startswith('http://example.org/foo/bar/?')
dummy, dummy, dummy, dummy, querystring, dummy = urlparse.urlparse(url)
query = urlparse.parse_qs(querystring, keep_blank_values=True)
dummy, dummy, dummy, dummy, querystring, dummy = urllib.parse.urlparse(url)
query = urllib.parse.parse_qs(querystring, keep_blank_values=True)
assert query['orig'][0] == 'myself'
assert query['email'][0] == ''
assert query['NameID'][0] == ''
@ -42,8 +42,8 @@ def test_sign():
requests.get('/foo/bar/', remote_service=remote_service, without_user=True)
url = send.call_args[0][0].url
assert url.startswith('http://example.org/foo/bar/?')
dummy, dummy, dummy, dummy, querystring, dummy = urlparse.urlparse(url)
query = urlparse.parse_qs(querystring, keep_blank_values=True)
dummy, dummy, dummy, dummy, querystring, dummy = urllib.parse.urlparse(url)
query = urllib.parse.parse_qs(querystring, keep_blank_values=True)
assert query['orig'][0] == 'myself'
assert 'email' not in query
assert 'NameID' not in query
@ -55,8 +55,8 @@ def test_auto_sign():
requests.get('http://example.org/foo/bar/', remote_service='auto')
url = send.call_args[0][0].url
assert url.startswith('http://example.org/foo/bar/?')
dummy, dummy, dummy, dummy, querystring, dummy = urlparse.urlparse(url)
query = urlparse.parse_qs(querystring, keep_blank_values=True)
dummy, dummy, dummy, dummy, querystring, dummy = urllib.parse.urlparse(url)
query = urllib.parse.parse_qs(querystring, keep_blank_values=True)
assert query['orig'][0] == 'combo'
assert check_query(querystring, 'combo') is True
@ -73,8 +73,8 @@ def test_sign_user():
requests.get('/foo/bar/', remote_service=remote_service, user=user)
url = send.call_args[0][0].url
assert url.startswith('http://example.org/foo/bar/?')
dummy, dummy, dummy, dummy, querystring, dummy = urlparse.urlparse(url)
query = urlparse.parse_qs(querystring, keep_blank_values=True)
dummy, dummy, dummy, dummy, querystring, dummy = urllib.parse.urlparse(url)
query = urllib.parse.parse_qs(querystring, keep_blank_values=True)
assert query['NameID'][0] == 'r2d2'
assert 'email' not in query
assert query['orig'][0] == 'myself'
@ -83,8 +83,8 @@ def test_sign_user():
requests.get('/foo/bar/', remote_service=remote_service, user=user, federation_key='email')
url = send.call_args[0][0].url
assert url.startswith('http://example.org/foo/bar/?')
dummy, dummy, dummy, dummy, querystring, dummy = urlparse.urlparse(url)
query = urlparse.parse_qs(querystring, keep_blank_values=True)
dummy, dummy, dummy, dummy, querystring, dummy = urllib.parse.urlparse(url)
query = urllib.parse.parse_qs(querystring, keep_blank_values=True)
assert query['email'][0] == 'foo@example.net'
assert 'NameID' not in query
assert query['orig'][0] == 'myself'
@ -95,8 +95,8 @@ def test_sign_user():
requests.get('/foo/bar/', remote_service=remote_service, user=user)
url = send.call_args[0][0].url
assert url.startswith('http://example.org/foo/bar/?')
dummy, dummy, dummy, dummy, querystring, dummy = urlparse.urlparse(url)
query = urlparse.parse_qs(querystring, keep_blank_values=True)
dummy, dummy, dummy, dummy, querystring, dummy = urllib.parse.urlparse(url)
query = urllib.parse.parse_qs(querystring, keep_blank_values=True)
assert 'NameID' not in query
assert query['email'][0] == 'foo@example.net'
assert query['orig'][0] == 'myself'
@ -112,8 +112,8 @@ def test_sign_anonymous_user():
requests.get('/foo/bar/', remote_service=remote_service, user=user)
url = send.call_args[0][0].url
assert url.startswith('http://example.org/foo/bar/?')
dummy, dummy, dummy, dummy, querystring, dummy = urlparse.urlparse(url)
query = urlparse.parse_qs(querystring, keep_blank_values=True)
dummy, dummy, dummy, dummy, querystring, dummy = urllib.parse.urlparse(url)
query = urllib.parse.parse_qs(querystring, keep_blank_values=True)
assert query['NameID'][0] == ''
assert query['email'][0] == ''
assert query['orig'][0] == 'myself'

View File

@ -1,6 +1,7 @@
import copy
import json
import re
import urllib.parse
from unittest import mock
import pytest
@ -12,7 +13,6 @@ from django.db import connection
from django.test.client import RequestFactory
from django.test.utils import CaptureQueriesContext
from django.urls import reverse
from django.utils.six.moves.urllib import parse as urlparse
from pyquery import PyQuery
from requests.exceptions import ConnectionError
from requests.models import Response
@ -262,7 +262,7 @@ def get_data_from_url(url):
def mocked_requests_send(request, **kwargs):
request_url = urlparse.urlparse(request.url)
request_url = urllib.parse.urlparse(request.url)
data = copy.deepcopy(get_data_from_url(request_url.path))
if not isinstance(data, list):