From bfe6da12d726e108172ad6aec5edf2833b21dfe0 Mon Sep 17 00:00:00 2001 From: spl0k Date: Thu, 18 Jan 2018 21:00:31 +0100 Subject: [PATCH] Dropped 'future' dependency --- README.md | 1 - requirements.txt | 1 - supysonic/api/__init__.py | 6 ++---- supysonic/api/albums_songs.py | 3 +-- supysonic/api/annotation.py | 3 +-- supysonic/api/browse.py | 3 +-- supysonic/api/chat.py | 3 +-- supysonic/api/media.py | 3 +-- supysonic/api/playlists.py | 3 +-- supysonic/api/search.py | 3 +-- supysonic/api/system.py | 2 +- supysonic/api/user.py | 3 +-- supysonic/db.py | 3 +-- supysonic/frontend/user.py | 3 +-- supysonic/py23.py | 21 ++++++++++++++++++++- supysonic/watcher.py | 3 +-- 16 files changed, 34 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 03cb710..2757ccf 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,6 @@ To install it, run: You'll need these to run Supysonic: * Python 2.7 -* [future](http://python-future.org/) * [Flask](http://flask.pocoo.org/) >= 0.9 * [PonyORM](https://ponyorm.com/) * [Python Imaging Library](https://github.com/python-pillow/Pillow) diff --git a/requirements.txt b/requirements.txt index c75d3ee..d048741 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ flask>=0.9 -future pony Pillow simplejson diff --git a/supysonic/api/__init__.py b/supysonic/api/__init__.py index 245040b..04e9b5c 100644 --- a/supysonic/api/__init__.py +++ b/supysonic/api/__init__.py @@ -28,9 +28,7 @@ from xml.dom import minidom from xml.etree import ElementTree from ..managers.user import UserManager -from ..py23 import strtype - -from builtins import dict +from ..py23 import dict, strtype @app.before_request def set_formatter(): @@ -139,7 +137,7 @@ class ResponseHelper: @staticmethod def remove_empty_lists(d): if not isinstance(d, dict): - raise TypeError('Expecting a dict') + raise TypeError('Expecting a dict got ' + type(d).__name__) keys_to_remove = [] for key, value in d.items(): diff --git a/supysonic/api/albums_songs.py b/supysonic/api/albums_songs.py index 24f4b21..9ae4289 100644 --- a/supysonic/api/albums_songs.py +++ b/supysonic/api/albums_songs.py @@ -27,8 +27,7 @@ from pony.orm import db_session, select, desc, avg, max, min, count from ..db import Folder, Artist, Album, Track, RatingFolder, StarredFolder, StarredArtist, StarredAlbum, StarredTrack, User from ..db import now - -from builtins import dict +from ..py23 import dict @app.route('/rest/getRandomSongs.view', methods = [ 'GET', 'POST' ]) def rand_songs(): diff --git a/supysonic/api/annotation.py b/supysonic/api/annotation.py index e7f40d4..6f012c6 100644 --- a/supysonic/api/annotation.py +++ b/supysonic/api/annotation.py @@ -29,11 +29,10 @@ from ..db import Track, Album, Artist, Folder, User from ..db import StarredTrack, StarredAlbum, StarredArtist, StarredFolder from ..db import RatingTrack, RatingFolder from ..lastfm import LastFm +from ..py23 import dict from . import get_entity -from builtins import dict - @db_session def try_star(cls, starred_cls, eid): """ Stars an entity diff --git a/supysonic/api/browse.py b/supysonic/api/browse.py index 8d9f209..adddc71 100644 --- a/supysonic/api/browse.py +++ b/supysonic/api/browse.py @@ -26,11 +26,10 @@ from pony.orm import db_session from pony.orm import ObjectNotFound from ..db import Folder, Artist, Album, Track +from ..py23 import dict from . import get_entity -from builtins import dict - @app.route('/rest/getMusicFolders.view', methods = [ 'GET', 'POST' ]) @db_session def list_folders(): diff --git a/supysonic/api/chat.py b/supysonic/api/chat.py index f7f41ab..0fa4920 100644 --- a/supysonic/api/chat.py +++ b/supysonic/api/chat.py @@ -22,8 +22,7 @@ from flask import request, current_app as app from pony.orm import db_session from ..db import ChatMessage, User - -from builtins import dict +from ..py23 import dict @app.route('/rest/getChatMessages.view', methods = [ 'GET', 'POST' ]) def get_chat(): diff --git a/supysonic/api/media.py b/supysonic/api/media.py index 9091fa9..6af08e8 100644 --- a/supysonic/api/media.py +++ b/supysonic/api/media.py @@ -31,11 +31,10 @@ from xml.etree import ElementTree from .. import scanner from ..db import Track, Album, Artist, Folder, User, ClientPrefs, now +from ..py23 import dict from . import get_entity -from builtins import dict - def prepare_transcoding_cmdline(base_cmdline, input_file, input_format, output_format, output_bitrate): if not base_cmdline: return None diff --git a/supysonic/api/playlists.py b/supysonic/api/playlists.py index 3cff539..17e997f 100644 --- a/supysonic/api/playlists.py +++ b/supysonic/api/playlists.py @@ -25,11 +25,10 @@ from pony.orm import db_session, rollback from pony.orm import ObjectNotFound from ..db import Playlist, User, Track +from ..py23 import dict from . import get_entity -from builtins import dict - @app.route('/rest/getPlaylists.view', methods = [ 'GET', 'POST' ]) def list_playlists(): query = Playlist.select(lambda p: p.user.id == request.user.id or p.public).order_by(Playlist.name) diff --git a/supysonic/api/search.py b/supysonic/api/search.py index 20e87bd..847362a 100644 --- a/supysonic/api/search.py +++ b/supysonic/api/search.py @@ -24,8 +24,7 @@ from flask import request, current_app as app from pony.orm import db_session, select from ..db import Folder, Track, Artist, Album - -from builtins import dict +from ..py23 import dict @app.route('/rest/search.view', methods = [ 'GET', 'POST' ]) def old_search(): diff --git a/supysonic/api/system.py b/supysonic/api/system.py index 82e5707..a9d71e5 100644 --- a/supysonic/api/system.py +++ b/supysonic/api/system.py @@ -20,7 +20,7 @@ from flask import request, current_app as app -from builtins import dict +from ..py23 import dict @app.route('/rest/ping.view', methods = [ 'GET', 'POST' ]) def ping(): diff --git a/supysonic/api/user.py b/supysonic/api/user.py index 4b66c53..e9ba26b 100644 --- a/supysonic/api/user.py +++ b/supysonic/api/user.py @@ -23,11 +23,10 @@ from pony.orm import db_session from ..db import User from ..managers.user import UserManager +from ..py23 import dict from . import decode_password -from builtins import dict - @app.route('/rest/getUser.view', methods = [ 'GET', 'POST' ]) def user_info(): username = request.values.get('username') diff --git a/supysonic/db.py b/supysonic/db.py index 0faac34..019524c 100644 --- a/supysonic/db.py +++ b/supysonic/db.py @@ -28,9 +28,8 @@ from pony.orm import ObjectNotFound from pony.orm import min, max, avg, sum from uuid import UUID, uuid4 -from .py23 import strtype +from .py23 import dict, strtype -from builtins import dict try: from urllib.parse import urlparse except ImportError: diff --git a/supysonic/frontend/user.py b/supysonic/frontend/user.py index 5c68908..e9ba9ae 100644 --- a/supysonic/frontend/user.py +++ b/supysonic/frontend/user.py @@ -18,8 +18,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from builtins import dict - from flask import request, session, flash, render_template, redirect, url_for, current_app as app from functools import wraps from pony.orm import db_session @@ -27,6 +25,7 @@ from pony.orm import db_session from ..db import User, ClientPrefs from ..lastfm import LastFm from ..managers.user import UserManager +from ..py23 import dict from . import admin_only diff --git a/supysonic/py23.py b/supysonic/py23.py index f03de2b..319e00e 100644 --- a/supysonic/py23.py +++ b/supysonic/py23.py @@ -10,7 +10,26 @@ try: # Python 2 strtype = basestring + + _builtin_dict = dict + + class DictMeta(type): + def __instancecheck__(cls, instance): + return isinstance(instance, _builtin_dict) + + class dict(dict): + __metaclass__ = DictMeta + + def keys(self): + return self.viewkeys() + + def values(self): + return self.viewvalues() + + def items(self): + return self.viewitems() + except NameError: # Python 3 strtype = str - + dict = dict diff --git a/supysonic/watcher.py b/supysonic/watcher.py index 9620731..a772261 100644 --- a/supysonic/watcher.py +++ b/supysonic/watcher.py @@ -21,8 +21,6 @@ import logging import time -from builtins import dict - from logging.handlers import TimedRotatingFileHandler from pony.orm import db_session from signal import signal, SIGTERM, SIGINT @@ -31,6 +29,7 @@ from watchdog.observers import Observer from watchdog.events import PatternMatchingEventHandler from .db import init_database, release_database, Folder +from .py23 import dict from .scanner import Scanner OP_SCAN = 1