From 3eaca4b2f56e9f465d8d5c6216e660ed3f8759bf Mon Sep 17 00:00:00 2001 From: Luis Date: Wed, 1 Jul 2015 17:02:47 -0700 Subject: [PATCH] Python 3 support, no backward compatibility --- omgeo/__init__.py | 4 ++-- omgeo/places.py | 8 ++++---- omgeo/postprocessors.py | 2 +- omgeo/services/__init__.py | 4 ++-- omgeo/services/base.py | 7 ++++--- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/omgeo/__init__.py b/omgeo/__init__.py index 513d253..877ca0c 100644 --- a/omgeo/__init__.py +++ b/omgeo/__init__.py @@ -31,7 +31,7 @@ def _get_service_by_name(self, service_name): m = getattr(m, p) return m except Exception as ex: - raise Exception("%s" % (ex)) + raise Exception("%s" % ex) def add_source(self, source): """ @@ -97,7 +97,7 @@ def geocode(self, pq, waterfall=None, force_stats_logging=False): start_time = time.time() waterfall = self.waterfall if waterfall is None else waterfall - if type(pq) in (str, unicode): + if type(pq) == str: pq = PlaceQuery(pq) processed_pq = copy.copy(pq) diff --git a/omgeo/places.py b/omgeo/places.py index 3e113d1..d3e1a29 100644 --- a/omgeo/places.py +++ b/omgeo/places.py @@ -22,7 +22,7 @@ def __init__(self, left=-180, top=90, right=180, bottom=-90, wkid=4326): raise ValueError('Left x-coord must be less than right x-coord.') if bottom > top: raise ValueError('Bottom y-coord must be less than top y-coord.') - for k in locals().keys(): + for k in list(locals()): if k != 'self': setattr(self, k, locals()[k]) def to_bing_str(self): @@ -131,7 +131,7 @@ def __init__(self, query='', address='', neighborhood='', city='', would be returned as "Vereinigte Staaten Von Amerika" instead of "United States". """ - for k in locals().keys(): + for k in list(locals()): if k not in ['self', 'kwargs']: setattr(self, k, locals()[k]) if query == '' and address == '' and city == '' and state == '' and postal == '': raise Exception('Must provide query or one or more of address, city, state, and postal.') @@ -142,7 +142,7 @@ def __repr__(self): return '<%s%s %s>' % (self.query, self.address, self.postal) -class Candidate(): +class Candidate: """ Class representing a candidate address returned from geocoders. Accepts arguments defined below, plus informal keyword arguments. @@ -186,7 +186,7 @@ def __init__(self, locator='', score=0, match_addr='', x=None, y=None, return these values. """ - for k in locals().keys(): + for k in list(locals()): if k not in ['self', 'kwargs']: setattr(self, k, locals()[k]) for k in kwargs: setattr(self, k, kwargs[k]) diff --git a/omgeo/postprocessors.py b/omgeo/postprocessors.py index 64ac6fe..ce455e6 100644 --- a/omgeo/postprocessors.py +++ b/omgeo/postprocessors.py @@ -393,7 +393,7 @@ def __init__(self, attr_dupes, attr_sort, ordered_list, return_clean=False): def process(self, candidates): def cleanup(str_): """Returns string in uppercase and free of commas.""" - if type(str_) in [str, unicode]: + if type(str_) == str: return str_.replace(',', '').upper() return str_ diff --git a/omgeo/services/__init__.py b/omgeo/services/__init__.py index dd9f2bf..9ba2b32 100644 --- a/omgeo/services/__init__.py +++ b/omgeo/services/__init__.py @@ -1,6 +1,6 @@ import re -from base import GeocodeService +from omgeo.services.base import GeocodeService import json import logging from omgeo.places import Candidate @@ -9,7 +9,7 @@ from omgeo.postprocessors import AttrFilter, AttrExclude, AttrRename, AttrSorter, \ AttrMigrator, UseHighScoreIfAtLeast, GroupBy, ScoreSorter import time -from urllib import unquote +from urllib.parse import unquote logger = logging.getLogger(__name__) diff --git a/omgeo/services/base.py b/omgeo/services/base.py index 32837ff..4d9bdc6 100644 --- a/omgeo/services/base.py +++ b/omgeo/services/base.py @@ -5,8 +5,9 @@ import socket import time from traceback import format_exc -from urllib import urlencode -from urllib2 import HTTPError, urlopen, URLError, Request +from urllib.parse import urlencode +from urllib.request import urlopen, Request +from urllib.error import HTTPError, URLError from xml.dom import minidom logger = logging.getLogger(__name__) @@ -155,7 +156,7 @@ def _get_json_obj(self, endpoint, query): response = self._get_response(endpoint, query) content = response.read() try: - return loads(content) + return loads(content.decode('utf-8')) except ValueError: raise Exception('Could not decode content to JSON:\n%s' % self.__class__.__name__, content)