- register based api registration

- move review whitelist into config
This commit is contained in:
j 2010-12-22 13:15:37 +05:30
commit 7ca86a952e
16 changed files with 245 additions and 177 deletions

View file

@ -76,7 +76,6 @@ def parseCondition(condition):
q = Q(**{k:v})
return q
else: #number or date
#FIXME: this part needs to be moved to use key/value find db
def parseDate(d):
while len(d) < 3:
d.append(1)

View file

@ -267,12 +267,11 @@ class Item(models.Model):
def reviews(self):
reviews = self.get('reviews', [])
whitelist = [w for w in ReviewWhitelist.objects.all()]
_reviews = {}
for r in reviews:
for w in whitelist:
if w.url in r[0]:
_reviews[w.title] = r[0]
for url in settings.REVIEW_WHITELIST:
if url in r[0]:
_reviews[settings.REVIEW_WHITELIST[url]] = r[0]
return _reviews
def update_imdb(self):
@ -338,6 +337,7 @@ class Item(models.Model):
'''
JSON cache related functions
'''
#FIXME: this should not be used
_public_fields = {
'itemId': 'id',
'title': 'title',
@ -767,6 +767,7 @@ class ItemFind(models.Model):
key = models.CharField(max_length=200, db_index=True)
value = models.TextField(blank=True)
#FIXME: make sort based on site.json
class ItemSort(models.Model):
"""
used to sort items, all sort values are in here
@ -849,22 +850,6 @@ class Facet(models.Model):
self.value_sort = self.value
super(Facet, self).save(*args, **kwargs)
class ReviewWhitelist(models.Model):
name = models.CharField(max_length=255, unique=True)
url = models.CharField(max_length=255, unique=True)
class Collection(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
users = models.ManyToManyField(User, related_name='collections')
name = models.CharField(blank=True, max_length=2048)
subdomain = models.CharField(unique=True, max_length=2048)
items = models.ForeignKey(Item)
def editable(self, user):
return self.users.filter(id=user.id).count() > 0
class Stream(models.Model):
class Meta:
unique_together = ("item", "profile")
@ -876,8 +861,8 @@ class Stream(models.Model):
available = models.BooleanField(default=False)
info = fields.DictField(default={})
#def __unicode__(self):
# return self.video
def __unicode__(self):
return u"%s/%s" % (self.item, self.profile)
def path(self):
return self.item.path(self.profile)
@ -922,9 +907,6 @@ class Stream(models.Model):
self.available=True
self.save()
def __unicode__(self):
return u"%s (%s)" % (self.profile, self.item)
def save(self, *args, **kwargs):
if self.video and not self.info:
self.info = ox.avinfo(self.video.path)

View file

@ -27,7 +27,7 @@ def find_item(fileId):
f = models.File.objects.get(pk=fileId)
f.find_item()
@task(ignore_resulsts=True, queue="encoding")
@task(queue="encoding")
def update_streams(itemId):
'''
create stream, extract timeline and create derivatives
@ -35,5 +35,4 @@ def update_streams(itemId):
item = models.Item.objects.get(itemId=itemId)
if item.files.filter(is_main=True, is_video=True, available=False).count() == 0:
item.update_streams()
return True

View file

@ -33,6 +33,7 @@ from user.models import get_user_json
from archive.models import File
from archive import extract
from api.actions import actions
def _order_query(qs, sort, prefix='sort__'):
order_by = []
@ -74,7 +75,7 @@ def _get_positions(ids, get_ids):
pass
return positions
def api_find(request):
def find(request):
'''
param data
{'query': query, 'sort': array, 'range': array}
@ -209,7 +210,10 @@ Positions
response['data']['size'] = r['size__sum']
return render_to_json_response(response)
def api_getItem(request):
actions.register(find)
def getItem(request):
'''
param data
string id
@ -225,9 +229,10 @@ def api_getItem(request):
info['layers'] = item.get_layers()
response['data'] = {'item': info}
return render_to_json_response(response)
actions.register(getItem)
@login_required_json
def api_editItem(request):
def editItem(request):
'''
param data
{id: string, key: value,..}
@ -242,9 +247,10 @@ def api_editItem(request):
else:
response = json_response(status=403, text='permissino denied')
return render_to_json_response(response)
actions.register(editItem)
@login_required_json
def api_removeItem(request):
def removeItem(request):
'''
param data
string id
@ -259,11 +265,12 @@ def api_removeItem(request):
else:
response = json_response(status=403, text='permission denied')
return render_to_json_response(response)
actions.register(removeItem)
'''
Poster API
'''
def api_parse(request): #parse path and return info
def parse(request): #parse path and return info
'''
param data
{path: string}
@ -273,9 +280,10 @@ def api_parse(request): #parse path and return info
path = json.loads(request.POST['data'])['path']
response = json_response(utils.parse_path(path))
return render_to_json_response(response)
actions.register(parse)
def api_setPosterFrame(request): #parse path and return info
def setPosterFrame(request): #parse path and return info
'''
param data
{id: itemId, position: float}
@ -292,8 +300,9 @@ def api_setPosterFrame(request): #parse path and return info
else:
response = json_response(status=403, text='permissino denied')
return render_to_json_response(response)
actions.register(setPosterFrame)
def api_setPoster(request): #parse path and return info
def setPoster(request): #parse path and return info
'''
param data
{id: itemId, url: string}
@ -317,8 +326,9 @@ def api_setPoster(request): #parse path and return info
else:
response = json_response(status=403, text='permission denied')
return render_to_json_response(response)
actions.register(setPoster)
def api_getImdbId(request):
def getImdbId(request):
'''
param data
{title: string, director: string, year: string}
@ -331,6 +341,7 @@ def api_getImdbId(request):
else:
response = json_response(status=404, text='not found')
return render_to_json_response(response)
actions.register(getImdbId)
'''
media delivery