Skip to content

Commit 2840e5e

Browse files
authored
Merge pull request #72 from maxmind/greg/upgrade-urllib3
Upgrade urllib3
2 parents 73576d2 + f0c8615 commit 2840e5e

File tree

10 files changed

+137
-178
lines changed

10 files changed

+137
-178
lines changed

.travis.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@ matrix:
44
include:
55
- python: 2.7
66
dist: trusty
7-
- python: 3.3
8-
dist: trusty
9-
- python: 3.4
10-
dist: trusty
117
- python: 3.5
128
dist: trusty
139
- python: 3.6

HISTORY.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
History
44
-------
55

6-
2.9.1
6+
2.10.0
77
++++++++++++++++++
88

9+
* Python 3.3 and 3.4 are no longer supported.
910
* Updated documentation of anonymizer attributes - ``is_anonymous_vpn`` and
1011
``is_hosting_provider`` - to be more descriptive.
1112

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ correction, please `contact MaxMind support
385385
Requirements
386386
------------
387387

388-
This code requires Python 2.7+ or 3.3+. Older versions are not supported.
388+
This code requires Python 2.7+ or 3.5+. Older versions are not supported.
389389
This library has been tested with CPython and PyPy.
390390

391391
The Requests HTTP library is also required. See

geoip2/database.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,9 @@ def isp(self, ip_address):
182182
def _get(self, database_type, ip_address):
183183
if database_type not in self.metadata().database_type:
184184
caller = inspect.stack()[2][3]
185-
raise TypeError(
186-
"The %s method cannot be used with the "
187-
"%s database" % (caller, self.metadata().database_type))
185+
raise TypeError("The %s method cannot be used with the "
186+
"%s database" %
187+
(caller, self.metadata().database_type))
188188
record = self._db_reader.get(ip_address)
189189
if record is None:
190190
raise geoip2.errors.AddressNotFoundError(

geoip2/webservice.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,13 @@ def _response_for(self, path, model_class, ip_address):
155155
if ip_address != 'me':
156156
ip_address = str(compat_ip_address(ip_address))
157157
uri = '/'.join([self._base_uri, path, ip_address])
158-
response = requests.get(
159-
uri,
160-
auth=(self._account_id, self._license_key),
161-
headers={
162-
'Accept': 'application/json',
163-
'User-Agent': self._user_agent()
164-
},
165-
timeout=self._timeout)
158+
response = requests.get(uri,
159+
auth=(self._account_id, self._license_key),
160+
headers={
161+
'Accept': 'application/json',
162+
'User-Agent': self._user_agent()
163+
},
164+
timeout=self._timeout)
166165
if response.status_code != 200:
167166
raise self._exception_for_error(response, uri)
168167
body = self._handle_success(response, uri)
@@ -204,8 +203,8 @@ def _exception_for_4xx_status(self, response, status, uri):
204203
except ValueError as ex:
205204
return HTTPError(
206205
'Received a %(status)i error for %(uri)s but it did'
207-
' not include the expected JSON body: ' % locals() + ', '.join(
208-
ex.args), status, uri)
206+
' not include the expected JSON body: ' % locals() +
207+
', '.join(ex.args), status, uri)
209208
else:
210209
if 'code' in body and 'error' in body:
211210
return self._exception_for_web_service_error(

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
requests>=2.20.0
21
maxminddb>=1.4.0
2+
requests>=2.22.0
3+
urllib3>=1.25.2

setup.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
package_data={'': ['LICENSE']},
2525
package_dir={'geoip2': 'geoip2'},
2626
include_package_data=True,
27-
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*',
27+
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',
2828
install_requires=requirements,
2929
extras_require={':python_version=="2.7"': ['ipaddress']},
3030
tests_require=['requests_mock>=0.5'],
@@ -38,10 +38,9 @@
3838
'License :: OSI Approved :: Apache Software License',
3939
'Programming Language :: Python :: 2.7',
4040
'Programming Language :: Python :: 3',
41-
'Programming Language :: Python :: 3.3',
42-
'Programming Language :: Python :: 3.4',
4341
'Programming Language :: Python :: 3.5',
4442
'Programming Language :: Python :: 3.6',
43+
'Programming Language :: Python :: 3.7',
4544
'Programming Language :: Python',
4645
'Topic :: Internet :: Proxy Servers',
4746
'Topic :: Internet',

tests/database_test.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,8 @@ def test_asn(self):
8787
'Telstra Pty Ltd')
8888
self.assertEqual(record.ip_address, ip_address)
8989

90-
self.assertRegex(
91-
str(record), r'geoip2.models.ASN\(.*1\.128\.0\.0.*\)',
92-
'str representation is correct')
90+
self.assertRegex(str(record), r'geoip2.models.ASN\(.*1\.128\.0\.0.*\)',
91+
'str representation is correct')
9392

9493
self.assertEqual(record, eval(repr(record)), "ASN repr can be eval'd")
9594

@@ -118,9 +117,8 @@ def test_connection_type(self):
118117
self.assertEqual(record.connection_type, 'Cable/DSL')
119118
self.assertEqual(record.ip_address, ip_address)
120119

121-
self.assertRegex(
122-
str(record), r'ConnectionType\(\{.*Cable/DSL.*\}\)',
123-
'ConnectionType str representation is reasonable')
120+
self.assertRegex(str(record), r'ConnectionType\(\{.*Cable/DSL.*\}\)',
121+
'ConnectionType str representation is reasonable')
124122

125123
self.assertEqual(record, eval(repr(record)),
126124
"ConnectionType repr can be eval'd")
@@ -146,9 +144,8 @@ def test_domain(self):
146144
self.assertEqual(record.domain, 'maxmind.com')
147145
self.assertEqual(record.ip_address, ip_address)
148146

149-
self.assertRegex(
150-
str(record), r'Domain\(\{.*maxmind.com.*\}\)',
151-
'Domain str representation is reasonable')
147+
self.assertRegex(str(record), r'Domain\(\{.*maxmind.com.*\}\)',
148+
'Domain str representation is reasonable')
152149

153150
self.assertEqual(record, eval(repr(record)),
154151
"Domain repr can be eval'd")
@@ -184,9 +181,8 @@ def test_isp(self):
184181
self.assertEqual(record.organization, 'Telstra Internet')
185182
self.assertEqual(record.ip_address, ip_address)
186183

187-
self.assertRegex(
188-
str(record), r'ISP\(\{.*Telstra.*\}\)',
189-
'ISP str representation is reasonable')
184+
self.assertRegex(str(record), r'ISP\(\{.*Telstra.*\}\)',
185+
'ISP str representation is reasonable')
190186

191187
self.assertEqual(record, eval(repr(record)), "ISP repr can be eval'd")
192188

tests/models_test.py

Lines changed: 54 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -109,33 +109,27 @@ def test_insights_full(self):
109109
}
110110

111111
model = geoip2.models.Insights(raw)
112-
self.assertEqual(
113-
type(model), geoip2.models.Insights,
114-
'geoip2.models.Insights object')
115-
self.assertEqual(
116-
type(model.city), geoip2.records.City,
117-
'geoip2.records.City object')
118-
self.assertEqual(
119-
type(model.continent), geoip2.records.Continent,
120-
'geoip2.records.Continent object')
121-
self.assertEqual(
122-
type(model.country), geoip2.records.Country,
123-
'geoip2.records.Country object')
124-
self.assertEqual(
125-
type(model.registered_country), geoip2.records.Country,
126-
'geoip2.records.Country object')
127-
self.assertEqual(
128-
type(model.represented_country), geoip2.records.RepresentedCountry,
129-
'geoip2.records.RepresentedCountry object')
130-
self.assertEqual(
131-
type(model.location), geoip2.records.Location,
132-
'geoip2.records.Location object')
133-
self.assertEqual(
134-
type(model.subdivisions[0]), geoip2.records.Subdivision,
135-
'geoip2.records.Subdivision object')
136-
self.assertEqual(
137-
type(model.traits), geoip2.records.Traits,
138-
'geoip2.records.Traits object')
112+
self.assertEqual(type(model), geoip2.models.Insights,
113+
'geoip2.models.Insights object')
114+
self.assertEqual(type(model.city), geoip2.records.City,
115+
'geoip2.records.City object')
116+
self.assertEqual(type(model.continent), geoip2.records.Continent,
117+
'geoip2.records.Continent object')
118+
self.assertEqual(type(model.country), geoip2.records.Country,
119+
'geoip2.records.Country object')
120+
self.assertEqual(type(model.registered_country),
121+
geoip2.records.Country,
122+
'geoip2.records.Country object')
123+
self.assertEqual(type(model.represented_country),
124+
geoip2.records.RepresentedCountry,
125+
'geoip2.records.RepresentedCountry object')
126+
self.assertEqual(type(model.location), geoip2.records.Location,
127+
'geoip2.records.Location object')
128+
self.assertEqual(type(model.subdivisions[0]),
129+
geoip2.records.Subdivision,
130+
'geoip2.records.Subdivision object')
131+
self.assertEqual(type(model.traits), geoip2.records.Traits,
132+
'geoip2.records.Traits object')
139133
self.assertEqual(model.raw, raw, 'raw method returns raw input')
140134
self.assertEqual(model.subdivisions[0].iso_code, 'MN',
141135
'div 1 has correct iso_code')
@@ -170,9 +164,9 @@ def test_insights_full(self):
170164
self.assertEqual(model, eval(repr(model)),
171165
"Insights repr can be eval'd")
172166

173-
self.assertRegex(
174-
str(model.location), r'^geoip2.records.Location\(.*longitude=.*\)',
175-
'Location str representation is reasonable')
167+
self.assertRegex(str(model.location),
168+
r'^geoip2.records.Location\(.*longitude=.*\)',
169+
'Location str representation is reasonable')
176170

177171
self.assertEqual(model.location, eval(repr(model.location)),
178172
"Location repr can be eval'd")
@@ -191,27 +185,21 @@ def test_insights_full(self):
191185

192186
def test_insights_min(self):
193187
model = geoip2.models.Insights({'traits': {'ip_address': '5.6.7.8'}})
194-
self.assertEqual(
195-
type(model), geoip2.models.Insights,
196-
'geoip2.models.Insights object')
197-
self.assertEqual(
198-
type(model.city), geoip2.records.City,
199-
'geoip2.records.City object')
200-
self.assertEqual(
201-
type(model.continent), geoip2.records.Continent,
202-
'geoip2.records.Continent object')
203-
self.assertEqual(
204-
type(model.country), geoip2.records.Country,
205-
'geoip2.records.Country object')
206-
self.assertEqual(
207-
type(model.registered_country), geoip2.records.Country,
208-
'geoip2.records.Country object')
209-
self.assertEqual(
210-
type(model.location), geoip2.records.Location,
211-
'geoip2.records.Location object')
212-
self.assertEqual(
213-
type(model.traits), geoip2.records.Traits,
214-
'geoip2.records.Traits object')
188+
self.assertEqual(type(model), geoip2.models.Insights,
189+
'geoip2.models.Insights object')
190+
self.assertEqual(type(model.city), geoip2.records.City,
191+
'geoip2.records.City object')
192+
self.assertEqual(type(model.continent), geoip2.records.Continent,
193+
'geoip2.records.Continent object')
194+
self.assertEqual(type(model.country), geoip2.records.Country,
195+
'geoip2.records.Country object')
196+
self.assertEqual(type(model.registered_country),
197+
geoip2.records.Country,
198+
'geoip2.records.Country object')
199+
self.assertEqual(type(model.location), geoip2.records.Location,
200+
'geoip2.records.Location object')
201+
self.assertEqual(type(model.traits), geoip2.records.Traits,
202+
'geoip2.records.Traits object')
215203
self.assertEqual(
216204
type(model.subdivisions.most_specific), geoip2.records.Subdivision,
217205
'geoip2.records.Subdivision object returned even'
@@ -248,26 +236,21 @@ def test_city_full(self):
248236
},
249237
}
250238
model = geoip2.models.City(raw)
251-
self.assertEqual(
252-
type(model), geoip2.models.City, 'geoip2.models.City object')
253-
self.assertEqual(
254-
type(model.city), geoip2.records.City,
255-
'geoip2.records.City object')
256-
self.assertEqual(
257-
type(model.continent), geoip2.records.Continent,
258-
'geoip2.records.Continent object')
259-
self.assertEqual(
260-
type(model.country), geoip2.records.Country,
261-
'geoip2.records.Country object')
262-
self.assertEqual(
263-
type(model.registered_country), geoip2.records.Country,
264-
'geoip2.records.Country object')
265-
self.assertEqual(
266-
type(model.location), geoip2.records.Location,
267-
'geoip2.records.Location object')
268-
self.assertEqual(
269-
type(model.traits), geoip2.records.Traits,
270-
'geoip2.records.Traits object')
239+
self.assertEqual(type(model), geoip2.models.City,
240+
'geoip2.models.City object')
241+
self.assertEqual(type(model.city), geoip2.records.City,
242+
'geoip2.records.City object')
243+
self.assertEqual(type(model.continent), geoip2.records.Continent,
244+
'geoip2.records.Continent object')
245+
self.assertEqual(type(model.country), geoip2.records.Country,
246+
'geoip2.records.Country object')
247+
self.assertEqual(type(model.registered_country),
248+
geoip2.records.Country,
249+
'geoip2.records.Country object')
250+
self.assertEqual(type(model.location), geoip2.records.Location,
251+
'geoip2.records.Location object')
252+
self.assertEqual(type(model.traits), geoip2.records.Traits,
253+
'geoip2.records.Traits object')
271254
self.assertEqual(model.raw, raw, 'raw method returns raw input')
272255
self.assertEqual(model.continent.geoname_id, 42,
273256
'continent geoname_id is 42')

0 commit comments

Comments
 (0)