Skip to content

Commit

Permalink
Merge pull request #2957 from quodlibet/py2-cleanup
Browse files Browse the repository at this point in the history
Remove all Python 2 compat code
  • Loading branch information
lazka committed Sep 4, 2018
2 parents 6ba95ed + 714ed4a commit b05c3fb
Show file tree
Hide file tree
Showing 173 changed files with 594 additions and 1,219 deletions.
8 changes: 2 additions & 6 deletions quodlibet/docs/conf.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-

import os
import sys
import types

dir_ = os.path.dirname(os.path.realpath(__file__))
Expand All @@ -14,11 +13,8 @@ def exec_module(path):
# assert in const.py
os.environ.pop("MSYSTEM", None)
globals_ = {}
if sys.version_info[0] == 2:
execfile(path, globals_)
else:
with open(path, encoding="utf-8") as h:
exec(h.read(), globals_)
with open(path, encoding="utf-8") as h:
exec(h.read(), globals_)
module = types.ModuleType("")
module.__dict__.update(globals_)
return module
Expand Down
6 changes: 1 addition & 5 deletions quodlibet/gdist/coverage.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,7 @@

import os
import sys

try:
from urllib import pathname2url
except:
from urllib.request import pathname2url
from urllib.request import pathname2url

from .util import Command

Expand Down
16 changes: 0 additions & 16 deletions quodlibet/quodlibet/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,6 @@
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.

import sys
import codecs

from .compat import PY2

if PY2:
# some code depends on utf-8 default encoding (pygtk used to set it)
reload(sys)
sys.setdefaultencoding("utf-8")

# py2 doesn't know about cp65001, but tries to use it if it is the active
# code page
codecs.register(
lambda name: codecs.lookup("utf-8") if name == "cp65001" else None)


from ._import import install_redirect_import_hook
install_redirect_import_hook()

Expand Down
3 changes: 1 addition & 2 deletions quodlibet/quodlibet/browsers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
# (at your option) any later version.

from quodlibet import util
from quodlibet.compat import listfilter
from quodlibet.util.importhelper import load_dir_modules

from ._base import Browser
Expand Down Expand Up @@ -48,7 +47,7 @@ def init():

def is_browser(Kind):
return isinstance(Kind, type) and issubclass(Kind, Browser)
browsers = listfilter(is_browser, browsers)
browsers = list(filter(is_browser, browsers))

if not browsers:
raise SystemExit("No browsers found!")
Expand Down
3 changes: 1 addition & 2 deletions quodlibet/quodlibet/browsers/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
from quodlibet.util import connect_obj, print_d
from quodlibet.util.i18n import numeric_phrase
from quodlibet.util.library import background_filter
from quodlibet.compat import itervalues


class Filter(object):
Expand Down Expand Up @@ -78,7 +77,7 @@ def list(self, tag):
library = app.library
bg = background_filter()
if bg:
songs = filter(bg, itervalues(library))
songs = filter(bg, library.values())
return list({value
for song in songs
for value in song.list(tag)})
Expand Down
3 changes: 1 addition & 2 deletions quodlibet/quodlibet/browsers/albums/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,11 @@
from quodlibet.qltk.searchbar import SearchBarBox
from quodlibet.qltk.menubutton import MenuButton
from quodlibet.qltk import Icons
from quodlibet.util import copool, connect_destroy
from quodlibet.util import copool, connect_destroy, cmp
from quodlibet.util.library import background_filter
from quodlibet.util import connect_obj, DeferredSignal
from quodlibet.qltk.cover import get_no_cover_pixbuf
from quodlibet.qltk.image import add_border_widget, get_surface_for_pixbuf
from quodlibet.compat import cmp


def get_cover_size():
Expand Down
3 changes: 1 addition & 2 deletions quodlibet/quodlibet/browsers/albums/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from quodlibet import config
from quodlibet.qltk.models import ObjectStore, ObjectModelFilter
from quodlibet.qltk.models import ObjectModelSort
from quodlibet.compat import itervalues


class AlbumItem(object):
Expand Down Expand Up @@ -79,7 +78,7 @@ def __init__(self, library):
]

self.append(row=[AlbumItem(None)])
self.append_many((AlbumItem(a) for a in itervalues(albums)))
self.append_many((AlbumItem(a) for a in albums.values()))

def refresh_all(self):
"""Trigger redraws for all rows"""
Expand Down
10 changes: 5 additions & 5 deletions quodlibet/quodlibet/browsers/audiofeeds.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import sys
import threading
import time
from urllib.request import build_opener

from gi.repository import Gtk, GLib, Pango, Gdk
import feedparser
Expand All @@ -25,7 +26,6 @@
from quodlibet import app

