From 11347e46af11429c2575241a35e6cef2c14cad20 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 10 Oct 2018 10:51:18 +0100 Subject: [PATCH] Run 2to3 to move to Python 3 Signed-off-by: Michael Tremer --- configure.ac | 3 ++- src/backend/__init__.py | 2 +- src/backend/accounts.py | 16 ++++++++-------- src/backend/base.py | 32 ++++++++++++++++---------------- src/backend/countries.py | 4 ++-- src/backend/database.py | 4 ++-- src/backend/fireinfo.py | 12 ++++++------ src/backend/geoip.py | 4 ++-- src/backend/iuse.py | 10 +++++----- src/backend/memcached.py | 2 +- src/backend/mirrors.py | 10 +++++----- src/backend/netboot.py | 2 +- src/backend/nopaste.py | 2 +- src/backend/releases.py | 16 ++++++++-------- src/backend/settings.py | 2 +- src/backend/talk.py | 2 +- src/backend/tracker.py | 4 ++-- src/backend/util.py | 2 +- src/backend/zeiterfassung.py | 10 +++++----- src/web/__init__.py | 2 +- src/web/blog.py | 2 +- src/web/handlers.py | 18 +++++++++--------- src/web/handlers_accounts.py | 2 +- src/web/handlers_admin.py | 2 +- src/web/handlers_base.py | 6 +++--- src/web/handlers_boot.py | 2 +- src/web/handlers_fireinfo.py | 10 +++++----- src/web/handlers_iuse.py | 2 +- src/web/handlers_mirrors.py | 2 +- src/web/handlers_nopaste.py | 2 +- src/web/handlers_talk.py | 2 +- src/web/location.py | 2 +- src/web/ui_modules.py | 10 +++++----- 33 files changed, 102 insertions(+), 101 deletions(-) diff --git a/configure.ac b/configure.ac index 92a827d2..2acd795b 100644 --- a/configure.ac +++ b/configure.ac @@ -26,7 +26,7 @@ AC_PROG_MKDIR_P AC_PROG_SED # Python -AM_PATH_PYTHON([2.7]) +AM_PATH_PYTHON([3.5]) # scss AC_CHECK_PROG(SASSC, [sassc], [sassc]) @@ -82,4 +82,5 @@ AC_MSG_RESULT([ localedir: ${localedir} systemd support ${have_systemd} + Python version: ${PYTHON_VERSION} ]) diff --git a/src/backend/__init__.py b/src/backend/__init__.py index ad5141fd..7962f7d3 100644 --- a/src/backend/__init__.py +++ b/src/backend/__init__.py @@ -1,3 +1,3 @@ #!/usr/bin/python -from base import Backend +from .base import Backend diff --git a/src/backend/accounts.py b/src/backend/accounts.py index faafc859..fc315d8b 100644 --- a/src/backend/accounts.py +++ b/src/backend/accounts.py @@ -2,13 +2,13 @@ # encoding: utf-8 import PIL -import StringIO +import io import hashlib import ldap import logging -import urllib +import urllib.request, urllib.parse, urllib.error -from misc import Object +from .misc import Object class Accounts(Object): @property @@ -155,7 +155,7 @@ class Account(Object): return self.__attrs def _get_first_attribute(self, attr, default=None): - if not self.attributes.has_key(attr): + if attr not in self.attributes: return default res = self.attributes.get(attr, []) @@ -332,13 +332,13 @@ class Account(Object): return self._resize_avatar(avatar, size) def _resize_avatar(self, image, size): - image = StringIO.StringIO(image) + image = io.StringIO(image) image = PIL.Image.open(image) # Resize the image to the desired resolution image.thumbnail((size, size), PIL.Image.ANTIALIAS) - f = StringIO.StringIO() + f = io.StringIO() # If writing out the image does not work with optimization, # we try to write it out without any optimization. @@ -358,7 +358,7 @@ class Account(Object): # construct the url gravatar_url = "https://www.gravatar.com/avatar/" + \ hashlib.md5(gravatar_email).hexdigest() + "?" - gravatar_url += urllib.urlencode({'d': "mm", 's': str(size)}) + gravatar_url += urllib.parse.urlencode({'d': "mm", 's': str(size)}) return gravatar_url @@ -366,4 +366,4 @@ class Account(Object): if __name__ == "__main__": a = Accounts() - print a.list() + print(a.list()) diff --git a/src/backend/base.py b/src/backend/base.py index 94d7d49d..5705ff7e 100644 --- a/src/backend/base.py +++ b/src/backend/base.py @@ -1,25 +1,25 @@ #!/usr/bin/python -import ConfigParser as configparser -import StringIO - -import accounts -import database -import geoip -import fireinfo -import iuse -import memcached -import mirrors -import netboot -import nopaste -import releases -import settings -import talk +import configparser as configparser +import io + +from . import accounts +from . import database +from . import geoip +from . import fireinfo +from . import iuse +from . import memcached +from . import mirrors +from . import netboot +from . import nopaste +from . import releases +from . import settings +from . import talk from . import blog from . import zeiterfassung -DEFAULT_CONFIG = StringIO.StringIO(""" +DEFAULT_CONFIG = io.StringIO(""" [global] debug = false diff --git a/src/backend/countries.py b/src/backend/countries.py index ae22a6d0..faabecfd 100644 --- a/src/backend/countries.py +++ b/src/backend/countries.py @@ -260,11 +260,11 @@ def get_by_code(code): def get_all(locale=None): if locale is None: - l = country_list.keys() + l = list(country_list.keys()) else: l = [] - for c in country_list.keys(): + for c in list(country_list.keys()): c = locale.translate(c) l.append(c) diff --git a/src/backend/database.py b/src/backend/database.py index 90d00b06..fde06c3e 100644 --- a/src/backend/database.py +++ b/src/backend/database.py @@ -8,7 +8,7 @@ as torndb. """ -from __future__ import absolute_import, division, with_statement + import copy import itertools @@ -82,7 +82,7 @@ class Connection(object): try: self._execute(cursor, query, parameters, kwparameters) column_names = [d[0] for d in cursor.description] - return [Row(itertools.izip(column_names, row)) for row in cursor] + return [Row(zip(column_names, row)) for row in cursor] finally: cursor.close() diff --git a/src/backend/fireinfo.py b/src/backend/fireinfo.py index dd4aa506..0fbbbc40 100644 --- a/src/backend/fireinfo.py +++ b/src/backend/fireinfo.py @@ -1,6 +1,6 @@ #!/usr/bin/python -from __future__ import division + import datetime import hwdata @@ -8,9 +8,9 @@ import iso3166 import logging import re -import database -import util -from misc import Object +from . import database +from . import util +from .misc import Object N_ = lambda x: x @@ -1400,7 +1400,7 @@ class ProfileParser(Object): for arg in self.__processor_args_mandatory: if not args.get(arg, None): - raise ProfileParserError, "Mandatory argument missing: %s" % arg + raise ProfileParserError("Mandatory argument missing: %s" % arg) self.processor = self.fireinfo.get_processor(**args) if not self.processor: @@ -2041,7 +2041,7 @@ class Fireinfo(Object): except KeyError: vendors[vendor] = [(row.subsystem, row.vendor)] - vendors = vendors.items() + vendors = list(vendors.items()) return sorted(vendors) def get_devices_by_vendor(self, subsystem, vendor, when=None): diff --git a/src/backend/geoip.py b/src/backend/geoip.py index 9a3650f0..3bb887d3 100644 --- a/src/backend/geoip.py +++ b/src/backend/geoip.py @@ -3,9 +3,9 @@ import IPy import re -import countries +from . import countries -from misc import Object +from .misc import Object class GeoIP(Object): def guess_address_family(self, addr): diff --git a/src/backend/iuse.py b/src/backend/iuse.py index 0da525aa..bc0812dc 100644 --- a/src/backend/iuse.py +++ b/src/backend/iuse.py @@ -1,14 +1,14 @@ #!/usr/bin/python -from __future__ import division -import StringIO + +import io import logging import os.path from PIL import Image, ImageDraw, ImageFont, PngImagePlugin -from misc import Object +from .misc import Object image_types = [] @@ -53,7 +53,7 @@ class ImageObject(Object): self._image.save(filename, "PNG", optimize=True) def to_string(self): - f = StringIO.StringIO() + f = io.StringIO() self.save(f) @@ -82,7 +82,7 @@ class ImageObject(Object): return self.__font def draw_text(self, pos, text, **kwargs): - if not kwargs.has_key("font"): + if "font" not in kwargs: kwargs["font"] = self.font return self.paint.text(pos, text, **kwargs) diff --git a/src/backend/memcached.py b/src/backend/memcached.py index 105f1f54..25ff030b 100644 --- a/src/backend/memcached.py +++ b/src/backend/memcached.py @@ -3,7 +3,7 @@ import logging import memcache -from misc import Object +from .misc import Object class Memcached(Object): def init(self): diff --git a/src/backend/mirrors.py b/src/backend/mirrors.py index 60bd7793..08f5057b 100644 --- a/src/backend/mirrors.py +++ b/src/backend/mirrors.py @@ -1,6 +1,6 @@ #!/usr/bin/python -from __future__ import division + import datetime import logging @@ -11,9 +11,9 @@ import socket import time import tornado.httpclient import tornado.netutil -import urlparse +import urllib.parse -from misc import Object +from .misc import Object class Downloads(Object): @property @@ -409,7 +409,7 @@ class Mirror(Object): return self._info.url def build_url(self, filename): - return urlparse.urljoin(self.url, filename) + return urllib.parse.urljoin(self.url, filename) @property def last_update(self): @@ -599,7 +599,7 @@ class Mirror(Object): traffic = 0 for entry in self.db.query(query, self.id, since): - if files.has_key(entry.filename): + if entry.filename in files: traffic += entry.count * files[entry.filename] return traffic diff --git a/src/backend/netboot.py b/src/backend/netboot.py index 9d112f22..7d378696 100644 --- a/src/backend/netboot.py +++ b/src/backend/netboot.py @@ -1,6 +1,6 @@ #!/usr/bin/python -from misc import Object +from .misc import Object class MenuEntry(object): def __init__(self, _data): diff --git a/src/backend/nopaste.py b/src/backend/nopaste.py index af339374..fc186fa0 100644 --- a/src/backend/nopaste.py +++ b/src/backend/nopaste.py @@ -2,7 +2,7 @@ import magic -from misc import Object +from .misc import Object class Nopaste(Object): def create(self, subject, content, type="text", expires=None, account=None, address=None): diff --git a/src/backend/releases.py b/src/backend/releases.py index ca755e81..ba898e70 100644 --- a/src/backend/releases.py +++ b/src/backend/releases.py @@ -4,12 +4,12 @@ import hashlib import logging import os import re -import urllib -import urlparse +import urllib.request, urllib.parse, urllib.error +import urllib.parse -import database -import tracker -from misc import Object +from . import database +from . import tracker +from .misc import Object TRACKERS = ( "http://ipv4.tracker.ipfire.org:6969/announce", @@ -89,7 +89,7 @@ class File(Object): @property def url(self): - return urlparse.urljoin("https://downloads.ipfire.org", self.filename) + return urllib.parse.urljoin("https://downloads.ipfire.org", self.filename) @property def desc(self): @@ -199,14 +199,14 @@ class File(Object): s = "magnet:?xt=urn:btih:%s" % self.torrent_hash #s += "&xl=%d" % self.size - s += "&dn=%s" % urllib.quote(self.basename) + s += "&dn=%s" % urllib.parse.quote(self.basename) # Add our tracker. for tracker in TRACKERS: s += "&tr=%s" % tracker # Add web download URL - s += "&as=%s" % urllib.quote(self.url) + s += "&as=%s" % urllib.parse.quote(self.url) return s diff --git a/src/backend/settings.py b/src/backend/settings.py index 6355485f..c1a7134f 100644 --- a/src/backend/settings.py +++ b/src/backend/settings.py @@ -1,6 +1,6 @@ #!/usr/bin/python -from misc import Object +from .misc import Object class Settings(Object): def init(self): diff --git a/src/backend/talk.py b/src/backend/talk.py index fab3964b..8029a250 100644 --- a/src/backend/talk.py +++ b/src/backend/talk.py @@ -4,7 +4,7 @@ import re from . import database -from misc import Object +from .misc import Object class Talk(Object): def get_phonebook(self, account=None): diff --git a/src/backend/tracker.py b/src/backend/tracker.py index c30df826..cabf545a 100644 --- a/src/backend/tracker.py +++ b/src/backend/tracker.py @@ -1,6 +1,6 @@ #!/usr/bin/python -from __future__ import division + def ncode_hex(s): return s.encode("hex") @@ -100,7 +100,7 @@ def encode_list(x, r): def encode_dict(x,r): r.append('d') - ilist = x.items() + ilist = list(x.items()) ilist.sort() for k, v in ilist: r.extend((str(len(k)), ':', k)) diff --git a/src/backend/util.py b/src/backend/util.py index ee9dd60f..616ab878 100644 --- a/src/backend/util.py +++ b/src/backend/util.py @@ -1,6 +1,6 @@ #!/usr/bin/python -from __future__ import division + def format_size(s): units = ("B", "k", "M", "G", "T") diff --git a/src/backend/zeiterfassung.py b/src/backend/zeiterfassung.py index 626b3650..6cd0dd0e 100644 --- a/src/backend/zeiterfassung.py +++ b/src/backend/zeiterfassung.py @@ -5,10 +5,10 @@ import hmac import json import tornado.httpclient import tornado.gen -import urllib -import urlparse +import urllib.request, urllib.parse, urllib.error +import urllib.parse -from misc import Object +from .misc import Object class ZeiterfassungClient(Object): algorithm = "Zeiterfassung-HMAC-SHA512" @@ -47,13 +47,13 @@ class ZeiterfassungClient(Object): @tornado.gen.coroutine def send_request(self, path, **kwargs): - url = urlparse.urljoin(self.url, path) + url = urllib.parse.urljoin(self.url, path) # Query arguments are all keyword arguments arguments = kwargs request = tornado.httpclient.HTTPRequest(url, method="POST") - request.body = urllib.urlencode(arguments) + request.body = urllib.parse.urlencode(arguments) # Compose the signature signature = self._make_signature("POST", path, request.body) diff --git a/src/web/__init__.py b/src/web/__init__.py index 34290829..e608467c 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -8,7 +8,7 @@ import tornado.web import ipfire -from handlers import * +from .handlers import * from . import auth from . import blog diff --git a/src/web/blog.py b/src/web/blog.py index 86f8bfe0..5b7dc4a1 100644 --- a/src/web/blog.py +++ b/src/web/blog.py @@ -4,7 +4,7 @@ import datetime import email.utils import tornado.web -import handlers_base as base +from . import handlers_base as base from . import ui_modules diff --git a/src/web/handlers.py b/src/web/handlers.py index a82921f8..046d96cc 100644 --- a/src/web/handlers.py +++ b/src/web/handlers.py @@ -16,15 +16,15 @@ import tornado.gen import tornado.web #import unicodedata -from handlers_accounts import * -from handlers_admin import * -from handlers_base import * -from handlers_boot import * -from handlers_fireinfo import * -from handlers_iuse import * -from handlers_mirrors import * -from handlers_nopaste import * -from handlers_talk import * +from .handlers_accounts import * +from .handlers_admin import * +from .handlers_base import * +from .handlers_boot import * +from .handlers_fireinfo import * +from .handlers_iuse import * +from .handlers_mirrors import * +from .handlers_nopaste import * +from .handlers_talk import * class LangCompatHandler(BaseHandler): """ diff --git a/src/web/handlers_accounts.py b/src/web/handlers_accounts.py index d07b936c..85016920 100644 --- a/src/web/handlers_accounts.py +++ b/src/web/handlers_accounts.py @@ -3,7 +3,7 @@ import logging import tornado.web -from handlers_base import * +from .handlers_base import * class AccountsAvatarHandler(BaseHandler): def get(self, who): diff --git a/src/web/handlers_admin.py b/src/web/handlers_admin.py index 50c5fd18..aa31b4ca 100644 --- a/src/web/handlers_admin.py +++ b/src/web/handlers_admin.py @@ -3,7 +3,7 @@ import datetime import tornado.web -from handlers_base import * +from .handlers_base import * class AdminBaseHandler(BaseHandler): pass diff --git a/src/web/handlers_base.py b/src/web/handlers_base.py index d435c1c8..33164af6 100644 --- a/src/web/handlers_base.py +++ b/src/web/handlers_base.py @@ -1,10 +1,10 @@ #!/usr/bin/python -from __future__ import division + import datetime import dateutil.parser -import httplib +import http.client import ipaddr import logging import time @@ -17,7 +17,7 @@ class BaseHandler(tornado.web.RequestHandler): def write_error(self, status_code, **kwargs): # Translate code into message try: - message = httplib.responses[status_code] + message = http.client.responses[status_code] except KeyError: message = None diff --git a/src/web/handlers_boot.py b/src/web/handlers_boot.py index 3922ad46..580aaa5c 100644 --- a/src/web/handlers_boot.py +++ b/src/web/handlers_boot.py @@ -8,7 +8,7 @@ import tornado.locale import tornado.options import tornado.web -from handlers_base import BaseHandler +from .handlers_base import BaseHandler BASEDIR = os.path.dirname(__file__) diff --git a/src/web/handlers_fireinfo.py b/src/web/handlers_fireinfo.py index 580a3c73..d5b81864 100644 --- a/src/web/handlers_fireinfo.py +++ b/src/web/handlers_fireinfo.py @@ -1,6 +1,6 @@ #!/usr/bin/python -from __future__ import division + import datetime import hwdata @@ -11,7 +11,7 @@ import tornado.web from .. import fireinfo -from handlers_base import * +from .handlers_base import * class FireinfoBaseHandler(BaseHandler): def cut_string(self, s, limit=15): @@ -40,7 +40,7 @@ class Profile(dict): try: return self[key] except KeyError: - raise AttributeError, key + raise AttributeError(key) def __setattr__(self, key, val): self[key] = val @@ -65,7 +65,7 @@ class FireinfoProfileSendHandler(FireinfoBaseHandler): "public_id", ) for attr in attributes: - if not profile.has_key(attr): + if attr not in profile: raise tornado.web.HTTPError(400, "Profile lacks '%s' attribute: %s" % (attr, profile)) def __check_valid_ids(self, profile): @@ -136,7 +136,7 @@ class FireinfoProfileSendHandler(FireinfoBaseHandler): # Try to decode the profile. try: return json.loads(profile) - except json.decoder.JSONDecodeError, e: + except json.decoder.JSONDecodeError as e: raise tornado.web.HTTPError(400, "Profile could not be decoded: %s" % e) # The GET method is only allowed in debugging mode. diff --git a/src/web/handlers_iuse.py b/src/web/handlers_iuse.py index 66f982be..70aa24b4 100644 --- a/src/web/handlers_iuse.py +++ b/src/web/handlers_iuse.py @@ -6,7 +6,7 @@ import os import random import tornado.web -from handlers_base import * +from .handlers_base import * class IUseImage(BaseHandler): expires = 3600 * 3 diff --git a/src/web/handlers_mirrors.py b/src/web/handlers_mirrors.py index 6ccaf6a5..6ad81dae 100644 --- a/src/web/handlers_mirrors.py +++ b/src/web/handlers_mirrors.py @@ -3,7 +3,7 @@ import socket import tornado.web -from handlers_base import * +from .handlers_base import * class MirrorIndexHandler(BaseHandler): def get(self): diff --git a/src/web/handlers_nopaste.py b/src/web/handlers_nopaste.py index 6c2b75b0..ae4ceb1f 100644 --- a/src/web/handlers_nopaste.py +++ b/src/web/handlers_nopaste.py @@ -2,7 +2,7 @@ import tornado.web -from handlers_base import * +from .handlers_base import * class NopasteCreateHandler(BaseHandler): MODES = ("paste", "upload") diff --git a/src/web/handlers_talk.py b/src/web/handlers_talk.py index 39fccfbe..5b66d9a4 100644 --- a/src/web/handlers_talk.py +++ b/src/web/handlers_talk.py @@ -2,7 +2,7 @@ import tornado.web -from handlers_base import * +from .handlers_base import * class TalkIndexHandler(BaseHandler): @tornado.web.authenticated diff --git a/src/web/location.py b/src/web/location.py index e49ba233..a9e5dc17 100644 --- a/src/web/location.py +++ b/src/web/location.py @@ -3,7 +3,7 @@ import tornado.web -import handlers_base as base +from . import handlers_base as base class IndexHandler(base.BaseHandler): def get(self): diff --git a/src/web/ui_modules.py b/src/web/ui_modules.py index 5fe12c4f..bb394b74 100644 --- a/src/web/ui_modules.py +++ b/src/web/ui_modules.py @@ -1,6 +1,6 @@ #!/usr/bin/python -from __future__ import division + import re import tornado.web @@ -27,17 +27,17 @@ class FireinfoDeviceAndGroupsTableModule(UIModule): groups = {} for device in devices: - if not groups.has_key(device.cls): + if device.cls not in groups: groups[device.cls] = [] groups[device.cls].append(device) # Sort all devices - for key in groups.keys(): + for key in list(groups.keys()): groups[key].sort() # Order the groups by their name - groups = groups.items() + groups = list(groups.items()) groups.sort() return self.render_string("fireinfo/modules/table-devices-and-groups.html", @@ -128,7 +128,7 @@ class NetBootMenuConfigModule(UIModule): class NetBootMenuHeaderModule(UIModule): def render(self, title, releases, arch=None, platform=None): - id = unicodedata.normalize("NFKD", unicode(title)).encode("ascii", "ignore") + id = unicodedata.normalize("NFKD", str(title)).encode("ascii", "ignore") id = re.sub(r"[^\w]+", " ", id) id = "-".join(id.lower().strip().split()) -- 2.39.2