Skip to content

Commit 212e6dd

Browse files
authored
git - Merge pull request #91 from DinoTools/remove_py2_support
Remove Python 2 support
2 parents a9c2241 + 8c55be8 commit 212e6dd

File tree

15 files changed

+56
-80
lines changed

15 files changed

+56
-80
lines changed

docs/source/introduction.rst

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ Requirements
66

77
Supported Python versions:
88

9-
* Python 2.7
10-
* Python > 3.2
11-
* PyPy
9+
* Python 3.6+
10+
* PyPy3
1211

1312
Installation
1413
------------

examples/get_areas.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
)
1919
)
2020
for n, v in area.tags.items():
21-
print(" Tag: %s = %s" % (n, v))
21+
print(f" Tag: {n} = {v}")

examples/get_nodes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
# We can also see a node's metadata:
77
jet_deau = 60018172
8-
result = api.query("node({}); out meta;".format(jet_deau))
8+
result = api.query(f"node({jet_deau}); out meta;")
99
node = result.get_node(jet_deau)
1010

1111
print(

examples/get_ways.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@
1515
print(" Highway: %s" % way.tags.get("highway", "n/a"))
1616
print(" Nodes:")
1717
for node in way.nodes:
18-
print(" Lat: %f, Lon: %f" % (node.lat, node.lon))
18+
print(f" Lat: {node.lat:f}, Lon: {node.lon:f}")

overpy/__init__.py

Lines changed: 19 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from xml.sax import handler, make_parser
55
import json
66
import re
7-
import sys
87
import time
98

109
from overpy import exception
@@ -13,9 +12,6 @@
1312
__uri__, __version__
1413
)
1514

16-
PY2 = sys.version_info[0] == 2
17-
PY3 = sys.version_info[0] == 3
18-
1915
XML_PARSER_DOM = 1
2016
XML_PARSER_SAX = 2
2117

@@ -29,12 +25,8 @@
2925
"visible": lambda v: v.lower() == "true"
3026
}
3127

32-
if PY2:
33-
from urllib2 import urlopen
34-
from urllib2 import HTTPError
35-
elif PY3:
36-
from urllib.request import urlopen
37-
from urllib.error import HTTPError
28+
from urllib.request import urlopen
29+
from urllib.error import HTTPError
3830

3931

4032
def is_valid_type(element, cls):
@@ -49,7 +41,7 @@ def is_valid_type(element, cls):
4941
return isinstance(element, cls) and element.id is not None
5042

5143

