From e78ac7a539e497f467e6763358a2a2cbf7c4f55c Mon Sep 17 00:00:00 2001 From: Yaron de Leeuw Date: Mon, 11 Feb 2019 15:40:12 -0500 Subject: [PATCH] fix urllib2 imports --- examples/google_random_queries.py | 10 +++++++--- examples/shuttle_from_xmlfeed.py | 7 +++++-- misc/import_ch_zurich.py | 8 ++++++-- schedule_viewer.py | 8 +++++--- tests/testexamples.py | 8 ++++++-- tests/transitfeed/testutil.py | 26 ++++++++++++++++---------- transitfeed/util.py | 15 ++++++++++----- 7 files changed, 55 insertions(+), 27 deletions(-) diff --git a/examples/google_random_queries.py b/examples/google_random_queries.py index 72928381..70984ae6 100755 --- a/examples/google_random_queries.py +++ b/examples/google_random_queries.py @@ -33,9 +33,13 @@ import random import sys import transitfeed -import urllib -import urlparse +try: # py3 + import urllib.parse as urllibparse + urlparse = urllibparse +except ImportError: + import urllib as urllibparse + import urlparse def Distance(lat0, lng0, lat1, lng1): """ @@ -106,7 +110,7 @@ def LatLngsToGoogleUrl(source, destination, dt): "ie": "UTF8", "oe": "UTF8"} url = urlparse.urlunsplit(("http", "maps.google.com", "/maps", - urllib.urlencode(params), "")) + urllibparse.urlencode(params), "")) return url diff --git a/examples/shuttle_from_xmlfeed.py b/examples/shuttle_from_xmlfeed.py index da470a66..e0720c2e 100755 --- a/examples/shuttle_from_xmlfeed.py +++ b/examples/shuttle_from_xmlfeed.py @@ -24,7 +24,10 @@ import os.path import re import transitfeed -import urllib +try: # py3 + import urllib.request as urlrequest +except ImportError: + import urllib as urlrequest try: import xml.etree.ElementTree as ET # python 2.5 @@ -45,7 +48,7 @@ def UnusedStop(self, stop_id, stop_name): pass def SaveFeed(input, output): - tree = ET.parse(urllib.urlopen(input)) + tree = ET.parse(urlrequest.urlopen(input)) schedule = transitfeed.Schedule() service_period = schedule.GetDefaultServicePeriod() diff --git a/misc/import_ch_zurich.py b/misc/import_ch_zurich.py index 81b2e6e6..333d2cac 100755 --- a/misc/import_ch_zurich.py +++ b/misc/import_ch_zurich.py @@ -27,9 +27,13 @@ import datetime import optparse import sys -import urllib import zipfile +try: # py3 + import urllib.parse as urlparse +except ImportError: + import urlparse + # Zurich tram lines TRAM_LINES = {'2':['FF3300','FFFFFF'], @@ -218,7 +222,7 @@ def ImportStations(self, station_file, adv_file): station.name, station.city = self.DemangleName(name) station.country = 'CH' station.url = 'http://fahrplan.zvv.ch/?to.0=' + \ - urllib.quote(name.encode('iso-8859-1')) + urlparse.quote(name.encode('iso-8859-1')) station.advertised_lines = set() self.stations[id] = station for station_id, line_id in ReadCSV(adv_file, ['ORT_NR', 'LI_NR']): diff --git a/schedule_viewer.py b/schedule_viewer.py index 0ac217c5..c7fb519a 100755 --- a/schedule_viewer.py +++ b/schedule_viewer.py @@ -35,8 +35,10 @@ import time import transitfeed from transitfeed import util -import urllib - +try: # py3 + import urllib.parse as urlparse +except ImportError: + import urllib as urlparse # By default Windows kills Python with Ctrl+Break. Instead make Ctrl+Break # raise a KeyboardInterrupt. @@ -97,7 +99,7 @@ def do_GET(self): scheme, host, path, x, params, fragment = urlparse.urlparse(self.path) parsed_params = {} for k in params.split('&'): - k = urllib.unquote(k) + k = urlparse.unquote(k) if '=' in k: k, v = k.split('=', 1) parsed_params[k] = unicode(v, 'utf8') diff --git a/tests/testexamples.py b/tests/testexamples.py index 73c80e06..f027733f 100644 --- a/tests/testexamples.py +++ b/tests/testexamples.py @@ -7,13 +7,17 @@ import re import transitfeed import unittest -import urllib +try: # py3 + import urllib.request as urlrequest +except ImportError: + import urllib as urlrequest + from tests import util class WikiExample(util.TempDirTestCaseBase): # Download example from wiki and run it def runTest(self): - wiki_source = urllib.urlopen( + wiki_source = urlrequest.urlopen( 'https://raw.githubusercontent.com/wiki/google/transitfeed/TransitFeed.md' ).read() m = re.search(r'```\s*(import transitfeed.*)```', wiki_source, re.DOTALL) diff --git a/tests/transitfeed/testutil.py b/tests/transitfeed/testutil.py index 2dc5e6f4..3137d44e 100644 --- a/tests/transitfeed/testutil.py +++ b/tests/transitfeed/testutil.py @@ -26,8 +26,14 @@ from transitfeed import util from transitfeed import version import unittest -from urllib2 import HTTPError, URLError -import urllib2 +try: # py3 + import urllib.request as urlrequest + from urllib.error import HTTPError, URLError +except ImportError: + import urllib2 as urlrequest + from urllib2 import HTTPError, URLError + + class ColorLuminanceTestCase(test_util.TestCase): @@ -254,14 +260,14 @@ def runTest(self): class CheckVersionTestCase(test_util.TempDirTestCaseBase): def setUp(self): - self.orig_urlopen = urllib2.urlopen + self.orig_urlopen = urlrequest.urlopen self.mock = MockURLOpen() self.accumulator = test_util.RecordingProblemAccumulator(self) self.problems = ProblemReporter(self.accumulator) def tearDown(self): self.mock = None - urllib2.urlopen = self.orig_urlopen + urlrequest.urlopen = self.orig_urlopen def testAssignedDifferentVersion(self): util.CheckVersion(self.problems, '100.100.100') @@ -275,40 +281,40 @@ def testAssignedSameVersion(self): self.accumulator.AssertNoMoreExceptions() def testGetCorrectReturns(self): - urllib2.urlopen = self.mock.mockedConnectSuccess + urlrequest.urlopen = self.mock.mockedConnectSuccess util.CheckVersion(self.problems) self.accumulator.PopException('NewVersionAvailable') def testPageNotFound(self): - urllib2.urlopen = self.mock.mockedPageNotFound + urlrequest.urlopen = self.mock.mockedPageNotFound util.CheckVersion(self.problems) e = self.accumulator.PopException('OtherProblem') self.assertTrue(re.search(r'we failed to reach', e.description)) self.assertTrue(re.search(r'Reason: Not Found \[404\]', e.description)) def testConnectionTimeOut(self): - urllib2.urlopen = self.mock.mockedConnectionTimeOut + urlrequest.urlopen = self.mock.mockedConnectionTimeOut util.CheckVersion(self.problems) e = self.accumulator.PopException('OtherProblem') self.assertTrue(re.search(r'we failed to reach', e.description)) self.assertTrue(re.search(r'Reason: Connection timed', e.description)) def testGetAddrInfoFailed(self): - urllib2.urlopen = self.mock.mockedGetAddrInfoFailed + urlrequest.urlopen = self.mock.mockedGetAddrInfoFailed util.CheckVersion(self.problems) e = self.accumulator.PopException('OtherProblem') self.assertTrue(re.search(r'we failed to reach', e.description)) self.assertTrue(re.search(r'Reason: Getaddrinfo failed', e.description)) def testEmptyIsReturned(self): - urllib2.urlopen = self.mock.mockedEmptyIsReturned + urlrequest.urlopen = self.mock.mockedEmptyIsReturned util.CheckVersion(self.problems) e = self.accumulator.PopException('OtherProblem') self.assertTrue(re.search(r'we had trouble parsing', e.description)) class MockURLOpen: - """Pretend to be a urllib2.urlopen suitable for testing.""" + """Pretend to be a urlrequest.urlopen suitable for testing.""" def mockedConnectSuccess(self, request): return StringIO.StringIO('latest_version=100.0.1') diff --git a/transitfeed/util.py b/transitfeed/util.py index 42d814a0..ab2a7776 100644 --- a/transitfeed/util.py +++ b/transitfeed/util.py @@ -26,7 +26,12 @@ import socket import sys import time -import urllib2 +try: # py3 + import urllib.request as urlrequest + import urllib.error as urlerror +except ImportError: + import urllib2 as urlrequest + urlerror = urlrequest from . import errors from .version import __version__ @@ -190,23 +195,23 @@ def CheckVersion(problems, latest_version=None): if not latest_version: timeout = 20 socket.setdefaulttimeout(timeout) - request = urllib2.Request(LATEST_RELEASE_VERSION_URL) + request = urlrequest.Request(LATEST_RELEASE_VERSION_URL) try: - response = urllib2.urlopen(request) + response = urlrequest.urlopen(request) content = response.read() m = re.search(r'version=(\d+\.\d+\.\d+)', content) if m: latest_version = m.group(1) - except urllib2.HTTPError as e: + except urlerror.HTTPError as e: description = ('During the new-version check, we failed to reach ' 'transitfeed server: Reason: %s [%s].' % (e.reason, e.code)) problems.OtherProblem( description=description, type=errors.TYPE_NOTICE) return - except urllib2.URLError as e: + except urlerror.URLError as e: description = ('During the new-version check, we failed to reach ' 'transitfeed server. Reason: %s.' % e.reason) problems.OtherProblem(