create undefined places/events

This commit is contained in:
j 2012-02-01 15:25:18 +00:00
commit 1f1683c5a5
7 changed files with 120 additions and 43 deletions

View file

@ -7,6 +7,8 @@ from django.db import models
from django.db.models import Q
from django.contrib.auth.models import User
from django.conf import settings
from django.db.models.signals import pre_delete
import ox
from archive import extract
@ -152,17 +154,23 @@ class Annotation(models.Model):
#update clip.findvalue
self.clip.save()
if filter(lambda l: l['type'] == 'place' or l.get('hasPlaces'),
settings.CONFIG['layers']):
#update_matching_places.delay(self.id)
#editAnnotations needs to be in snyc
#editAnnotations needs to be in snyc
if layer.get('type') == 'place' or layer.get('hasPlace'):
update_matching_places(self.id)
if filter(lambda l: l['type'] == 'event' or l.get('hasEvents'),
settings.CONFIG['layers']):
#update_matching_events.delay(self.id)
#editAnnotations needs to be in snyc
if layer.get('type') == 'event' or layer.get('hasEvents'):
update_matching_events(self.id)
def cleanup_undefined_relations(self):
layer = self.get_layer()
if layer.get('type') == 'place':
for p in self.places.filter(defined=False):
if p.annotations.exclude(id=self.id).count() == 0:
p.delete()
elif layer.get('type') == 'event':
for e in self.events.filter(defined=False):
if e.annotations.exclude(id=self.id).count() == 0:
e.delete()
def json(self, layer=False, keys=None, user=None):
j = {
'user': self.user.username,
@ -181,11 +189,11 @@ class Annotation(models.Model):
l = self.get_layer()
if l['type'] == 'place':
qs = self.places.all()
qs = self.places.filter(defined=True)
if qs.count() > 0:
j['place'] = qs[0].json(user=user)
elif l['type'] == 'event':
qs = self.events.all()
qs = self.events.filter(defined=True)
if qs.count() > 0:
j['event'] = qs[0].json(user=user)
@ -211,3 +219,6 @@ class Annotation(models.Model):
def __unicode__(self):
return u"%s %s-%s" %(self.public_id, self.start, self.end)
def cleanup_related(sender, **kwargs):
kwargs['instance'].cleanup_undefined_relations()
pre_delete.connect(cleanup_related, sender=Annotation)

View file

@ -9,6 +9,12 @@ import models
def update_matching_events(id):
from event.models import Event
annotation = models.Annotation.objects.get(pk=id)
for e in annotation.events.filter(defined=False):
if e.annotations.exclude(id=id).count() == 0:
e.delete()
if annotation.get_layer().get('type') == 'event' \
and annotation.events.count() == 0:
annotations.events.add(Event.get_or_create(annotation.value))
for e in annotation.events.all():
e.update_matches()
ids = [e['id'] for e in Event.objects.all().values('id')]
@ -23,6 +29,12 @@ def update_matching_events(id):
def update_matching_places(id):
from place.models import Place
annotation = models.Annotation.objects.get(pk=id)
for p in annotation.places.filter(defined=False):
if p.annotations.exclude(id=id).count() == 0:
p.delete()
if annotation.get_layer().get('type') == 'place' \
and annotation.places.count() == 0:
annotation.places.add(Place.get_or_create(annotation.value))
for p in annotation.places.all():
p.update_matches()
ids = [e['id'] for e in Place.objects.all().values('id')]