parent
397c5065ba
commit
7b0977dcfd
4 changed files with 0 additions and 1871 deletions
@ -1,22 +0,0 @@ |
|||||||
__all__ = [ |
|
||||||
"__author__", |
|
||||||
"__copyright__", |
|
||||||
"__email__", |
|
||||||
"__license__", |
|
||||||
"__summary__", |
|
||||||
"__title__", |
|
||||||
"__uri__", |
|
||||||
"__version__", |
|
||||||
] |
|
||||||
|
|
||||||
__title__ = "overpy" |
|
||||||
__summary__ = "Python Wrapper to access the OpenStreepMap Overpass API" |
|
||||||
__uri__ = "https://github.com/DinoTools/python-overpy" |
|
||||||
|
|
||||||
__version__ = "0.4" |
|
||||||
|
|
||||||
__author__ = "PhiBo (DinoTools)" |
|
||||||
__email__ = "" |
|
||||||
|
|
||||||
__license__ = "MIT" |
|
||||||
__copyright__ = "Copyright 2014-2016 %s" % __author__ |
|
File diff suppressed because it is too large
Load Diff
@ -1,166 +0,0 @@ |
|||||||
class OverPyException(BaseException): |
|
||||||
"""OverPy base exception""" |
|
||||||
pass |
|
||||||
|
|
||||||
|
|
||||||
class DataIncomplete(OverPyException): |
|
||||||
""" |
|
||||||
Raised if the requested data isn't available in the result. |
|
||||||
Try to improve the query or to resolve the missing data. |
|
||||||
""" |
|
||||||
def __init__(self, *args, **kwargs): |
|
||||||
OverPyException.__init__( |
|
||||||
self, |
|
||||||
"Data incomplete try to improve the query to resolve the missing data", |
|
||||||
*args, |
|
||||||
**kwargs |
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
class ElementDataWrongType(OverPyException): |
|
||||||
""" |
|
||||||
Raised if the provided element does not match the expected type. |
|
||||||
|
|
||||||
:param type_expected: The expected element type |
|
||||||
:type type_expected: String |
|
||||||
:param type_provided: The provided element type |
|
||||||
:type type_provided: String|None |
|
||||||
""" |
|
||||||
def __init__(self, type_expected, type_provided=None): |
|
||||||
self.type_expected = type_expected |
|
||||||
self.type_provided = type_provided |
|
||||||
|
|
||||||
def __str__(self): |
|
||||||
return "Type expected '%s' but '%s' provided" % ( |
|
||||||
self.type_expected, |
|
||||||
str(self.type_provided) |
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
class MaxRetriesReached(OverPyException): |
|
||||||
""" |
|
||||||
Raised if max retries reached and the Overpass server didn't respond with a result. |
|
||||||
""" |
|
||||||
def __init__(self, retry_count, exceptions): |
|
||||||
self.exceptions = exceptions |
|
||||||
self.retry_count = retry_count |
|
||||||
|
|
||||||
def __str__(self): |
|
||||||
return "Unable get any result from the Overpass API server after %d retries." % self.retry_count |
|
||||||
|
|
||||||
|
|
||||||
class OverpassBadRequest(OverPyException): |
|
||||||
""" |
|
||||||
Raised if the Overpass API service returns a syntax error. |
|
||||||
|
|
||||||
:param query: The encoded query how it was send to the server |
|
||||||
:type query: Bytes |
|
||||||
:param msgs: List of error messages |
|
||||||
:type msgs: List |
|
||||||
""" |
|
||||||
def __init__(self, query, msgs=None): |
|
||||||
self.query = query |
|
||||||
if msgs is None: |
|
||||||
msgs = [] |
|
||||||
self.msgs = msgs |
|
||||||
|
|
||||||
def __str__(self): |
|
||||||
tmp_msgs = [] |
|
||||||
for tmp_msg in self.msgs: |
|
||||||
if not isinstance(tmp_msg, str): |
|
||||||
tmp_msg = str(tmp_msg) |
|
||||||
tmp_msgs.append(tmp_msg) |
|
||||||
|
|
||||||
return "\n".join(tmp_msgs) |
|
||||||
|
|
||||||
|
|
||||||
class OverpassError(OverPyException): |
|
||||||
""" |
|
||||||
Base exception to report errors if the response returns a remark tag or element. |
|
||||||
|
|
||||||
.. note:: |
|
||||||
If you are not sure which of the subexceptions you should use, use this one and try to parse the message. |
|
||||||
|
|
||||||
For more information have a look at https://github.com/DinoTools/python-overpy/issues/62 |
|
||||||
|
|
||||||
:param str msg: The message from the remark tag or element |
|
||||||
""" |
|
||||||
def __init__(self, msg=None): |
|
||||||
#: The message from the remark tag or element |
|
||||||
self.msg = msg |
|
||||||
|
|
||||||
def __str__(self): |
|
||||||
if self.msg is None: |
|
||||||
return "No error message provided" |
|
||||||
if not isinstance(self.msg, str): |
|
||||||
return str(self.msg) |
|
||||||
return self.msg |
|
||||||
|
|
||||||
|
|
||||||
class OverpassGatewayTimeout(OverPyException): |
|
||||||
""" |
|
||||||
Raised if load of the Overpass API service is too high and it can't handle the request. |
|
||||||
""" |
|
||||||
def __init__(self): |
|
||||||
OverPyException.__init__(self, "Server load too high") |
|
||||||
|
|
||||||
|
|
||||||
class OverpassRuntimeError(OverpassError): |
|
||||||
""" |
|
||||||
Raised if the server returns a remark-tag(xml) or remark element(json) with a message starting with |
|
||||||
'runtime error:'. |
|
||||||
""" |
|
||||||
pass |
|
||||||
|
|
||||||
|
|
||||||
class OverpassRuntimeRemark(OverpassError): |
|
||||||
""" |
|
||||||
Raised if the server returns a remark-tag(xml) or remark element(json) with a message starting with |
|
||||||
'runtime remark:'. |
|
||||||
""" |
|
||||||
pass |
|
||||||
|
|
||||||
|
|
||||||
class OverpassTooManyRequests(OverPyException): |
|
||||||
""" |
|
||||||
Raised if the Overpass API service returns a 429 status code. |
|
||||||
""" |
|
||||||
def __init__(self): |
|
||||||
OverPyException.__init__(self, "Too many requests") |
|
||||||
|
|
||||||
|
|
||||||
class OverpassUnknownContentType(OverPyException): |
|
||||||
""" |
|
||||||
Raised if the reported content type isn't handled by OverPy. |
|
||||||
|
|
||||||
:param content_type: The reported content type |
|
||||||
:type content_type: None or String |
|
||||||
""" |
|
||||||
def __init__(self, content_type): |
|
||||||
self.content_type = content_type |
|
||||||
|
|
||||||
def __str__(self): |
|
||||||
if self.content_type is None: |
|
||||||
return "No content type returned" |
|
||||||
return "Unknown content type: %s" % self.content_type |
|
||||||
|
|
||||||
|
|
||||||
class OverpassUnknownError(OverpassError): |
|
||||||
""" |
|
||||||
Raised if the server returns a remark-tag(xml) or remark element(json) and we are unable to find any reason. |
|
||||||
""" |
|
||||||
pass |
|
||||||
|
|
||||||
|
|
||||||
class OverpassUnknownHTTPStatusCode(OverPyException): |
|
||||||
""" |
|
||||||
Raised if the returned HTTP status code isn't handled by OverPy. |
|
||||||
|
|
||||||
:param code: The HTTP status code |
|
||||||
:type code: Integer |
|
||||||
""" |
|
||||||
def __init__(self, code): |
|
||||||
self.code = code |
|
||||||
|
|
||||||
def __str__(self): |
|
||||||
return "Unknown/Unhandled status code: %d" % self.code |
|
@ -1,64 +0,0 @@ |
|||||||
__author__ = 'mjob' |
|
||||||
|
|
||||||
import overpy |
|
||||||
|
|
||||||
|
|
||||||
def get_street(street, areacode, api=None): |
|
||||||
""" |
|
||||||
Retrieve streets in a given bounding area |
|
||||||
|
|
||||||
:param overpy.Overpass api: First street of intersection |
|
||||||
:param String street: Name of street |
|
||||||
:param String areacode: The OSM id of the bounding area |
|
||||||
:return: Parsed result |
|
||||||
:raises overpy.exception.OverPyException: If something bad happens. |
|
||||||
""" |
|
||||||
if api is None: |
|
||||||
api = overpy.Overpass() |
|
||||||
|
|
||||||
query = """ |
|
||||||
area(%s)->.location; |
|
||||||
( |
|
||||||
way[highway][name="%s"](area.location); |
|
||||||
- ( |
|
||||||
way[highway=service](area.location); |
|
||||||
way[highway=track](area.location); |
|
||||||
); |
|
||||||
); |
|
||||||
out body; |
|
||||||
>; |
|
||||||
out skel qt; |
|
||||||
""" |
|
||||||
|
|
||||||
data = api.query(query % (areacode, street)) |
|
||||||
|
|
||||||
return data |
|
||||||
|
|
||||||
|
|
||||||
def get_intersection(street1, street2, areacode, api=None): |
|
||||||
""" |
|
||||||
Retrieve intersection of two streets in a given bounding area |
|
||||||
|
|
||||||
:param overpy.Overpass api: First street of intersection |
|
||||||
:param String street1: Name of first street of intersection |
|
||||||
:param String street2: Name of second street of intersection |
|
||||||
:param String areacode: The OSM id of the bounding area |
|
||||||
:return: List of intersections |
|
||||||
:raises overpy.exception.OverPyException: If something bad happens. |
|
||||||
""" |
|
||||||
if api is None: |
|
||||||
api = overpy.Overpass() |
|
||||||
|
|
||||||
query = """ |
|
||||||
area(%s)->.location; |
|
||||||
( |
|
||||||
way[highway][name="%s"](area.location); node(w)->.n1; |
|
||||||
way[highway][name="%s"](area.location); node(w)->.n2; |
|
||||||
); |
|
||||||
node.n1.n2; |
|
||||||
out meta; |
|
||||||
""" |
|
||||||
|
|
||||||
data = api.query(query % (areacode, street1, street2)) |
|
||||||
|
|
||||||
return data.get_nodes() |
|
Loading…
Reference in new issue