from quodlibet.browsers import Browser
from quodlibet.compat import listfilter, text_type, build_opener, PY2
from quodlibet.formats import AudioFile
from quodlibet.formats.remote import RemoteFile
from quodlibet.qltk.getstring import GetStringDialog
Expand Down Expand Up @@ -173,7 +173,7 @@ def parse(self):
"ogg" in enclosure.type or
formats.filter(enclosure.url)):
uri = enclosure.url
if not isinstance(uri, text_type):
if not isinstance(uri, str):
uri = uri.decode('utf-8')
try:
size = float(enclosure.length)
Expand Down Expand Up @@ -225,7 +225,7 @@ def _check_feed(self):
ct_hdr = result.headers.get('Content-Type', "Unknown type")
content_type = ct_hdr.split(';')[0]
try:
status = result.code if PY2 else result.status
status = result.status
except AttributeError:
print_w("Missing status code for feed %s" % self.uri)
else:
Expand All @@ -252,7 +252,7 @@ def __init__(self, parent):
def run(self, text='', test=False):
uri = super(AddFeedDialog, self).run(text=text, test=test)
if uri:
if not isinstance(uri, text_type):
if not isinstance(uri, str):
uri = uri.decode('utf-8')
return Feed(uri)
return None
Expand Down Expand Up @@ -494,7 +494,7 @@ def __save(self, view):
AudioFeeds.write()

def __refresh(self, feeds):
changed = listfilter(Feed.parse, feeds)
changed = list(filter(Feed.parse, feeds))
AudioFeeds.changed(changed)

def __remove_paths(self, model, paths):
Expand Down
3 changes: 1 addition & 2 deletions quodlibet/quodlibet/browsers/collection/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
from quodlibet.browsers.albums import AlbumTagCompletion
from quodlibet.browsers import Browser
from quodlibet.query import Query
from quodlibet.compat import cmp

from quodlibet.qltk.information import Information
from quodlibet.qltk.properties import SongProperties
Expand All @@ -27,7 +26,7 @@
from quodlibet.qltk import Icons
from quodlibet.qltk.image import add_border_widget, get_surface_for_pixbuf
from quodlibet.qltk.x import ScrolledWindow, Align, SymbolicIconImage
from quodlibet.util import connect_obj
from quodlibet.util import connect_obj, cmp
from quodlibet.util.library import background_filter

