Beispiel #1
0
def test_reverse_should_not_return_housenumber_if_filtered(factory):
    factory(lat=48.234544, lon=5.235444,
            housenumbers={'24': {'lat': 48.234545, 'lon': 5.235445}})
    results = reverse(lat=48.234545, lon=5.235445, type="street")
    assert results[0].type == 'street'
    results = reverse(lat=48.234545, lon=5.235445)
    assert results[0].type == 'housenumber'
Beispiel #2
0
def test_reverse_can_be_limited(factory):
    factory(lat=48.234545, lon=5.235445)
    factory(lat=48.234546, lon=5.235446)
    results = reverse(lat=48.234545, lon=5.235445)
    assert len(results) == 1
    results = reverse(lat=48.234545, lon=5.235445, limit=2)
    assert len(results) == 2
Beispiel #3
0
def test_reverse_can_be_limited(factory):
    factory(lat=48.234545, lon=5.235445)
    factory(lat=48.234546, lon=5.235446)
    results = reverse(lat=48.234545, lon=5.235445)
    assert len(results) == 1
    results = reverse(lat=48.234545, lon=5.235445, limit=2)
    assert len(results) == 2
Beispiel #4
0
def test_reverse_should_not_return_housenumber_if_filtered(factory):
    factory(lat=48.234544,
            lon=5.235444,
            housenumbers={'24': {
                'lat': 48.234545,
                'lon': 5.235445
            }})
    results = reverse(lat=48.234545, lon=5.235445, type="street")
    assert results[0].type == 'street'
    results = reverse(lat=48.234545, lon=5.235445)
    assert results[0].type == 'housenumber'
Beispiel #5
0
 def on_get(self, req, resp, **kwargs):
     lon, lat = self.parse_lon_lat(req)
     if lon is None or lat is None:
         raise falcon.HTTPBadRequest('Invalid args', 'Invalid args')
     limit = req.get_param_as_int('limit') or 1
     filters = self.match_filters(req)
     results = reverse(lat=lat, lon=lon, limit=limit, **filters)
     self.to_geojson(req, resp, results, filters=filters, limit=limit)
Beispiel #6
0
 def on_get(self, req, resp, **kwargs):
     lon, lat = self.parse_lon_lat(req)
     if lon is None or lat is None:
         raise falcon.HTTPBadRequest('Invalid args', 'Invalid args')
     limit = req.get_param_as_int('limit') or 1
     filters = self.match_filters(req)
     results = reverse(lat=lat, lon=lon, limit=limit, **filters)
     self.to_geojson(req, resp, results, filters=filters, limit=limit)
Beispiel #7
0
def test_reverse_return_housenumber(factory):
    factory(housenumbers={
        '24': {
            'lat': 48.234545,
            'lon': 5.235445,
            'key': 'value'
        }
    })
    results = reverse(lat=48.234545, lon=5.235445)
    assert results[0].housenumber == '24'
    assert results[0].type == 'housenumber'
    assert results[0].key == 'value'
    assert not results[0].raw
Beispiel #8
0
 def get(self):
     try:
         lat = float(self.request.args.get('lat'))
         lon = float(self.request.args.get('lon',
                     self.request.args.get('lng')))
     except (ValueError, TypeError):
         raise BadRequest()
     try:
         limit = int(self.request.args.get('limit'))
     except (ValueError, TypeError):
         limit = 1
     filters = self.match_filters()
     results = reverse(lat=lat, lon=lon, limit=limit, **filters)
     return self.to_geojson(results, filters=filters, limit=limit)
Beispiel #9
0
    def on_get(self, req, resp, **kwargs):
        lon, lat = self.parse_lon_lat(req)
        placeID = req.get_param('place_id')
        if (lon is None or lat is None) and not placeID:
            raise falcon.HTTPBadRequest('Invalid args', 'Invalid args')
        placeIDArray = []
        if placeID:
            placeIDArray = placeID.split('_')
            if len(placeIDArray) > 1:
                lat, lon = geohash.decode(placeIDArray[-1][:12])
        limit = req.get_param_as_int('limit') or 5
        filters = self.match_filters(req)
        if len(placeIDArray) > 1 and placeIDArray[-1] and len(
                placeIDArray[-1]) > 12:
            filters['type'] = placeIDArray[-1][12:].upper()
            try:
                filters['id'] = str(hashids.decode(placeIDArray[0])[0])
            except:
                filters['id'] = '_'.join(placeIDArray[:-1])
            if filters['type'] == 'H':
                filters['type'] = 'housenumber'
        results = reverse(lat=lat, lon=lon, limit=limit, **filters)
        tieredResults = [[], [], [], [], [], []]
        for result in results:
            if result.type[0] == 'R' and not tieredResults[4]:
                tieredResults[5].append(result)
            elif result.distance < 10:
                if result.type in ['B', 'S', 'SS']:
                    tieredResults[0].append(result)
                else:
                    tieredResults[1].append(result)
            elif result.type != 'ST':
                if result.type in ['B', 'S', 'SS']:
                    tieredResults[2].append(result)
                else:
                    tieredResults[3].append(result)
            else:
                tieredResults[4].append(result)

        finalResults = []
        for tr in tieredResults:
            finalResults += tr

        self.render(req, resp, finalResults[:1], filters=filters, limit=limit)
Beispiel #10
0
 def process_row(self, req, row, filters, columns):
     lat = row.get('latitude', row.get('lat', None))
     lon = row.get('longitude', row.get('lon', row.get('lng', row.get('long', None))))
     try:
         lat = float(lat)
         lon = float(lon)
     except (ValueError, TypeError):
         return
     filters = self.match_row_filters(row, filters)
     results = reverse(lat=lat, lon=lon, limit=1, **filters)
     if results:
         result = results[0]
         row.update({
             'result_latitude': result.lat,
             'result_longitude': result.lon,
             'result_label': str(result),
             'result_distance': int(result.distance),
             'result_type': result.type,
             'result_id': result.id,
             'result_housenumber': result.housenumber,
         })
         self.add_extra_fields(row, result)
Beispiel #11
0
 def process_row(self, req, row, filters, columns, index):
     lat = row.get('latitude', row.get('lat', None))
     lon = row.get('longitude',
                   row.get('lon', row.get('lng', row.get('long', None))))
     try:
         lat = float(lat)
         lon = float(lon)
     except (ValueError, TypeError):
         return
     filters = self.match_row_filters(row, filters)
     results = reverse(lat=lat, lon=lon, limit=1, **filters)
     if results:
         result = results[0]
         row.update({
             'result_latitude': result.lat,
             'result_longitude': result.lon,
             'result_label': str(result),
             'result_distance': int(result.distance),
             'result_type': result.type,
             'result_id': result.id,
             'result_housenumber': result.housenumber,
         })
         self.add_extra_fields(row, result)
Beispiel #12
0
def test_reverse_return_closer_point(factory):
    factory(lat=78.23, lon=-15.23)
    good = factory(lat=48.234545, lon=5.235445)
    assert reverse(lat=48.234545, lon=5.235445)[0].id == good['id']
Beispiel #13
0
def test_reverse_can_be_filtered(factory):
    factory(lat=48.234545, lon=5.235445, type="street")
    factory(lat=48.234546, lon=5.235446, type="city")
    results = reverse(lat=48.234545, lon=5.235445, type="city")
    assert len(results) == 1
    assert results[0].type == "city"
Beispiel #14
0
def test_reverse_return_housenumber(factory):
    factory(housenumbers={'24': {'lat': 48.234545, 'lon': 5.235445}})
    results = reverse(lat=48.234545, lon=5.235445)
    assert results[0].housenumber == '24'
    assert results[0].type == 'housenumber'
Beispiel #15
0
def test_reverse_return_closer_point(factory):
    factory(lat=78.23, lon=-15.23)
    good = factory(lat=48.234545, lon=5.235445)
    assert reverse(lat=48.234545, lon=5.235445)[0].id == good['id']
Beispiel #16
0
def test_reverse_can_be_filtered(factory):
    factory(lat=48.234545, lon=5.235445, type="street")
    factory(lat=48.234546, lon=5.235446, type="city")
    results = reverse(lat=48.234545, lon=5.235445, type="city")
    assert len(results) == 1
    assert results[0].type == "city"