feat: Use celery for location queries
This commit is contained in:
parent
39893c2185
commit
28331f105a
@ -134,6 +134,12 @@ class Location(models.Model):
|
||||
)
|
||||
return location
|
||||
|
||||
@staticmethod
|
||||
def add_location_to_object(instance):
|
||||
"""Search the location given in the location string and add it to the object"""
|
||||
location = Location.get_location_from_string(instance.location_string)
|
||||
instance.location = location
|
||||
instance.save()
|
||||
|
||||
class RescueOrganization(models.Model):
|
||||
def __str__(self):
|
||||
|
@ -1,6 +1,15 @@
|
||||
from notfellchen.celery import app as celery_app
|
||||
from .tools.admin import clean_locations
|
||||
from .models import Location, AdoptionNotice
|
||||
|
||||
|
||||
@celery_app.task(name="admin.clean_locations")
|
||||
def task_clean_locations():
|
||||
clean_locations()
|
||||
|
||||
|
||||
@celery_app.task(name="commit.add_location")
|
||||
def add_adoption_notice_location(pk):
|
||||
instance = AdoptionNotice.objects.get(pk=pk)
|
||||
Location.add_location_to_object(instance)
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
{% load custom_tags %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}<title>{{adoption_notice.name }}</title> %}
|
||||
{% block title %}<title>{{adoption_notice.name }}</title>{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="detail-adoption-notice-header">
|
||||
|
@ -7,7 +7,6 @@ from notfellchen import __version__ as nf_version
|
||||
from notfellchen import settings
|
||||
|
||||
|
||||
|
||||
def calculate_distance_between_coordinates(position1, position2):
|
||||
"""
|
||||
Calculate the distance between two points identified by coordinates
|
||||
@ -65,7 +64,8 @@ class GeoAPI:
|
||||
|
||||
def get_coordinates_from_query(self, location_string):
|
||||
try:
|
||||
result = self.requests.get(self.api_url, {"q": location_string, "format": "jsonv2"}, headers=self.headers).json()[0]
|
||||
result = \
|
||||
self.requests.get(self.api_url, {"q": location_string, "format": "jsonv2"}, headers=self.headers).json()[0]
|
||||
except IndexError:
|
||||
return None
|
||||
return result["lat"], result["lon"]
|
||||
@ -77,9 +77,9 @@ class GeoAPI:
|
||||
def get_geojson_for_query(self, location_string):
|
||||
try:
|
||||
result = self.requests.get(self.api_url,
|
||||
{"q": location_string,
|
||||
"format": "jsonv2"},
|
||||
headers=self.headers).json()
|
||||
{"q": location_string,
|
||||
"format": "jsonv2"},
|
||||
headers=self.headers).json()
|
||||
except Exception as e:
|
||||
logging.warning(f"Exception {e} when querying Nominatim")
|
||||
return None
|
||||
|
@ -22,6 +22,7 @@ from .models import Language, Announcement
|
||||
from .tools.geo import GeoAPI
|
||||
from .tools.metrics import gather_metrics_data
|
||||
from .tools.admin import clean_locations
|
||||
from .tasks import add_adoption_notice_location
|
||||
|
||||
|
||||
def user_is_trust_level_or_above(user, trust_level=User.MODERATOR):
|
||||
@ -188,11 +189,11 @@ def add_adoption_notice(request):
|
||||
if form.is_valid():
|
||||
instance = form.save(commit=False)
|
||||
instance.owner = request.user
|
||||
"""Search the location given in the location string and add it to the adoption notice"""
|
||||
location = Location.get_location_from_string(instance.location_string)
|
||||
instance.location = location
|
||||
instance.save()
|
||||
|
||||
"""Spin up a task that adds the location"""
|
||||
add_adoption_notice_location.delay_on_commit(instance.pk)
|
||||
|
||||
# Set correct status
|
||||
if request.user.trust_level >= User.TRUST_LEVEL[User.COORDINATOR]:
|
||||
major_status = AdoptionNoticeStatus.ACTIVE
|
||||
|
@ -1 +1,8 @@
|
||||
__version__ = "0.2.0"
|
||||
|
||||
# This will make sure the app is always imported when
|
||||
# Django starts so that shared_task will use this app.
|
||||
from .celery import app as celery_app
|
||||
|
||||
__all__ = ('celery_app',)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user