basic annotation based clips view
This commit is contained in:
parent
215e2be746
commit
1a075b6cb0
6 changed files with 174 additions and 37 deletions
|
|
@ -101,7 +101,7 @@ class Annotation(models.Model):
|
|||
def get_id(self):
|
||||
return ox.to32(self.id)
|
||||
|
||||
def json(self, layer=False):
|
||||
def json(self, layer=False, keys=None):
|
||||
j = {
|
||||
'id': self.get_id(),
|
||||
'user': self.user.username,
|
||||
|
|
@ -113,6 +113,16 @@ class Annotation(models.Model):
|
|||
}
|
||||
if layer:
|
||||
j['layer'] = self.layer.name
|
||||
if keys:
|
||||
_j = {}
|
||||
for key in keys:
|
||||
if key in j:
|
||||
_j[key] = j[key]
|
||||
j = _j
|
||||
if 'aspectRatio' in keys:
|
||||
j['aspectRatio'] = self.item.stream_aspect
|
||||
if 'item' in keys:
|
||||
j['item'] = self.item.itemId
|
||||
return j
|
||||
|
||||
def __unicode__(self):
|
||||
|
|
|
|||
|
|
@ -12,13 +12,34 @@ from app.models import site_config
|
|||
from item.models import Item
|
||||
from api.actions import actions
|
||||
|
||||
from item import utils
|
||||
from item.models import Item
|
||||
|
||||
import models
|
||||
|
||||
|
||||
def parse_query(data, user):
|
||||
query = {}
|
||||
query['range'] = [0, 100]
|
||||
query['sort'] = [{'key':'in', 'operator':'+'}]
|
||||
for key in ('value', 'layer', 'in', 'out'):
|
||||
if key in data:
|
||||
query[key] = data[key]
|
||||
query['qs'] = models.Annotation.objects.all()
|
||||
if 'itemQuery' in data:
|
||||
item_query = Item.objects.find({'query': data['itemQuery']}, user)
|
||||
query['qs'] = query['qs'].filter(item__in=item_query)
|
||||
return query
|
||||
|
||||
def order_query(qs, sort):
|
||||
qs = qs.order_by('start')
|
||||
return qs
|
||||
|
||||
def findAnnotations(request):
|
||||
'''
|
||||
param data {
|
||||
fixme
|
||||
query: ...
|
||||
itemQuery: ...
|
||||
}
|
||||
|
||||
return {
|
||||
|
|
@ -28,11 +49,30 @@ def findAnnotations(request):
|
|||
}
|
||||
}
|
||||
'''
|
||||
#FIXME: implement findItem like queries
|
||||
data = json.loads(request.POST['data'])
|
||||
response = json_response(status=200, text='ok')
|
||||
qs = models.Annotations.objects.filter(item__itemId=data['item'])
|
||||
response['data']['annotations'] = [a.json() for a in qs]
|
||||
response = json_response()
|
||||
|
||||
query = parse_query(data, request.user)
|
||||
qs = order_query(query['qs'], query['sort'])
|
||||
if 'keys' in data:
|
||||
qs = qs[query['range'][0]:query['range'][1]]
|
||||
response['data']['items'] = [p.json(keys=data['keys']) for p in qs]
|
||||
elif 'position' in query:
|
||||
ids = [i.get_id() for i in qs]
|
||||
data['conditions'] = data['conditions'] + {
|
||||
'value': data['position'],
|
||||
'key': query['sort'][0]['key'],
|
||||
'operator': '^'
|
||||
}
|
||||
query = parse_query(data, request.user)
|
||||
qs = order_query(query['qs'], query['sort'])
|
||||
if qs.count() > 0:
|
||||
response['data']['position'] = utils.get_positions(ids, [qs[0].itemId])[0]
|
||||
elif 'positions' in data:
|
||||
ids = [i.get_id() for i in qs]
|
||||
response['data']['positions'] = utils.get_positions(ids, data['positions'])
|
||||
else:
|
||||
response['data']['items'] = qs.count()
|
||||
return render_to_json_response(response)
|
||||
actions.register(findAnnotations)
|
||||
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ def parse_query(data, user):
|
|||
query = {}
|
||||
query['range'] = [0, 100]
|
||||
query['sort'] = [{'key':'name', 'operator':'+'}]
|
||||
for key in ('keys', 'group', 'list', 'range', 'position', 'positions', 'sort', 'query'):
|
||||
for key in ('keys', 'group', 'list', 'range', 'sort', 'query'):
|
||||
if key in data:
|
||||
query[key] = data[key]
|
||||
query['qs'] = models.Place.objects.find(query, user)
|
||||
|
|
@ -231,7 +231,7 @@ Positions
|
|||
elif 'position' in query:
|
||||
ids = [i.get_id() for i in qs]
|
||||
data['conditions'] = data['conditions'] + {
|
||||
'value': query['position'],
|
||||
'value': data['position'],
|
||||
'key': query['sort'][0]['key'],
|
||||
'operator': '^'
|
||||
}
|
||||
|
|
@ -241,7 +241,7 @@ Positions
|
|||
response['data']['position'] = utils.get_positions(ids, [qs[0].itemId])[0]
|
||||
elif 'positions' in data:
|
||||
ids = [i.get_id() for i in qs]
|
||||
response['data']['positions'] = utils.get_positions(ids, query['positions'])
|
||||
response['data']['positions'] = utils.get_positions(ids, data['positions'])
|
||||
else:
|
||||
response['data']['items'] = qs.count()
|
||||
response['data']['area'] = qs.aggregate(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue