Ejemplo n.º 1
0
def add_set_dummy_geocoder_method():
    gc.LocationsGeocoder.__real_geocoder = gc.get_geocoder(valid_email)

    def _set_dummy_geocoder(self):
        """Method for testing. Will change _geocoder to function that 
        returns geopy.location.Location for Evan's Hall, Berkeley, CA
        and occasionally returns None. 

        Undo with either:
        self.email = str_valid_email 
        or
        self.geocoder = str_valid_email
        """
        # Go Bears!
        evans_hall = self.__real_geocoder("Evan's Hall, Berkeley, CA")
        def test_generator():
            n = 0
            while True:
                n += 1
                if n%10 == 0:
                    yield None
                else:
                    yield evans_hall
        gen = test_generator()
        self._geocoder = lambda *args, **kwargs: next(gen)

    gc.LocationsGeocoder._set_dummy_geocoder = _set_dummy_geocoder
Ejemplo n.º 2
0
    def test_miniumum_runtime(self):
        """Tests that the geocoder runs at most 1 address per second
        in accordance with Nominatim terms of service.

        Because this test needs to verify the RateLimiter is working 
        consistently, it runs unusually long... sorry.
        """
        email = valid_email
        geocoder = gc.get_geocoder(email)

        error_msg = ("Geocoder running more than once per second violating "
                     "Nominatim terms of service.")

        for n in range(3):
            t0 = timeit.default_timer()
            for i in range(n):
                geocoder("")
            t1 = timeit.default_timer()
            t_diff = t1-t0
            assert t_diff >= n-1, error
Ejemplo n.º 3
0
    def test_geocoder(self):
        """
        Tests that the geocoder returned by get_geocoder
        accurately geocodes an address.
        """
        # setup
        email = valid_email
        geocoder = gc.get_geocoder(email)

        address = "Evans Hall, Berkeley, CA"
        location = geocoder(address)

        error1 = ("Geocoder returned None. Either email not accepted "
                  "or address not found by OpenStreetMap")
        error2 = "Geocoder did not return geopy.location.Location"
        error3 = "Geocder matched with wrong address."
        assert location is not None, error1
        assert isinstance(location, geopy.location.Location), error2
        assert (("Evans Hall".lower() in location.address.lower())
                & isclose(location.latitude, 37.873621099999994) 
                & isclose(location.longitude, -122.25768131042068)), error3
Ejemplo n.º 4
0
 def test_reject_invalid_email(self):
     """Test get_geocoder only accepts valid email
     """
     invalid_email = "not an email"
     with pytest.raises(AssertionError):
         gc.get_geocoder(invalid_email)