findClips: look up entity names (fixes #2804)

This commit is contained in:
Will Thompson 2016-04-19 10:15:56 +01:00
parent d0129a4416
commit 3f5be0bd27
No known key found for this signature in database
GPG key ID: 3422DC0D7AD482A7

View file

@ -3,12 +3,13 @@
from __future__ import division from __future__ import division
from django.conf import settings from django.conf import settings
from ox.utils import json import ox
from oxdjango.shortcuts import render_to_json_response, json_response from oxdjango.shortcuts import render_to_json_response, json_response
from oxdjango.api import actions from oxdjango.api import actions
from annotation.models import Annotation from annotation.models import Annotation
from entity.models import Entity
from item.models import Item from item.models import Item
from item import utils from item import utils
from changelog.models import add_changelog from changelog.models import add_changelog
@ -98,6 +99,7 @@ def findClips(request, data):
qs = qs.select_related('item') qs = qs.select_related('item')
layers = settings.CONFIG['layers'] layers = settings.CONFIG['layers']
entity_layer_ids = [k['id'] for k in layers if k['type'] == 'entity']
subtitles = utils.get_by_key(layers, 'isSubtitles', True) subtitles = utils.get_by_key(layers, 'isSubtitles', True)
layer_ids = [k['id'] for k in layers] layer_ids = [k['id'] for k in layers]
keys = filter(lambda k: k not in layer_ids + ['annotations'], data['keys']) keys = filter(lambda k: k not in layer_ids + ['annotations'], data['keys'])
@ -114,14 +116,14 @@ def findClips(request, data):
keys = data['keys'] keys = data['keys']
def add_annotations(key, qs, add_layer=False): def add_annotations(key, qs, add_layer=False):
values = ['public_id', 'value', 'clip_id'] values = ['public_id', 'layer', 'value', 'clip_id']
if subtitles or add_layer:
values.append('layer')
if query['filter']: if query['filter']:
qs = qs.filter(query['filter']) qs = qs.filter(query['filter'])
for i in response['data']['items']: for i in response['data']['items']:
if not key in i: if not key in i:
i[key] = [] i[key] = []
entity_annotations = {}
for a in qs.values(*values): for a in qs.values(*values):
i = clips[a['clip_id']] i = clips[a['clip_id']]
l = { l = {
@ -134,6 +136,15 @@ def findClips(request, data):
l['layer'] = a['layer'] l['layer'] = a['layer']
i[key].append(l) i[key].append(l)
if a['layer'] in entity_layer_ids:
entity_annotations.setdefault(l['value'], []).append(l)
if entity_annotations:
ids = map(ox.fromAZ, entity_annotations)
for e in Entity.objects.filter(id__in=ids).only('name'):
for l in entity_annotations[e.get_id()]:
l['value'] = e.annotation_value()
if response['data']['items']: if response['data']['items']:
if 'annotations' in keys: if 'annotations' in keys:
aqs = Annotation.objects.filter(layer__in=settings.CONFIG['clipLayers'], aqs = Annotation.objects.filter(layer__in=settings.CONFIG['clipLayers'],