Commit 03418d95 authored by Michal Čihař's avatar Michal Čihař

Handle urllib improrts through six for Python 3 compatibility

Signed-off-by: default avatarMichal Čihař <michal@cihar.com>
parent 8b769b1b
...@@ -14,6 +14,8 @@ Django (>= 1.7) ...@@ -14,6 +14,8 @@ Django (>= 1.7)
https://www.djangoproject.com/ https://www.djangoproject.com/
Translate-toolkit (>= 1.10.0) Translate-toolkit (>= 1.10.0)
http://toolkit.translatehouse.org/ http://toolkit.translatehouse.org/
Six (>= 1.7.0)
https://pypi.python.org/pypi/six
Git (>= 1.6) Git (>= 1.6)
http://git-scm.com/ http://git-scm.com/
Mercurial (>= 2.8) (optional for Mercurial repositories support) Mercurial (>= 2.8) (optional for Mercurial repositories support)
......
...@@ -3,6 +3,7 @@ Whoosh>=2.5.2,!=2.6.0 ...@@ -3,6 +3,7 @@ Whoosh>=2.5.2,!=2.6.0
translate-toolkit>=1.10.0 translate-toolkit>=1.10.0
lxml>=3.1.0 lxml>=3.1.0
Pillow Pillow
six
python-dateutil python-dateutil
python-social-auth>=0.2.0 python-social-auth>=0.2.0
django-crispy-forms>=1.4.0 django-crispy-forms>=1.4.0
......
#!/usr/bin/python #!/usr/bin/python
import json import json
import urllib2 from six.moves.urllib.request import urlopen
import imp import imp
import PyICU import PyICU
...@@ -24,7 +24,7 @@ def print_language(lang, fmt='{0} ({1})'): ...@@ -24,7 +24,7 @@ def print_language(lang, fmt='{0} ({1})'):
def main(): def main():
# load data # load data
handle = urllib2.urlopen(URL) handle = urlopen(URL)
data = handle.read() data = handle.read()
handle.close() handle.close()
# parse data # parse data
......
...@@ -20,11 +20,11 @@ ...@@ -20,11 +20,11 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import urllib2
import sys import sys
import urllib
import hashlib import hashlib
import os.path import os.path
from six.moves.urllib.request import Request, urlopen
from six.moves.urllib.parse import urlencode
from django.core.cache import caches, InvalidCacheBackendError from django.core.cache import caches, InvalidCacheBackendError
from django.utils.html import escape from django.utils.html import escape
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
...@@ -79,7 +79,7 @@ def avatar_for_email(email, size=80): ...@@ -79,7 +79,7 @@ def avatar_for_email(email, size=80):
url = "{0}avatar/{1}?{2}".format( url = "{0}avatar/{1}?{2}".format(
appsettings.AVATAR_URL_PREFIX, appsettings.AVATAR_URL_PREFIX,
mail_hash, mail_hash,
urllib.urlencode({ urlencode({
's': str(size), 's': str(size),
'd': appsettings.AVATAR_DEFAULT_IMAGE 'd': appsettings.AVATAR_DEFAULT_IMAGE
}) })
...@@ -154,12 +154,12 @@ def download_avatar_image(user, size): ...@@ -154,12 +154,12 @@ def download_avatar_image(user, size):
Downloads avatar image from remote server. Downloads avatar image from remote server.
""" """
url = avatar_for_email(user.email, size) url = avatar_for_email(user.email, size)
request = urllib2.Request(url) request = Request(url)
request.timeout = 0.5 request.timeout = 0.5
request.add_header('User-Agent', USER_AGENT) request.add_header('User-Agent', USER_AGENT)
# Fire request # Fire request
handle = urllib2.urlopen(request) handle = urlopen(request)
# Read and possibly convert response # Read and possibly convert response
return handle.read() return handle.read()
......
...@@ -24,7 +24,7 @@ from django.core.urlresolvers import reverse ...@@ -24,7 +24,7 @@ from django.core.urlresolvers import reverse
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
import urllib2 from six.moves.urllib.request import Request, urlopen
import json import json
from social.pipeline.partial import partial from social.pipeline.partial import partial
...@@ -40,14 +40,14 @@ from weblate import USER_AGENT ...@@ -40,14 +40,14 @@ from weblate import USER_AGENT
def get_github_email(access_token): def get_github_email(access_token):
"""Get real email from GitHub""" """Get real email from GitHub"""
request = urllib2.Request('https://api.github.com/user/emails') request = Request('https://api.github.com/user/emails')
request.timeout = 1.0 request.timeout = 1.0
request.add_header('User-Agent', USER_AGENT) request.add_header('User-Agent', USER_AGENT)
request.add_header( request.add_header(
'Authorization', 'Authorization',
'token {0}'.format(access_token) 'token {0}'.format(access_token)
) )
handle = urllib2.urlopen(request) handle = urlopen(request)
data = json.load(handle) data = json.load(handle)
email = None email = None
for entry in data: for entry in data:
......
...@@ -36,7 +36,7 @@ from django.views.generic import TemplateView ...@@ -36,7 +36,7 @@ from django.views.generic import TemplateView
from django.contrib.auth import update_session_auth_hash from django.contrib.auth import update_session_auth_hash
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from urllib import urlencode from six.moves.urllib.parse import urlencode
from weblate.accounts.forms import ( from weblate.accounts.forms import (
RegistrationForm, PasswordForm, PasswordChangeForm, EmailForm, ResetForm, RegistrationForm, PasswordForm, PasswordChangeForm, EmailForm, ResetForm,
...@@ -378,7 +378,7 @@ def weblate_login(request): ...@@ -378,7 +378,7 @@ def weblate_login(request):
return redirect('profile') return redirect('profile')
# Redirect if there is only one backend # Redirect if there is only one backend
auth_backends = load_backends(BACKENDS).keys() auth_backends = list(load_backends(BACKENDS).keys())
if len(auth_backends) == 1 and auth_backends[0] != 'email': if len(auth_backends) == 1 and auth_backends[0] != 'email':
return redirect('social:begin', auth_backends[0]) return redirect('social:begin', auth_backends[0])
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
from StringIO import StringIO from six import StringIO
from django.test import TestCase from django.test import TestCase
from django.contrib.auth.models import User from django.contrib.auth.models import User
......
...@@ -23,7 +23,7 @@ from django.utils.translation import ugettext as _ ...@@ -23,7 +23,7 @@ from django.utils.translation import ugettext as _
from django.http import Http404 from django.http import Http404
from weblate.lang.models import Language from weblate.lang.models import Language
from weblate.trans.models import Project, Dictionary, Change from weblate.trans.models import Project, Dictionary, Change
from urllib import urlencode from six.moves.urllib.parse import urlencode
def show_languages(request): def show_languages(request):
......
...@@ -110,6 +110,16 @@ def get_versions(): ...@@ -110,6 +110,16 @@ def get_versions():
'1.7', '1.7',
)) ))
name = 'six'
url = 'https://pypi.python.org/pypi/six'
mod = get_version_module('social', name, url)
result.append((
name,
url,
mod.__version__,
'1.7.0',
))
name = 'python-social-auth' name = 'python-social-auth'
url = 'http://psa.matiasaguirre.net/' url = 'http://psa.matiasaguirre.net/'
mod = get_version_module('social', name, url) mod = get_version_module('social', name, url)
......
...@@ -40,7 +40,7 @@ from weblate.trans.permissions import ( ...@@ -40,7 +40,7 @@ from weblate.trans.permissions import (
from weblate.trans.specialchars import get_special_chars from weblate.trans.specialchars import get_special_chars
from weblate.trans.validators import validate_check_flags from weblate.trans.validators import validate_check_flags
from weblate.accounts.forms import sort_choices from weblate.accounts.forms import sort_choices
from urllib import urlencode from six.moves.urllib.parse import urlencode
from datetime import date from datetime import date
from weblate.logger import LOGGER from weblate.logger import LOGGER
from weblate import get_doc_url from weblate import get_doc_url
......
...@@ -24,10 +24,10 @@ Base code for machine translation services. ...@@ -24,10 +24,10 @@ Base code for machine translation services.
from django.core.cache import cache from django.core.cache import cache
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from six.moves.urllib.request import Request, urlopen
from six.moves.urllib.parse import urlencode
import sys import sys
import json import json
import urllib
import urllib2
from weblate import USER_AGENT from weblate import USER_AGENT
from weblate.logger import LOGGER from weblate.logger import LOGGER
from weblate.trans.util import report_error from weblate.trans.util import report_error
...@@ -72,7 +72,7 @@ class MachineTranslation(object): ...@@ -72,7 +72,7 @@ class MachineTranslation(object):
''' '''
# Encode params # Encode params
if len(kwargs) > 0: if len(kwargs) > 0:
params = urllib.urlencode(kwargs) params = urlencode(kwargs)
else: else:
params = '' params = ''
...@@ -85,7 +85,7 @@ class MachineTranslation(object): ...@@ -85,7 +85,7 @@ class MachineTranslation(object):
url = '%s?%s' % (url, params) url = '%s?%s' % (url, params)
# Create request object with custom headers # Create request object with custom headers
request = urllib2.Request(url) request = Request(url)
request.timeout = 0.5 request.timeout = 0.5
request.add_header('User-Agent', USER_AGENT) request.add_header('User-Agent', USER_AGENT)
# Optional authentication # Optional authentication
...@@ -94,9 +94,9 @@ class MachineTranslation(object): ...@@ -94,9 +94,9 @@ class MachineTranslation(object):
# Fire request # Fire request
if http_post: if http_post:
handle = urllib2.urlopen(request, params) handle = urlopen(request, params)
else: else:
handle = urllib2.urlopen(request) handle = urlopen(request)
# Read and possibly convert response # Read and possibly convert response
text = handle.read() text = handle.read()
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
from weblate.trans.machine.base import ( from weblate.trans.machine.base import (
MachineTranslation, MissingConfiguration MachineTranslation, MissingConfiguration
) )
import urllib from six.moves.urllib.parse import quote
from weblate import appsettings from weblate import appsettings
...@@ -68,9 +68,9 @@ class TMServerTranslation(MachineTranslation): ...@@ -68,9 +68,9 @@ class TMServerTranslation(MachineTranslation):
''' '''
url = '%s/tmserver/%s/%s/unit/%s' % ( url = '%s/tmserver/%s/%s/unit/%s' % (
self.url, self.url,
urllib.quote(appsettings.SOURCE_LANGUAGE), quote(appsettings.SOURCE_LANGUAGE),
urllib.quote(language), quote(language),
urllib.quote(text[:500].encode('utf-8').replace('\r', ' ')), quote(text[:500].encode('utf-8').replace('\r', ' ')),
) )
response = self.json_req(url) response = self.json_req(url)
......
...@@ -48,7 +48,7 @@ from weblate.trans.views.helper import ( ...@@ -48,7 +48,7 @@ from weblate.trans.views.helper import (
import weblate import weblate
import datetime import datetime
from urllib import urlencode from six.moves.urllib.parse import urlencode
def home(request): def home(request):
......
...@@ -31,7 +31,7 @@ from weblate.trans.models.changes import Change ...@@ -31,7 +31,7 @@ from weblate.trans.models.changes import Change
from weblate.trans.views.helper import get_project_translation from weblate.trans.views.helper import get_project_translation
from weblate.lang.models import Language from weblate.lang.models import Language
from weblate.trans.permissions import can_download_changes from weblate.trans.permissions import can_download_changes
from urllib import urlencode from six.moves.urllib.parse import urlencode
import csv import csv
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import urllib from six.moves.urllib.parse import urlencode
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
...@@ -42,7 +42,7 @@ def acl_checks(user): ...@@ -42,7 +42,7 @@ def acl_checks(user):
def encode_optional(params): def encode_optional(params):
if params: if params:
return '?{0}'.format(urllib.urlencode(params)) return '?{0}'.format(urlencode(params))
else: else:
return '' return ''
......
...@@ -36,7 +36,7 @@ import weblate ...@@ -36,7 +36,7 @@ import weblate
import csv import csv
import sys import sys
from urllib import urlencode from six.moves.urllib.parse import urlencode
def dict_title(prj, lang): def dict_title(prj, lang):
......
...@@ -37,7 +37,7 @@ from weblate.trans.permissions import ( ...@@ -37,7 +37,7 @@ from weblate.trans.permissions import (
can_use_mt, can_see_repository_status, can_ignore_check, can_use_mt, can_see_repository_status, can_ignore_check,
) )
from urllib import urlencode from six.moves.urllib.parse import urlencode
def get_string(request, unit_id): def get_string(request, unit_id):
......
...@@ -26,7 +26,7 @@ from django.shortcuts import render, redirect, get_object_or_404 ...@@ -26,7 +26,7 @@ from django.shortcuts import render, redirect, get_object_or_404
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.http import require_POST from django.views.decorators.http import require_POST
from django.contrib import messages from django.contrib import messages
from urllib import urlencode from six.moves.urllib.parse import urlencode
from weblate.trans.views.helper import get_subproject from weblate.trans.views.helper import get_subproject
from weblate.trans.models import Translation, Source from weblate.trans.models import Translation, Source
......
...@@ -25,7 +25,7 @@ from weblate.trans.fonts import is_base, get_font ...@@ -25,7 +25,7 @@ from weblate.trans.fonts import is_base, get_font
from weblate.appsettings import ENABLE_HTTPS from weblate.appsettings import ENABLE_HTTPS
from cStringIO import StringIO from cStringIO import StringIO
import os.path import os.path
import urllib from six.moves.urllib.parse import quote
COLOR_DATA = { COLOR_DATA = {
...@@ -360,7 +360,7 @@ class ShieldsBadgeWidget(Widget): ...@@ -360,7 +360,7 @@ class ShieldsBadgeWidget(Widget):
return '{0}://img.shields.io/badge/{1}-{2}-{3}.svg'.format( return '{0}://img.shields.io/badge/{1}-{2}-{3}.svg'.format(
proto, proto,
urllib.quote(_('translated').encode('utf-8')), quote(_('translated').encode('utf-8')),
'{0}%25'.format(int(self.percent)), '{0}%25'.format(int(self.percent)),
color color
) )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment