]> git.ipfire.org Git - ipfire.org.git/commitdiff
Run 2to3 to move to Python 3
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 10 Oct 2018 09:51:18 +0000 (10:51 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 10 Oct 2018 09:51:18 +0000 (10:51 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
33 files changed:
configure.ac
src/backend/__init__.py
src/backend/accounts.py
src/backend/base.py
src/backend/countries.py
src/backend/database.py
src/backend/fireinfo.py
src/backend/geoip.py
src/backend/iuse.py
src/backend/memcached.py
src/backend/mirrors.py
src/backend/netboot.py
src/backend/nopaste.py
src/backend/releases.py
src/backend/settings.py
src/backend/talk.py
src/backend/tracker.py
src/backend/util.py
src/backend/zeiterfassung.py
src/web/__init__.py
src/web/blog.py
src/web/handlers.py
src/web/handlers_accounts.py
src/web/handlers_admin.py
src/web/handlers_base.py
src/web/handlers_boot.py
src/web/handlers_fireinfo.py
src/web/handlers_iuse.py
src/web/handlers_mirrors.py
src/web/handlers_nopaste.py
src/web/handlers_talk.py
src/web/location.py
src/web/ui_modules.py

index 92a827d25b8ac755e64d2b6fa6df261e72f57c03..2acd795b30cf48dc9c3f5aa5320df3833d38cd30 100644 (file)
@@ -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}
 ])
index ad5141fd6c9af8e97eff513617976c4093a392e9..7962f7d3ef23c06f76f13e496c775536aa416d7f 100644 (file)
@@ -1,3 +1,3 @@
 #!/usr/bin/python
 
-from base import Backend
+from .base import Backend
index faafc859c5b81a4ba363e278ce297b058b8886f2..fc315d8b599fd759d6b23c4bc8a7b439665afbf3 100644 (file)
@@ -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())
index 94d7d49d4743047999fa3b8dc8e571c1ad26d618..5705ff7ea2ec3c639050dc6c39b7ff6bb425bdfb 100644 (file)
@@ -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
 
index ae22a6d0bfa8a577552d7f8aa393c4828e31e329..faabecfd28564c496f78f0490e88127f4a2bb03b 100644 (file)
@@ -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)
 
index 90d00b065d18619ceef563240dfe99f23c6a313d..fde06c3e00f76ceba2bf2687875184b3d66c6623 100644 (file)
@@ -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()
 
index dd4aa506b6a16c1a7596578ebd60a26072cad9df..0fbbbc408d5a748be85de1b966fe52f7dacc25cc 100644 (file)
@@ -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):
index 9a3650f0c2b21b77e46f97818faeea33b7011916..3bb887d3e07934db4d78eea6eb8aadba0ad31798 100644 (file)
@@ -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):
index 0da525aa91a2ba66e232dcdc20c608d030d0e046..bc0812dc59c27469611ef35cb91ff24d8118ac17 100644 (file)
@@ -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)
index 105f1f54a3fbb4fba1fbd1ee36e19feee130303c..25ff030b4da261c49fb3f3ea2f2924cbf8e1a911 100644 (file)
@@ -3,7 +3,7 @@
 import logging
 import memcache
 
-from misc import Object
+from .misc import Object
 
 class Memcached(Object):
        def init(self):
index 60bd7793f997efbc244883740bf86bc546ccd69f..08f5057ba747f513c10a410f468357e4ccebb075 100644 (file)
@@ -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
index 9d112f228f82c4a7a9c247be49e4f02e673d66a7..7d378696e4148b10eff5a10a6bee688ff8e81dbb 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-from misc import Object
+from .misc import Object
 
 class MenuEntry(object):
        def __init__(self, _data):
index af339374a7d65de23dd72ca57a7f375f0b84b916..fc186fa0b8ffa2719dd715574827ae13154cf097 100644 (file)
@@ -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):
index ca755e8170f716814e803cadf0fdd103f57c258a..ba898e703ff9ad9ccc59ee4bc3073f2d4c1e3939 100644 (file)
@@ -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
 
index 6355485f0d76bbc36ad3b46ce973a9035d9028d4..c1a7134fb0946ad59c359040885107ed7b4dc396 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-from misc import Object
+from .misc import Object
 
 class Settings(Object):
        def init(self):
index fab3964b337668de7bd3c8165894a97302f6b984..8029a2503ffab6ac3abc445d6d50763ea0c72e1a 100644 (file)
@@ -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):
index c30df8265130630cf42fc8ab74a6de33d00cf076..cabf545a7ce8b58bde533791533d18ef2a8d4e53 100644 (file)
@@ -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))
index ee9dd60f9882e79ab27fe45b0abd29a654a2ab5c..616ab8784130eef67b7bef47faca126433fb1571 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-from __future__ import division
+
 
 def format_size(s):
        units = ("B", "k", "M", "G", "T")
index 626b3650cf011843844d1e1d3b940bc6fcbe4a6b..6cd0dd0e7691c7f767e4c0ebda088f8017612ce2 100644 (file)
@@ -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)
index 3429082968fc9b0a57a44fb1aff3f326176727a3..e608467ce8c1de02cf5b3ccd76568cd8c31934f7 100644 (file)
@@ -8,7 +8,7 @@ import tornado.web
 
 import ipfire
 
-from handlers import *
+from .handlers import *
 
 from . import auth
 from . import blog
index 86f8bfe0028c835092333fc1859a6cde3204c5c8..5b7dc4a1a35f7c863fa9549a2eedf122407599b8 100644 (file)
@@ -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
 
index a82921f8a3b53d49248f0c853c31f5c74e56ad1e..046d96cc07ca84299030873bf3375bc28833a0cc 100644 (file)
@@ -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):
        """
index d07b936cab23ab3d0116ff6eeeae482ed3993620..85016920719e49d6b7491570034d2e538fde476f 100644 (file)
@@ -3,7 +3,7 @@
 import logging
 import tornado.web
 
-from handlers_base import *
+from .handlers_base import *
 
 class AccountsAvatarHandler(BaseHandler):
        def get(self, who):
index 50c5fd18feba8e7e00d6f5df4c01b7fae095d8b4..aa31b4ca912878e61df3c651f9178b9504fa13d4 100644 (file)
@@ -3,7 +3,7 @@
 import datetime
 import tornado.web
 
-from handlers_base import *
+from .handlers_base import *
 
 class AdminBaseHandler(BaseHandler):
        pass
index d435c1c88078964e4b0f06c14b1bf78a4fecc5ce..33164af6f0d30d7d57562622d9fb11047dd8325e 100644 (file)
@@ -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
 
index 3922ad46a47277cf7628bdcb409e46236a95dbe7..580aaa5c5cc08c8f97ea0f86dc9afcdcc86bc40e 100644 (file)
@@ -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__)
 
index 580a3c738813a2b59712dc18c2e83d01965314be..d5b81864435c1fc4fa9b3ad4c52423d7b41cace2 100644 (file)
@@ -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.
index 66f982be50c09247f681e6d86bc8bb8ead20efb3..70aa24b4a615ec8d4cf7094083b0b7d6d8ce7615 100644 (file)
@@ -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
index 6ccaf6a5f3c1c4f29a9d5a238f092756a032f6e5..6ad81daea1505c48a3ca501d5ce58b8c8c9d290e 100644 (file)
@@ -3,7 +3,7 @@
 import socket
 import tornado.web
 
-from handlers_base import *
+from .handlers_base import *
 
 class MirrorIndexHandler(BaseHandler):
        def get(self):
index 6c2b75b011a76b5512cc7fd2ba47aa848d9cdb77..ae4ceb1f8ba5543a37649b8d036d4675a8a73a71 100644 (file)
@@ -2,7 +2,7 @@
 
 import tornado.web
 
-from handlers_base import *
+from .handlers_base import *
 
 class NopasteCreateHandler(BaseHandler):
        MODES = ("paste", "upload")
index 39fccfbecf5e8c8f86dab62c6a241c9e4c7a91e7..5b66d9a42fb262cd340aec4704e3b4606f4d701a 100644 (file)
@@ -2,7 +2,7 @@
 
 import tornado.web
 
-from handlers_base import *
+from .handlers_base import *
 
 class TalkIndexHandler(BaseHandler):
        @tornado.web.authenticated
index e49ba23379f3b435094aa9758684e338d5f654a6..a9e5dc17ab68c1c1e3c9ff20acb8313943424246 100644 (file)
@@ -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):
index 5fe12c4f3a01cc3973e02cd01bf93088216ef2be..bb394b74c8caa68eacc9e4ce577b2c16d2a84c20 100644 (file)
@@ -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())