from .models import (CollectionTreeStore, CollectionSortModel,
Expand Down
9 changes: 4 additions & 5 deletions quodlibet/quodlibet/browsers/collection/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
from quodlibet.pattern import XMLFromPattern
from quodlibet.qltk.models import ObjectTreeStore, ObjectModelFilter
from quodlibet.qltk.models import ObjectModelSort
from quodlibet.compat import iteritems, string_types, itervalues


EMPTY = _("Songs not in an album")
Expand Down Expand Up @@ -71,7 +70,7 @@ def build_tree(tags, albums, cache=None):
values = [MultiNode]
for value in values or [UnknownNode]:
tree.setdefault(value, []).append(album)
for key, value in iteritems(tree):
for key, value in tree.items():
tree[key] = build_tree(tags[1:], value, cache)
return tree

Expand Down Expand Up @@ -126,7 +125,7 @@ def get_markup(self, tags, iter_):
if isinstance(obj, AlbumNode):
return PAT % obj.album

if isinstance(obj, string_types):
if isinstance(obj, str):
markup = util.escape(obj)
else:
tag = util.tag(tags[len(self.get_path(iter_).get_indices()) - 1])
Expand Down Expand Up @@ -184,7 +183,7 @@ def _add(tree, iter_=None):
child = self.iter_next(child)

# add missing ones
for key, value in iteritems(tree):
for key, value in tree.items():
_add(value, self.append(parent=iter_, row=[key]))

_add(build_tree(self.__tags, albums))
Expand Down Expand Up @@ -253,7 +252,7 @@ def _get_all(sub, found=None):
if isinstance(sub, list):
found.update(sub)
return found
for v in itervalues(sub):
for v in sub.values():
_get_all(v, found)
return found
not_found.update(_get_all(tree))
Expand Down
5 changes: 2 additions & 3 deletions quodlibet/quodlibet/browsers/collection/prefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
from quodlibet.qltk.views import BaseView
from quodlibet.qltk import Button, Icons
from quodlibet.util import connect_obj
from quodlibet.compat import iteritems, iterkeys


def get_headers():
Expand Down Expand Up @@ -134,7 +133,7 @@ def __toggeled(self, render, path, model):

@property
def headers(self):
for button in iterkeys(self.__headers):
for button in self.__headers.keys():
if button.get_active():
if button == self.__custom:
model_headers = [(row[0], row[1]) for row in self.__model]
Expand All @@ -143,7 +142,7 @@ def headers(self):

@headers.setter
def headers(self, new_headers):
for button, headers in iteritems(self.__headers):
for button, headers in self.__headers.items():
if headers == new_headers:
button.set_active(True)
button.emit("toggled")
Expand Down
3 changes: 1 addition & 2 deletions quodlibet/quodlibet/browsers/filesystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
from quodlibet import qltk
from quodlibet import _
from quodlibet.browsers import Browser
from quodlibet.compat import listfilter
from quodlibet.library import SongFileLibrary
from quodlibet.qltk.filesel import MainDirectoryTree
from quodlibet.qltk.songsmenu import SongsMenu
Expand Down Expand Up @@ -120,7 +119,7 @@ def __drag_data_get(self, view, ctx, sel, tid, etime):
for songs in self.__find_songs(view.get_selection()):
pass
if tid == self.TARGET_QL:
cant_add = listfilter(lambda s: not s.can_add, songs)
cant_add = list(filter(lambda s: not s.can_add, songs))
if cant_add:
qltk.ErrorMessage(
qltk.get_top_parent(self), _("Unable to copy songs"),
Expand Down
16 changes: 8 additions & 8 deletions quodlibet/quodlibet/browsers/iradio.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import sys
import bz2
import itertools
from functools import reduce
from urllib.request import urlopen

import re
from gi.repository import Gtk, GLib, Pango
Expand All @@ -29,7 +31,6 @@
from quodlibet.formats._audio import TAG_TO_SORT, MIGRATE, AudioFile
from quodlibet.library import SongLibrary
from quodlibet.query import Query
from quodlibet.compat import reduce, urlopen
from quodlibet.qltk.getstring import GetStringDialog
from quodlibet.qltk.songsmenu import SongsMenu
from quodlibet.qltk.notif import Task
Expand All @@ -46,7 +47,6 @@
from quodlibet.qltk.x import MenuItem, Align, ScrolledWindow
from quodlibet.qltk.x import SymbolicIconImage
from quodlibet.qltk.menubutton import MenuButton
from quodlibet.compat import text_type, iteritems, iterkeys


STATION_LIST_URL = \
Expand Down Expand Up @@ -223,7 +223,7 @@ def add_station(uri):
try:
sock = urlopen(uri)
except EnvironmentError as err:
err = "%s\n\nURL: %s" % (text_type(err), uri)
err = "%s\n\nURL: %s" % (str(err), uri)
print_d("Got %s from %s" % (err, uri))
ErrorMessage(None, _("Unable to add station"), escape(err)).run()
return None
Expand Down Expand Up @@ -335,7 +335,7 @@ def parse_taglist(data):
if not station:
continue

if isinstance(value, text_type):
if isinstance(value, str):
if value not in station.list(key):
station.add(key, value)
else:
Expand Down Expand Up @@ -696,7 +696,7 @@ def filter_stations(station):

# keep at most 2 URLs for each group
stations = []
for key, sub in iteritems(groups):
for key, sub in groups.items():
sub.sort(key=lambda s: s.get("~#listenerpeak", 0), reverse=True)
stations.extend(sub[:2])

Expand All @@ -713,11 +713,11 @@ def filter_stations(station):
# update the libraries
stations = dict(((s.key, s) for s in stations))
# don't add ones that are in the fav list
for fav in iterkeys(self.__fav_stations):
for fav in self.__fav_stations.keys():
stations.pop(fav, None)

# separate
o, n = set(iterkeys(self.__stations)), set(stations)
o, n = set(self.__stations.keys()), set(stations)
to_add, to_change, to_remove = n - o, o & n, o - n
del o, n

Expand All @@ -728,7 +728,7 @@ def filter_stations(station):
# clear everything except stats
AudioFile.reload(old)
# add new metadata except stats
for k in (x for x in iterkeys(new) if x not in MIGRATE):
for k in (x for x in new.keys() if x not in MIGRATE):
old[k] = new[k]

to_add = [stations.pop(k) for k in to_add]
Expand Down
7 changes: 3 additions & 4 deletions quodlibet/quodlibet/browsers/paned/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
from quodlibet import util
from quodlibet.qltk.models import ObjectStore
from quodlibet.util.collection import Collection
from quodlibet.compat import iteritems, listfilter


class BaseEntry(Collection):
Expand Down Expand Up @@ -127,8 +126,8 @@ def get_format_keys(self, song):
return self.__key_cache[song]
except KeyError:
# We filter out empty values, so Unknown can be ""
self.__key_cache[song] = listfilter(
lambda v: v[0], self.config.format(song))
self.__key_cache[song] = list(filter(
lambda v: v[0], self.config.format(song)))
return self.__key_cache[song]

def __human_sort_key(self, text, reg=re.compile('<.*?>')):
Expand Down Expand Up @@ -227,7 +226,7 @@ def add_songs(self, songs):
collection[key] = (entry, hsort, bool(sort))
entry.songs.add(song)

items = sorted(iteritems(collection),
items = sorted(collection.items(),
key=lambda s: s[1][1],
reverse=True)

Expand Down
3 changes: 1 addition & 2 deletions quodlibet/quodlibet/browsers/paned/pane.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
from quodlibet.qltk.information import Information
from quodlibet.qltk import is_accel
from quodlibet.util import connect_obj
from quodlibet.compat import text_type

from .models import PaneModel
from .util import PaneConfig
Expand Down Expand Up @@ -139,7 +138,7 @@ def __repr__(self):
return "<%s config=%r>" % (type(self).__name__, self.config)

def parse_restore_string(self, config_value):
assert isinstance(config_value, text_type)
assert isinstance(config_value, str)

values = config_value.split("\t")[:-1]

Expand Down

0 comments on commit b05c3fb

Please sign in to comment.