forked from 0x2620/pandora
Merge remote-tracking branch 'wjt/get-layers-only-entity-name'
(fixes #2913)
This commit is contained in:
commit
34747c0fd7
2 changed files with 17 additions and 19 deletions
|
@ -98,7 +98,7 @@ class Annotation(models.Model):
|
||||||
value = models.TextField()
|
value = models.TextField()
|
||||||
findvalue = models.TextField(null=True)
|
findvalue = models.TextField(null=True)
|
||||||
sortvalue = models.CharField(max_length=1000, null=True, blank=True, db_index=True)
|
sortvalue = models.CharField(max_length=1000, null=True, blank=True, db_index=True)
|
||||||
|
|
||||||
languages = models.CharField(max_length=255, null=True, blank=True)
|
languages = models.CharField(max_length=255, null=True, blank=True)
|
||||||
|
|
||||||
def editable(self, user):
|
def editable(self, user):
|
||||||
|
@ -138,8 +138,7 @@ class Annotation(models.Model):
|
||||||
|
|
||||||
findvalue = self.value
|
findvalue = self.value
|
||||||
try:
|
try:
|
||||||
l = self.get_layer()
|
if layer['type'] == 'entity':
|
||||||
if l['type'] == 'entity':
|
|
||||||
findvalue = self.get_entity().name
|
findvalue = self.get_entity().name
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
@ -210,19 +209,15 @@ class Annotation(models.Model):
|
||||||
def _get_entity_json(self, user=None, entity_cache=None):
|
def _get_entity_json(self, user=None, entity_cache=None):
|
||||||
"""When serializing many annotations pointing to the same entity, it is expensive to
|
"""When serializing many annotations pointing to the same entity, it is expensive to
|
||||||
repeatedly look up and serialize the same entity.
|
repeatedly look up and serialize the same entity.
|
||||||
|
|
||||||
TODO: if Entity were a (nullable) foreign key of Annotation, we could just:
|
|
||||||
|
|
||||||
prefetch_related('entity', 'entity__user', 'entity__documents')
|
|
||||||
|
|
||||||
before serializing the annotations, which would make self.entity.json(user=user) cheap and
|
|
||||||
all this unnecessary.
|
|
||||||
"""
|
"""
|
||||||
|
from entity.models import Entity
|
||||||
|
|
||||||
if entity_cache is not None and self.value in entity_cache:
|
if entity_cache is not None and self.value in entity_cache:
|
||||||
return entity_cache[self.value]
|
return entity_cache[self.value]
|
||||||
|
|
||||||
entity = self.get_entity()
|
id = ox.fromAZ(self.value)
|
||||||
entity_json = entity.json(user=user)
|
entity = Entity.objects.filter(id=id).only('name').get()
|
||||||
|
entity_json = entity.json(keys=['id', 'name'])
|
||||||
value = entity.annotation_value()
|
value = entity.annotation_value()
|
||||||
|
|
||||||
if entity_cache is not None:
|
if entity_cache is not None:
|
||||||
|
@ -232,7 +227,7 @@ class Annotation(models.Model):
|
||||||
|
|
||||||
annotation_keys = (
|
annotation_keys = (
|
||||||
'id', 'in', 'out', 'value', 'created', 'modified',
|
'id', 'in', 'out', 'value', 'created', 'modified',
|
||||||
'duration', 'layer', 'item', 'videoRatio', 'languages',
|
'duration', 'layer', 'item', 'videoRatio', 'languages',
|
||||||
'entity', 'event', 'place'
|
'entity', 'event', 'place'
|
||||||
)
|
)
|
||||||
_clip_keys = ('hue', 'lightness', 'saturation', 'volume')
|
_clip_keys = ('hue', 'lightness', 'saturation', 'volume')
|
||||||
|
@ -295,10 +290,13 @@ class Annotation(models.Model):
|
||||||
value = getattr(self.item.sort, key)
|
value = getattr(self.item.sort, key)
|
||||||
if value != None:
|
if value != None:
|
||||||
j[key] = value
|
j[key] = value
|
||||||
subtitles = get_by_key(settings.CONFIG['layers'], 'isSubtitles', True)
|
|
||||||
if subtitles:
|
# Items without any real subtitles are given a dummy 5-second subtitle
|
||||||
if 'id' in j and self.layer == subtitles['id'] and not self.value:
|
# every minute to ensure that they have at least *some* clips. Treat
|
||||||
del j['id']
|
# them specially. See Item.add_empty_clips
|
||||||
|
if l.get('isSubtitles') and 'id' in j and not self.value:
|
||||||
|
del j['id']
|
||||||
|
|
||||||
return j
|
return j
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
|
|
@ -168,8 +168,8 @@ class Entity(models.Model):
|
||||||
elif key == 'sortName':
|
elif key == 'sortName':
|
||||||
response[key] = self.name_sort
|
response[key] = self.name_sort
|
||||||
elif key == 'documents':
|
elif key == 'documents':
|
||||||
response[key] = [ox.toAZ(d['id'])
|
response[key] = [ox.toAZ(id_)
|
||||||
for d in self.documents.all().values('id').order_by('documentproperties__index')]
|
for id_, in self.documentproperties.order_by('index').values_list('document_id')]
|
||||||
elif key in self.data:
|
elif key in self.data:
|
||||||
response[key] = self.data[key]
|
response[key] = self.data[key]
|
||||||
return response
|
return response
|
||||||
|
|
Loading…
Reference in a new issue