forked from 0x2620/pandora
update place/event matches in sync
This commit is contained in:
parent
2ec0cfccb4
commit
c49cc47c3d
4 changed files with 24 additions and 13 deletions
|
@ -90,8 +90,13 @@ class Event(models.Model):
|
||||||
def update_matches(self):
|
def update_matches(self):
|
||||||
matches = self.get_matches()
|
matches = self.get_matches()
|
||||||
numberofmatches = matches.count()
|
numberofmatches = matches.count()
|
||||||
for i in self.annotations.exclude(id__in=matches):
|
for a in self.annotations.exclude(id__in=matches):
|
||||||
self.annotations.remove(i)
|
self.annotations.remove(a)
|
||||||
|
#annotations of type event always need an event
|
||||||
|
if a.get_layer().get('type') == 'event' and a.events.count() == 0:
|
||||||
|
a.events.add(Event.get_or_create(a.value))
|
||||||
|
for e in a.events.all():
|
||||||
|
e.update_matches()
|
||||||
for i in matches.exclude(id__in=self.annotations.all()):
|
for i in matches.exclude(id__in=self.annotations.all()):
|
||||||
#need to check again since editEvent might have been called again
|
#need to check again since editEvent might have been called again
|
||||||
if self.annotations.filter(id=i.id).count() == 0:
|
if self.annotations.filter(id=i.id).count() == 0:
|
||||||
|
@ -103,10 +108,10 @@ class Event(models.Model):
|
||||||
if self.items.filter(id=i.id).count() == 0:
|
if self.items.filter(id=i.id).count() == 0:
|
||||||
self.items.add(i)
|
self.items.add(i)
|
||||||
if self.matches != numberofmatches:
|
if self.matches != numberofmatches:
|
||||||
|
self.matches = numberofmatches
|
||||||
if numberofmatches:
|
if numberofmatches:
|
||||||
Event.objects.filter(id=self.id).update(matches=numberofmatches)
|
Event.objects.filter(id=self.id).update(matches=numberofmatches)
|
||||||
else:
|
else:
|
||||||
self.matches = numberofmatches
|
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def set_name_sort(self, value=None):
|
def set_name_sort(self, value=None):
|
||||||
|
@ -123,7 +128,7 @@ class Event(models.Model):
|
||||||
self.set_name_sort()
|
self.set_name_sort()
|
||||||
self.name_find = '||' + self.name + '||'.join(self.alternativeNames) + '||'
|
self.name_find = '||' + self.name + '||'.join(self.alternativeNames) + '||'
|
||||||
self.defined = len(filter(None, [getattr(self, key)
|
self.defined = len(filter(None, [getattr(self, key)
|
||||||
for key in ('start', 'end', 'startTime', 'endTime')])) > 0
|
for key in ('start', 'end')])) > 0
|
||||||
if self.endTime and self.startTime:
|
if self.endTime and self.startTime:
|
||||||
self.durationTime = self.endTime - self.startTime
|
self.durationTime = self.endTime - self.startTime
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ from ox.django.api import actions
|
||||||
from item import utils
|
from item import utils
|
||||||
|
|
||||||
import models
|
import models
|
||||||
import tasks
|
|
||||||
|
|
||||||
@login_required_json
|
@login_required_json
|
||||||
def addEvent(request):
|
def addEvent(request):
|
||||||
|
@ -48,8 +47,9 @@ def addEvent(request):
|
||||||
setattr(event, key, value)
|
setattr(event, key, value)
|
||||||
if 'nameSort' in data:
|
if 'nameSort' in data:
|
||||||
event.set_name_sort(data['nameSort'])
|
event.set_name_sort(data['nameSort'])
|
||||||
|
event.matches = 0
|
||||||
event.save()
|
event.save()
|
||||||
tasks.update_matches.delay(event.id)
|
event.update_matches.()
|
||||||
response = json_response(status=200, text='created')
|
response = json_response(status=200, text='created')
|
||||||
response['data'] = event.json()
|
response['data'] = event.json()
|
||||||
else:
|
else:
|
||||||
|
@ -96,7 +96,7 @@ def editEvent(request):
|
||||||
event.set_name_sort(data['nameSort'])
|
event.set_name_sort(data['nameSort'])
|
||||||
event.save()
|
event.save()
|
||||||
if 'name' in data or 'alternativeNames' in data:
|
if 'name' in data or 'alternativeNames' in data:
|
||||||
tasks.update_matches.delay(event.id)
|
event.update_matches()
|
||||||
response = json_response(status=200, text='updated')
|
response = json_response(status=200, text='updated')
|
||||||
response['data'] = event.json()
|
response['data'] = event.json()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -13,6 +13,7 @@ from ox.django import fields
|
||||||
|
|
||||||
import managers
|
import managers
|
||||||
from annotation.models import Annotation, get_matches
|
from annotation.models import Annotation, get_matches
|
||||||
|
from annotation.tasks import update_matching_places
|
||||||
from item.models import Item
|
from item.models import Item
|
||||||
from changelog.models import Changelog
|
from changelog.models import Changelog
|
||||||
|
|
||||||
|
@ -102,8 +103,13 @@ class Place(models.Model):
|
||||||
def update_matches(self):
|
def update_matches(self):
|
||||||
matches = self.get_matches()
|
matches = self.get_matches()
|
||||||
numberofmatches = matches.count()
|
numberofmatches = matches.count()
|
||||||
for i in self.annotations.exclude(id__in=matches):
|
for a in self.annotations.exclude(id__in=matches):
|
||||||
self.annotations.remove(i)
|
self.annotations.remove(a)
|
||||||
|
#annotations of type place always need a place
|
||||||
|
if a.get_layer().get('type') == 'place' and a.places.count() == 0:
|
||||||
|
a.places.add(Place.get_or_create(a.value))
|
||||||
|
for p in a.places.all():
|
||||||
|
p.update_matches()
|
||||||
for i in matches.exclude(id__in=self.annotations.all()):
|
for i in matches.exclude(id__in=self.annotations.all()):
|
||||||
#need to check again since editEvent might have been called again
|
#need to check again since editEvent might have been called again
|
||||||
if self.annotations.filter(id=i.id).count() == 0:
|
if self.annotations.filter(id=i.id).count() == 0:
|
||||||
|
@ -115,10 +121,10 @@ class Place(models.Model):
|
||||||
if self.items.filter(id=i.id).count() == 0:
|
if self.items.filter(id=i.id).count() == 0:
|
||||||
self.items.add(i)
|
self.items.add(i)
|
||||||
if self.matches != numberofmatches:
|
if self.matches != numberofmatches:
|
||||||
|
self.matches = numberofmatches
|
||||||
if numberofmatches:
|
if numberofmatches:
|
||||||
Place.objects.filter(id=self.id).update(matches=numberofmatches)
|
Place.objects.filter(id=self.id).update(matches=numberofmatches)
|
||||||
else:
|
else:
|
||||||
self.matches = numberofmatches
|
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def make_undefined(self):
|
def make_undefined(self):
|
||||||
|
|
|
@ -15,7 +15,6 @@ from ox.django.api import actions
|
||||||
from item import utils
|
from item import utils
|
||||||
|
|
||||||
import models
|
import models
|
||||||
import tasks
|
|
||||||
|
|
||||||
@login_required_json
|
@login_required_json
|
||||||
def addPlace(request):
|
def addPlace(request):
|
||||||
|
@ -64,8 +63,9 @@ def addPlace(request):
|
||||||
if isinstance(value, list):
|
if isinstance(value, list):
|
||||||
value = tuple(value)
|
value = tuple(value)
|
||||||
setattr(place, key, value)
|
setattr(place, key, value)
|
||||||
|
place.matches = 0
|
||||||
place.save()
|
place.save()
|
||||||
tasks.update_matches.delay(place.id)
|
place.update_matches()
|
||||||
response = json_response(place.json())
|
response = json_response(place.json())
|
||||||
else:
|
else:
|
||||||
response = json_response(status=409,
|
response = json_response(status=409,
|
||||||
|
@ -122,7 +122,7 @@ def editPlace(request):
|
||||||
setattr(place, key, value)
|
setattr(place, key, value)
|
||||||
place.save()
|
place.save()
|
||||||
if 'name' in data or 'alternativeNames' in data:
|
if 'name' in data or 'alternativeNames' in data:
|
||||||
tasks.update_matches.delay(place.id)
|
place.update_matches()
|
||||||
response = json_response(place.json())
|
response = json_response(place.json())
|
||||||
else:
|
else:
|
||||||
response = json_response(status=409,
|
response = json_response(status=409,
|
||||||
|
|
Loading…
Reference in a new issue