From ab105e69a5fa9b7e0f42b5c404cc8af4f6e5a1e1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20K=C3=B6gl?= Date: Sun, 28 Jun 2015 15:44:10 +0200 Subject: [PATCH] Remove usage for ultrajson (ujson) ultrajson seems to be unmaintained; see also http://mod16.org/hurfdurf/?p=266 --- mygpo/api/__init__.py | 3 +-- mygpo/api/advanced/__init__.py | 7 +++---- mygpo/api/advanced/sync.py | 3 +-- mygpo/api/httpresponse.py | 4 ++-- mygpo/api/simple.py | 4 ++-- mygpo/api/subscriptions.py | 2 +- mygpo/api/tests.py | 7 +++---- mygpo/core/json.py | 29 ----------------------------- mygpo/core/models.py | 3 --- mygpo/data/delicious.py | 3 +-- mygpo/data/flickr.py | 3 +-- mygpo/flattr.py | 2 +- mygpo/utils.py | 5 ++--- requirements.txt | 1 - 14 files changed, 18 insertions(+), 58 deletions(-) delete mode 100644 mygpo/core/json.py diff --git a/mygpo/api/__init__.py b/mygpo/api/__init__.py index 7d1644d8..b9851c90 100644 --- a/mygpo/api/__init__.py +++ b/mygpo/api/__init__.py @@ -27,7 +27,6 @@ from django.views.generic.base import View from mygpo.utils import parse_request_body from mygpo.api.exceptions import ParameterMissing from mygpo.decorators import cors_origin -from mygpo.core.json import JSONDecodeError from mygpo.api.basic_auth import require_valid_user, check_username @@ -67,7 +66,7 @@ class APIView(View): # TODO: implementation of parse_request_body can be moved here # after all views using it have been refactored return parse_request_body(request) - except (JSONDecodeError, UnicodeDecodeError, ValueError) as e: + except (UnicodeDecodeError, ValueError) as e: msg = 'Could not decode request body for user {}: {}'.format( request.user.username, request.body.decode('ascii', errors='replace')) diff --git a/mygpo/api/advanced/__init__.py b/mygpo/api/advanced/__init__.py index a0b4750e..01194e74 100644 --- a/mygpo/api/advanced/__init__.py +++ b/mygpo/api/advanced/__init__.py @@ -46,7 +46,6 @@ from mygpo.core.tasks import auto_flattr_episode from mygpo.users.models import Client, InvalidEpisodeActionAttributes from mygpo.users.settings import FLATTR_AUTO from mygpo.favorites.models import FavoriteEpisode -from mygpo.core.json import JSONDecodeError from mygpo.api.basic_auth import require_valid_user, check_username @@ -75,7 +74,7 @@ def episodes(request, username, version=1): if request.method == 'POST': try: actions = parse_request_body(request) - except (JSONDecodeError, UnicodeDecodeError, ValueError) as e: + except (UnicodeDecodeError, ValueError) as e: msg = ('Could not decode episode update POST data for ' + 'user %s: %s') % (username, request.body.decode('ascii', errors='replace')) @@ -180,7 +179,7 @@ def get_episode_changes(user, podcast, device, since, until, aggregated, version if aggregated: actions = dict( (a['episode'], a) for a in actions ).values() - return {'actions': actions, 'timestamp': until} + return {'actions': actions, 'timestamp': get_timestamp(until)} def episode_action_json(history, user): @@ -278,7 +277,7 @@ def device(request, username, device_uid): try: data = parse_request_body(request) - except (JSONDecodeError, UnicodeDecodeError, ValueError) as e: + except (UnicodeDecodeError, ValueError) as e: msg = ('Could not decode device update POST data for ' + 'user %s: %s') % (username, request.body.decode('ascii', errors='replace')) diff --git a/mygpo/api/advanced/sync.py b/mygpo/api/advanced/sync.py index 48eb4779..0840350d 100644 --- a/mygpo/api/advanced/sync.py +++ b/mygpo/api/advanced/sync.py @@ -20,7 +20,6 @@ from django.views.decorators.csrf import csrf_exempt from django.views.decorators.cache import never_cache from mygpo.decorators import allowed_methods, cors_origin -from mygpo.core.json import JSONDecodeError from mygpo.utils import parse_request_body from mygpo.api.basic_auth import require_valid_user, check_username from mygpo.api.httpresponse import JsonResponse @@ -43,7 +42,7 @@ def main(request, username): else: try: actions = parse_request_body(request) - except JSONDecodeError as e: + except ValueError as e: return HttpResponseBadRequest(str(e)) synclist = actions.get('synchronize', []) diff --git a/mygpo/api/httpresponse.py b/mygpo/api/httpresponse.py index c67a00ae..7d3ad045 100644 --- a/mygpo/api/httpresponse.py +++ b/mygpo/api/httpresponse.py @@ -15,9 +15,9 @@ # along with my.gpodder.org. If not, see . # -from django.http import HttpResponse +import json -from mygpo.core.json import json +from django.http import HttpResponse class JsonResponse(HttpResponse): diff --git a/mygpo/api/simple.py b/mygpo/api/simple.py index c95d32d1..8784ba4b 100644 --- a/mygpo/api/simple.py +++ b/mygpo/api/simple.py @@ -15,6 +15,7 @@ # along with my.gpodder.org. If not, see . # +import json import string from itertools import islice from functools import wraps @@ -39,7 +40,6 @@ from mygpo.subscriptions import get_subscribed_podcasts, subscribe, unsubscribe from mygpo.directory.search import search_podcasts from mygpo.decorators import allowed_methods, cors_origin from mygpo.utils import parse_range, normalize_feed_url -from mygpo.core.json import json, JSONDecodeError import logging logger = logging.getLogger(__name__) @@ -78,7 +78,7 @@ def subscriptions(request, username, device_uid, format): body = request.body.decode('utf-8') subscriptions = parse_subscription(body, format) - except JSONDecodeError as e: + except ValueError as e: return HttpResponseBadRequest('Unable to parse POST data: %s' % str(e)) return set_subscriptions(subscriptions, request.user, device_uid, diff --git a/mygpo/api/subscriptions.py b/mygpo/api/subscriptions.py index 7b6e6c3d..729c2184 100644 --- a/mygpo/api/subscriptions.py +++ b/mygpo/api/subscriptions.py @@ -88,7 +88,7 @@ class SubscriptionsAPI(APIView): assert len(add) == len(add_s) and len(remove) == len(rem_s) pairs = zip(add + remove, add_s + rem_s) - updated_urls = filter(lambda pair: pair[0] != pair[1], pairs) + updated_urls = list(filter(lambda pair: pair[0] != pair[1], pairs)) add_s = filter(None, add_s) rem_s = filter(None, rem_s) diff --git a/mygpo/api/tests.py b/mygpo/api/tests.py index e0bccc51..98fdf512 100644 --- a/mygpo/api/tests.py +++ b/mygpo/api/tests.py @@ -16,7 +16,7 @@ # - +import json import unittest import doctest from urllib.parse import urlencode @@ -30,7 +30,6 @@ from django.contrib.auth import get_user_model from mygpo.podcasts.models import Podcast, Episode from mygpo.api.advanced import episodes from mygpo.test import create_auth_string, anon_request -from mygpo.core.json import json class AdvancedAPITests(unittest.TestCase): @@ -85,7 +84,7 @@ class AdvancedAPITests(unittest.TestCase): response = self.client.get(url, {'since': '0'}, **self.extra) self.assertEqual(response.status_code, 200, response.content) - response_obj = json.loads(response.content) + response_obj = json.loads(response.content.decode('utf-8')) actions = response_obj['actions'] self.assertTrue(self.compare_action_list(self.action_data, actions)) @@ -153,7 +152,7 @@ class SubscriptionAPITests(unittest.TestCase): # verify that the subscription is returned correctly response = self.client.get(self.url, {'since': '0'}, **self.extra) self.assertEqual(response.status_code, 200, response.content) - response_obj = json.loads(response.content) + response_obj = json.loads(response.content.decode('utf-8')) self.assertEqual(self.action_data['add'], response_obj['add']) self.assertEqual([], response_obj.get('remove', [])) diff --git a/mygpo/core/json.py b/mygpo/core/json.py deleted file mode 100644 index 590fbc47..00000000 --- a/mygpo/core/json.py +++ /dev/null @@ -1,29 +0,0 @@ -# -# Tries to import the best JSON module available -# - -import sys - - -try: - # UltraJSON should be the fastest - # get it from - # https://github.com/esnme/ultrajson - # http://pypi.python.org/pypi/ujson/ - import ujson as json - JSONDecodeError = ValueError - -except ImportError: - print('ujson not found', file=sys.stderr) - - try: - # If SimpleJSON is installed separately, it might be a recent version - import simplejson as json - JSONDecodeError = json.JSONDecodeError - - except ImportError: - print('simplejson not found', file=sys.stderr) - - # Otherwise use json from the stdlib - import json - JSONDecodeError = ValueError diff --git a/mygpo/core/models.py b/mygpo/core/models.py index 173c0364..2b8c358b 100644 --- a/mygpo/core/models.py +++ b/mygpo/core/models.py @@ -1,9 +1,6 @@ """ This module contains abstract models that are used in multiple apps """ - -import json - from django.db import models, connection diff --git a/mygpo/data/delicious.py b/mygpo/data/delicious.py index 7bed4259..750e683a 100644 --- a/mygpo/data/delicious.py +++ b/mygpo/data/delicious.py @@ -16,12 +16,11 @@ # +import json import hashlib import urllib.request, urllib.parse, urllib.error import urllib.parse -from mygpo.core.json import json - def get_tags(url): """ diff --git a/mygpo/data/flickr.py b/mygpo/data/flickr.py index 2d61078c..614f0f5e 100644 --- a/mygpo/data/flickr.py +++ b/mygpo/data/flickr.py @@ -16,13 +16,12 @@ # +import json import re import urllib.request, urllib.parse, urllib.error from django.conf import settings -from mygpo.core.json import json - import logging logger = logging.getLogger(__name__) diff --git a/mygpo/flattr.py b/mygpo/flattr.py index ef4c0bc1..2e70cfc2 100644 --- a/mygpo/flattr.py +++ b/mygpo/flattr.py @@ -4,6 +4,7 @@ # based on flattr.py from gPodder by Bernd Schlapsi # +import json import urllib.request, urllib.parse, urllib.error import urllib.request, urllib.error, urllib.parse import urllib.parse @@ -12,7 +13,6 @@ from collections import namedtuple from django.conf import settings from django.core.urlresolvers import reverse -from mygpo.core.json import json from mygpo.users.settings import FLATTR_TOKEN, FLATTR_USERNAME from mygpo import utils from django.utils.translation import ugettext as _ diff --git a/mygpo/utils.py b/mygpo/utils.py index 87d4426a..81b5614c 100644 --- a/mygpo/utils.py +++ b/mygpo/utils.py @@ -16,6 +16,7 @@ # along with my.gpodder.org. If not, see . # +import json import functools import types import subprocess @@ -38,8 +39,6 @@ from django.db import transaction, IntegrityError from django.conf import settings from django.core.urlresolvers import reverse -from mygpo.core.json import json - import logging logger = logging.getLogger(__name__) @@ -697,7 +696,7 @@ def parse_request_body(request): if content_enc == 'gzip': raw_body = zlib.decompress(raw_body) - return json.loads(raw_body) + return json.loads(raw_body.decode('utf-8')) def normalize_feed_url(url): diff --git a/requirements.txt b/requirements.txt index 96808d7e..17ba24a6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,6 @@ psycopg2==2.6 pyes==0.99.5 python-dateutil==2.4.2 redis==2.10.3 -ujson==1.33 django-celery==3.1.16 requests==2.7.0 # module is not longer used but still imported in migrations -- 2.11.4.GIT