fix findClips for layers no in clipLayers
This commit is contained in:
parent
5a971909d0
commit
16f1dbca93
3 changed files with 16 additions and 13 deletions
|
@ -7,7 +7,7 @@ from django.conf import settings
|
||||||
|
|
||||||
from ox.django.query import QuerySet
|
from ox.django.query import QuerySet
|
||||||
|
|
||||||
from item.utils import decode_id
|
from item.utils import decode_id, get_by_id
|
||||||
|
|
||||||
|
|
||||||
def parseCondition(condition, user):
|
def parseCondition(condition, user):
|
||||||
|
@ -38,7 +38,7 @@ def parseCondition(condition, user):
|
||||||
op = condition.get('operator')
|
op = condition.get('operator')
|
||||||
if not op:
|
if not op:
|
||||||
op = ''
|
op = ''
|
||||||
if k in settings.CONFIG.get('clipLayers', []):
|
if get_by_id(settings.CONFIG['layers'], k):
|
||||||
return parseCondition({'key': 'annotations__findvalue',
|
return parseCondition({'key': 'annotations__findvalue',
|
||||||
'value': v,
|
'value': v,
|
||||||
'operator': op}, user) \
|
'operator': op}, user) \
|
||||||
|
@ -144,7 +144,8 @@ class ClipManager(Manager):
|
||||||
return QuerySet(self.model)
|
return QuerySet(self.model)
|
||||||
|
|
||||||
def filter_annotations(self, data, user):
|
def filter_annotations(self, data, user):
|
||||||
keys = settings.CONFIG['clipLayers'] + ['annotations', 'text', '*']
|
layer_ids = [k['id'] for k in settings.CONFIG['layers']]
|
||||||
|
keys = layer_ids + ['annotations', 'text', '*']
|
||||||
conditions = data.get('query', {}).get('conditions', [])
|
conditions = data.get('query', {}).get('conditions', [])
|
||||||
conditions = filter(lambda c: c['key'] in keys, conditions)
|
conditions = filter(lambda c: c['key'] in keys, conditions)
|
||||||
operator = data.get('query', {}).get('operator', '&')
|
operator = data.get('query', {}).get('operator', '&')
|
||||||
|
@ -163,7 +164,7 @@ class ClipManager(Manager):
|
||||||
if isinstance(v, unicode):
|
if isinstance(v, unicode):
|
||||||
v = unicodedata.normalize('NFKD', v).lower()
|
v = unicodedata.normalize('NFKD', v).lower()
|
||||||
q = Q(**{key: v})
|
q = Q(**{key: v})
|
||||||
if condition['key'] in settings.CONFIG['clipLayers']:
|
if condition['key'] in layer_ids:
|
||||||
q = q & Q(layer=condition['key'])
|
q = q & Q(layer=condition['key'])
|
||||||
return q
|
return q
|
||||||
conditions = map(parse, conditions)
|
conditions = map(parse, conditions)
|
||||||
|
@ -208,7 +209,8 @@ class ClipManager(Manager):
|
||||||
if conditions:
|
if conditions:
|
||||||
qs = qs.filter(conditions)
|
qs = qs.filter(conditions)
|
||||||
if 'keys' in data:
|
if 'keys' in data:
|
||||||
for l in filter(lambda k: k in settings.CONFIG['clipLayers'], data['keys']):
|
layer_ids = [k['id'] for k in settings.CONFIG['layers']]
|
||||||
|
for l in filter(lambda k: k in layer_ids, data['keys']):
|
||||||
qs = qs.filter(**{l: True})
|
qs = qs.filter(**{l: True})
|
||||||
#anonymous can only see public clips
|
#anonymous can only see public clips
|
||||||
if not user or user.is_anonymous():
|
if not user or user.is_anonymous():
|
||||||
|
|
|
@ -49,7 +49,7 @@ class MetaClip:
|
||||||
else:
|
else:
|
||||||
self.sortvalue = None
|
self.sortvalue = None
|
||||||
self.findvalue = '\n'.join(filter(None, [a.findvalue for a in self.annotations.all()]))
|
self.findvalue = '\n'.join(filter(None, [a.findvalue for a in self.annotations.all()]))
|
||||||
for l in settings.CONFIG['clipLayers']:
|
for l in [k['id'] for k in settings.CONFIG['layers']]:
|
||||||
setattr(self, l, self.annotations.filter(layer=l).count()>0)
|
setattr(self, l, self.annotations.filter(layer=l).count()>0)
|
||||||
models.Model.save(self, *args, **kwargs)
|
models.Model.save(self, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -73,11 +73,11 @@ class MetaClip:
|
||||||
del j[key]
|
del j[key]
|
||||||
#needed here to make item find with clips work
|
#needed here to make item find with clips work
|
||||||
if 'annotations' in keys:
|
if 'annotations' in keys:
|
||||||
annotations = self.annotations.filter(layer__in=settings.CONFIG['clipLayers'])
|
#annotations = self.annotations.filter(layer__in=settings.CONFIG['clipLayers'])
|
||||||
|
annotations = self.annotations.all()
|
||||||
if qs:
|
if qs:
|
||||||
annotations = annotations.filter(qs)
|
annotations = annotations.filter(qs)
|
||||||
j['annotations'] = [a.json(keys=['value', 'id', 'layer'])
|
j['annotations'] = [a.json(keys=['value', 'id', 'layer']) for a in annotations]
|
||||||
for a in annotations]
|
|
||||||
if 'layers' in keys:
|
if 'layers' in keys:
|
||||||
j['layers'] = self.get_layers()
|
j['layers'] = self.get_layers()
|
||||||
if 'cuts' in keys:
|
if 'cuts' in keys:
|
||||||
|
@ -184,7 +184,7 @@ attrs = {
|
||||||
'sortvalue': models.CharField(max_length=1000, null=True, db_index=True),
|
'sortvalue': models.CharField(max_length=1000, null=True, db_index=True),
|
||||||
'findvalue': models.TextField(null=True, db_index=settings.DB_GIN_TRGM),
|
'findvalue': models.TextField(null=True, db_index=settings.DB_GIN_TRGM),
|
||||||
}
|
}
|
||||||
for name in settings.CONFIG['clipLayers']:
|
for name in [k['id'] for k in settings.CONFIG['layers']]:
|
||||||
attrs[name] = models.BooleanField(default=False, db_index=True)
|
attrs[name] = models.BooleanField(default=False, db_index=True)
|
||||||
|
|
||||||
Clip = type('Clip', (MetaClip,models.Model), attrs)
|
Clip = type('Clip', (MetaClip,models.Model), attrs)
|
||||||
|
|
|
@ -102,8 +102,8 @@ def findClips(request, data):
|
||||||
qs = qs[query['range'][0]:query['range'][1]]
|
qs = qs[query['range'][0]:query['range'][1]]
|
||||||
|
|
||||||
ids = []
|
ids = []
|
||||||
keys = filter(lambda k: k not in settings.CONFIG['clipLayers'] + ['annotations'],
|
layer_ids = [k['id'] for k in settings.CONFIG['layers']]
|
||||||
data['keys'])
|
keys = filter(lambda k: k not in layer_ids + ['annotations'], data['keys'])
|
||||||
if filter(lambda k: k not in models.Clip.clip_keys, keys):
|
if filter(lambda k: k not in models.Clip.clip_keys, keys):
|
||||||
qs = qs.select_related('sort')
|
qs = qs.select_related('sort')
|
||||||
|
|
||||||
|
@ -144,7 +144,8 @@ def findClips(request, data):
|
||||||
aqs = Annotation.objects.filter(layer__in=settings.CONFIG['clipLayers'],
|
aqs = Annotation.objects.filter(layer__in=settings.CONFIG['clipLayers'],
|
||||||
clip__in=ids)
|
clip__in=ids)
|
||||||
add_annotations('annotations',aqs , True)
|
add_annotations('annotations',aqs , True)
|
||||||
for layer in filter(lambda l: l in keys, settings.CONFIG['clipLayers']):
|
layer_ids = [k['id'] for k in settings.CONFIG['layers']]
|
||||||
|
for layer in filter(lambda l: l in keys, layer_ids):
|
||||||
aqs = Annotation.objects.filter(layer=layer, clip__in=ids)
|
aqs = Annotation.objects.filter(layer=layer, clip__in=ids)
|
||||||
add_annotations(layer, aqs)
|
add_annotations(layer, aqs)
|
||||||
elif 'position' in query:
|
elif 'position' in query:
|
||||||
|
|
Loading…
Reference in a new issue