Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# (c) 2018-2020
2# MPIB <https://www.mpib-berlin.mpg.de/>,
3# MPI-CBS <https://www.cbs.mpg.de/>,
4# MPIP <http://www.psych.mpg.de/>
5#
6# This file is part of Castellum.
7#
8# Castellum is free software; you can redistribute it and/or modify it
9# under the terms of the GNU Affero General Public License as published
10# by the Free Software Foundation; either version 3 of the License, or
11# (at your option) any later version.
12#
13# Castellum is distributed in the hope that it will be useful, but
14# WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16# Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public
19# License along with Castellum. If not, see
20# <http://www.gnu.org/licenses/>.
22from django.conf import settings
23from django.contrib.gis.geos import Point
25from . import geocode
28def invalidate_geolocation(address, update=False):
29 from .models import Geolocation
31 # The geocoding might fail, so we should delete the outdated
32 # data in any case.
33 Geolocation.objects.filter(contact=address.contact).delete()
35 if update and hasattr(settings, 'NOMINATIM'): 35 ↛ 36line 35 didn't jump to line 36, because the condition on line 35 was never true
36 geocoded = geocode.geocode_address(address)
37 if geocoded:
38 Geolocation.objects.create(
39 contact_id=address.contact_id,
40 point=Point(geocoded.longitude, geocoded.latitude),
41 )
44def delete_geolocation_on_address_change(sender, instance=None, **kwargs):
45 from castellum.contacts.models import Address
47 if sender is Address:
48 invalidate_geolocation(instance)
51def geocode_on_address_change(sender, instance=None, **kwargs):
52 from castellum.contacts.models import Address
54 if sender is Address:
55 invalidate_geolocation(instance, update=True)