From 557c0783195a3ee42272befeae86e24f4f6b702f Mon Sep 17 00:00:00 2001 From: j Date: Tue, 15 Nov 2016 14:46:11 +0200 Subject: [PATCH] fix findMedia by list --- pandora/archive/managers.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/pandora/archive/managers.py b/pandora/archive/managers.py index e2a4bb88..afe99abb 100644 --- a/pandora/archive/managers.py +++ b/pandora/archive/managers.py @@ -7,6 +7,7 @@ from oxdjango.managers import get_operator from oxdjango.query import QuerySet from oxdjango.fields import DictField + keymap = { 'id': 'item__public_id', 'filename': 'path', @@ -16,6 +17,9 @@ default_key = 'oshash' def parseCondition(condition, user): ''' ''' + from item.managers import parseConditions as itemParseConditions + from itemlist.models import List + from item.models import Item k = condition.get('key', default_key) k = keymap.get(k, k) if not k: @@ -34,6 +38,31 @@ def parseCondition(condition, user): elif k == 'url': key = 'info' + get_operator('=', 'istr') v = DictField.dumps({'url': v})[1:-1] + elif k == 'list': + q = Q(id=0) + l = v.split(":") + if len(l) == 1: + vqs = Volume.objects.filter(name=v, user=user) + if vqs.count() == 1: + v = vqs[0] + q = Q(files__instances__volume__id=v.id) + elif len(l) >= 2: + l = (l[0], ":".join(l[1:])) + lqs = list(List.objects.filter(name=l[1], user__username=l[0])) + if len(lqs) == 1 and lqs[0].accessible(user): + l = lqs[0] + if l.query.get('static', False) is False: + data = l.query + q = itemParseConditions(data.get('conditions', []), + data.get('operator', '&'), + user, l.user) + else: + q = Q(id__in=l.items.all()) + if exclude: + q = ~q + else: + q = Q(id=0) + return Q(item__in=Item.objects.filter(q)) else: key = k + get_operator(op, 'istr') key = str(key)