52-
class Overpass(object):
44+
class Overpass:
5345
"""
5446
Class to access the Overpass API
5547
@@ -78,7 +70,7 @@ def __init__(self, read_chunk_size=None, url=None, xml_parser=XML_PARSER_SAX, ma
7870
if url is not None:
7971
self.url = url
8072

81-
self._regex_extract_error_msg = re.compile(b"\<p\>(?P<msg>\<strong\s.*?)\</p\>")
73+
self._regex_extract_error_msg = re.compile(br"\<p\>(?P<msg>\<strong\s.*?)\</p\>")
8274
self._regex_remove_tag = re.compile(b"<[^>]*?>")
8375
if read_chunk_size is None:
8476
read_chunk_size = self.default_read_chunk_size
@@ -142,11 +134,7 @@ def query(self, query):
142134
f.close()
143135

144136
if f.code == 200:
145-
if PY2:
146-
http_info = f.info()
147-
content_type = http_info.getheader("content-type")
148-
else:
149-
content_type = f.getheader("Content-Type")
137+
content_type = f.getheader("Content-Type")
150138

151139
if content_type == "application/json":
152140
return self.parse_json(response)
@@ -234,9 +222,6 @@ def parse_xml(self, data, encoding="utf-8", parser=None):
234222

235223
if isinstance(data, bytes):
236224
data = data.decode(encoding)
237-
if PY2 and not isinstance(data, str):
238-
# Python 2.x: Convert unicode strings
239-
data = data.encode(encoding)
240225

241226
m = re.compile("<remark>(?P<msg>[^<>]*)</remark>").search(data)
242227
if m:
@@ -245,7 +230,7 @@ def parse_xml(self, data, encoding="utf-8", parser=None):
245230
return Result.from_xml(data, api=self, parser=parser)
246231

247232

248-
class Result(object):
233+
class Result:
249234
"""
250235
Class to handle the result.
251236
"""
@@ -399,10 +384,7 @@ def from_xml(cls, data, api=None, parser=None):
399384
result.append(elem_cls.from_xml(child, result=result))
400385

401386
elif parser == XML_PARSER_SAX:
402-
if PY2:
403-
from StringIO import StringIO
404-
else:
405-
from io import StringIO
387+
from io import StringIO
406388
source = StringIO(data)
407389
sax_handler = OSMSAXHandler(result)
408390
parser = make_parser()
@@ -603,7 +585,7 @@ def get_ways(self, way_id=None, **kwargs):
603585
ways = property(get_ways)
604586

605587

606-
class Element(object):
588+
class Element:
607589
"""
608590
Base element
609591
"""
@@ -679,7 +661,7 @@ def __init__(self, area_id=None, **kwargs):
679661
self.id = area_id
680662

681663
def __repr__(self):
682-
return "<overpy.Area id={}>".format(self.id)
664+
return f"<overpy.Area id={self.id}>"
683665

684666
@classmethod
685667
def from_json(cls, data, result=None):
@@ -782,7 +764,7 @@ def __init__(self, node_id=None, lat=None, lon=None, **kwargs):
782764
self.lon = lon
783765

784766
def __repr__(self):
785-
return "<overpy.Node id={} lat={} lon={}>".format(self.id, self.lat, self.lon)
767+
return f"<overpy.Node id={self.id} lat={self.lat} lon={self.lon}>"
786768

787769
@classmethod
788770
def from_json(cls, data, result=None):
@@ -897,7 +879,7 @@ def __init__(self, way_id=None, center_lat=None, center_lon=None, node_ids=None,
897879
self.center_lon = center_lon
898880

899881
def __repr__(self):
900-
return "<overpy.Way id={} nodes={}>".format(self.id, self._node_ids)
882+
return f"<overpy.Way id={self.id} nodes={self._node_ids}>"
901883

902884
@property
903885
def nodes(self):
@@ -1086,7 +1068,7 @@ def __init__(self, rel_id=None, center_lat=None, center_lon=None, members=None,
10861068
self.center_lon = center_lon
10871069

10881070
def __repr__(self):
1089-
return "<overpy.Relation id={}>".format(self.id)
1071+
return f"<overpy.Relation id={self.id}>"
10901072

10911073
@classmethod
10921074
def from_json(cls, data, result=None):
@@ -1211,7 +1193,7 @@ def from_xml(cls, child, result=None):
12111193
)
12121194

12131195

1214-
class RelationMember(object):
1196+
class RelationMember:
12151197
"""
12161198
Base class to represent a member of a relation.
12171199
"""
@@ -1340,7 +1322,7 @@ def resolve(self, resolve_missing=False):
13401322
return self._result.get_node(self.ref, resolve_missing=resolve_missing)
13411323

13421324
def __repr__(self):
1343-
return "<overpy.RelationNode ref={} role={}>".format(self.ref, self.role)
1325+
return f"<overpy.RelationNode ref={self.ref} role={self.role}>"
13441326

13451327

13461328
class RelationWay(RelationMember):
@@ -1350,16 +1332,16 @@ def resolve(self, resolve_missing=False):
13501332
return self._result.get_way(self.ref, resolve_missing=resolve_missing)
13511333

13521334
def __repr__(self):
1353-
return "<overpy.RelationWay ref={} role={}>".format(self.ref, self.role)
1335+
return f"<overpy.RelationWay ref={self.ref} role={self.role}>"
13541336

13551337

1356-
class RelationWayGeometryValue(object):
1338+
class RelationWayGeometryValue:
13571339
def __init__(self, lat, lon):
13581340
self.lat = lat
13591341
self.lon = lon
13601342

13611343
def __repr__(self):
1362-
return "<overpy.RelationWayGeometryValue lat={} lon={}>".format(self.lat, self.lon)
1344+
return f"<overpy.RelationWayGeometryValue lat={self.lat} lon={self.lon}>"
13631345

13641346

13651347
class RelationRelation(RelationMember):
@@ -1369,7 +1351,7 @@ def resolve(self, resolve_missing=False):
13691351
return self._result.get_relation(self.ref, resolve_missing=resolve_missing)
13701352

13711353
def __repr__(self):
1372-
return "<overpy.RelationRelation ref={} role={}>".format(self.ref, self.role)
1354+
return f"<overpy.RelationRelation ref={self.ref} role={self.role}>"
13731355

13741356

13751357
class RelationArea(RelationMember):
@@ -1379,7 +1361,7 @@ def resolve(self, resolve_missing=False):
13791361
return self._result.get_area(self.ref, resolve_missing=resolve_missing)
13801362

13811363
def __repr__(self):
1382-
return "<overpy.RelationArea ref={} role={}>".format(self.ref, self.role)
1364+
return f"<overpy.RelationArea ref={self.ref} role={self.role}>"
13831365

13841366

13851367
class OSMSAXHandler(handler.ContentHandler):

overpy/exception.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def __init__(self, type_expected, type_provided=None):
3131
self.type_provided = type_provided
3232

3333
def __str__(self):
34-
return "Type expected '%s' but '%s' provided" % (
34+
return "Type expected '{}' but '{}' provided".format(
3535
self.type_expected,
3636
str(self.type_provided)
3737
)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
filename_readme = os.path.join(base_dir, "README.rst")
1313
if sys.version_info[0] == 2:
1414
import io
15-
fp = io.open(filename_readme, encoding="utf-8")
15+
fp = open(filename_readme, encoding="utf-8")
1616
else:
1717
fp = open(filename_readme, encoding="utf-8")
1818
long_description = fp.read()

tests/__init__.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,8 @@
33
import threading
44
from threading import Lock
55

6-
PY2 = sys.version_info[0] == 2
7-
if PY2:
8-
from SocketServer import BaseRequestHandler, TCPServer, ThreadingMixIn
9-
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
10-
else:
11-
from socketserver import BaseRequestHandler, TCPServer, ThreadingMixIn
12-
from http.server import BaseHTTPRequestHandler, HTTPServer
6+
from socketserver import BaseRequestHandler, TCPServer, ThreadingMixIn
7+
from http.server import BaseHTTPRequestHandler, HTTPServer
138

149
TCPServer.allow_reuse_address = True
1510

tests/base_class.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from tests import read_file
1010

1111

12-
class BaseTestAreas(object):
12+
class BaseTestAreas:
1313
def _test_area01(self, result):
1414
assert len(result.areas) == 4
1515
assert len(result.nodes) == 0
@@ -76,7 +76,7 @@ def _test_area01(self, result):
7676
assert len(result.get_way_ids()) == 0
7777

7878

79-
class BaseTestNodes(object):
79+
class BaseTestNodes:
8080
def _test_node01(self, result):
8181
assert len(result.nodes) == 3
8282
assert len(result.relations) == 0
@@ -150,7 +150,7 @@ def _test_node01(self, result):
150150
assert len(result.get_way_ids()) == 0
151151

152152

153-
class BaseTestRelation(object):
153+
class BaseTestRelation:
154154
def _test_relation01(self, result):
155155
assert len(result.nodes) == 0
156156
assert len(result.relations) == 1
@@ -288,7 +288,7 @@ def _test_relation04(self, result):
288288
assert way.geometry[0].lon == Decimal("6.9813352")
289289

290290

291-
class BaseTestWay(object):
291+
class BaseTestWay:
292292
def _test_way01(self, result):
293293
assert len(result.nodes) == 0
294294
assert len(result.relations) == 0

tests/test_exception.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import overpy
22

33

4-
class TestExceptions(object):
4+
class TestExceptions:
55
def test_element_data_wrong_type(self):
66
e = overpy.exception.ElementDataWrongType("from1")
77
assert e.type_expected == "from1"

0 commit comments

Comments
 (0)