Ejemplo n.º 1
0
 def clean(self):
     if not self.place:
         geocode_result = Place.geocode_raw_address(self.raw_address)
         filtered_results = list(
             result for result in geocode_result if
             not set(result['types']).isdisjoint(
                 settings.GMAPS_ALLOWED_LOCATION_TYPES
             )
         )
         if len(filtered_results) == 0:
             raise ValidationError(
                 {
                     "raw_address": _(
                         "There are no results when geocoding '{raw_address}' with the "
                         "allowed types".format(raw_address=self.raw_address)
                     )
                 }
             )
         elif len(filtered_results) != 1:
             raise ValidationError(
                 {
                     "raw_address": _(
                         "There is more than one result when geocoding '{raw_address}' with the "
                         "allowed types, be more specific".format(raw_address=self.raw_address)
                     )
                 }
             )
         geocoded_place = filtered_results[0]
         google_place_id = geocoded_place['place_id']
         place, created = Place.objects.get_or_create_from_place_id(google_place_id)
         self.place = place
         self.formatted_address = self.place.formatted_address
Ejemplo n.º 2
0
    def get_or_create_from_raw_address(
            self,
            raw_address,
            allowed_types=settings.GMAPS_ALLOWED_LOCATION_TYPES,
            defaults=None,
            **kwargs):
        from places.models import Place

        geocode_result = Place.geocode_raw_address(raw_address)

        filtered_results = list(
            result for result in geocode_result
            if not set(result['types']).isdisjoint(allowed_types))
        if len(filtered_results) == 0:
            raise ValueError(
                _("There are no results when geocoding '{raw_address}' with the "
                  "allowed types '{types}'".format(
                      raw_address=raw_address,
                      types=", ".join(allowed_types))))
        geocoded_place = filtered_results[0]
        google_place_id = geocoded_place['place_id']
        defaults = Place.get_defaults_from_geocoded_place(
            geocoded_place, defaults)
        place, created = self.get_or_create(google_place_id=google_place_id,
                                            defaults=defaults,
                                            **kwargs)

        return (place, created)