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