mirror of
https://github.com/fergalmoran/dss.api.git
synced 2025-12-27 03:39:13 +00:00
82 lines
2.9 KiB
Python
Executable File
82 lines
2.9 KiB
Python
Executable File
from django.db.models import Count
|
|
from django.conf.urls import url
|
|
from tastypie.authentication import SessionAuthentication, Authentication
|
|
from tastypie.authorization import DjangoAuthorization, Authorization
|
|
from tastypie import fields
|
|
from tastypie.exceptions import ImmediateHttpResponse
|
|
from tastypie.http import HttpUnauthorized
|
|
from tastypie.utils import trailing_slash
|
|
from spa.api.v1.BaseResource import BaseResource
|
|
from spa.models import Playlist, Mix, UserProfile
|
|
|
|
|
|
class PlaylistResource(BaseResource):
|
|
user = fields.ToOneField('spa.api.v1.UserResource.UserResource', 'user')
|
|
mixes = fields.ManyToManyField('spa.api.v1.MixResource.MixResource', 'mixes', full=True, null=True)
|
|
|
|
class Meta:
|
|
queryset = Playlist.objects.all().annotate(mix_count=Count('mixes')).order_by('-mix_count')
|
|
always_return_data = True
|
|
|
|
excludes = ['public']
|
|
|
|
authentication = Authentication()
|
|
authorization = Authorization()
|
|
|
|
def authorized_read_list(self, object_list, bundle):
|
|
if bundle.request.user.is_authenticated():
|
|
return object_list.filter(user=bundle.request.user)
|
|
|
|
raise ImmediateHttpResponse(
|
|
HttpUnauthorized("Git tae fuck")
|
|
)
|
|
|
|
def prepend_urls(self):
|
|
return [
|
|
url(r"^(?P<resource_name>%s)/(?P<id>[\d]+)%s$" %
|
|
(self._meta.resource_name, trailing_slash()),
|
|
self.wrap_view('dispatch_detail'),
|
|
name="api_dispatch_detail"),
|
|
url(r"^(?P<resource_name>%s)/(?P<slug>[\w\d-]+)%s$" %
|
|
(self._meta.resource_name, trailing_slash()),
|
|
self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
|
|
]
|
|
|
|
def hydrate(self, bundle):
|
|
bundle.obj.user = bundle.request.user.get_profile()
|
|
return bundle
|
|
|
|
def dehydrate(self, bundle):
|
|
bundle.data['playlist_image'] = bundle.obj.get_image_url()
|
|
bundle.data['item_url'] = '/playlist/%s' % bundle.obj.slug
|
|
return bundle
|
|
|
|
def obj_update(self, bundle, skip_errors=False, **kwargs):
|
|
if 'playlist_image' in kwargs: del kwargs['playlist_image']
|
|
if 'item_url' in kwargs: del kwargs['item_url']
|
|
mixes = bundle.data['mixes']
|
|
bundle.data.pop('mixes')
|
|
result = super(PlaylistResource, self).obj_update(bundle, **kwargs)
|
|
if mixes:
|
|
for mix_item in mixes:
|
|
result.obj.mixes.add(Mix.objects.get(pk=mix_item['id']))
|
|
|
|
result.obj.save()
|
|
|
|
return result
|
|
|
|
def obj_create(self, bundle, **kwargs):
|
|
try:
|
|
mixes = bundle.data['mixes']
|
|
bundle.data.pop('mixes')
|
|
result = super(PlaylistResource, self).obj_create(bundle, **kwargs)
|
|
|
|
if mixes:
|
|
for mix_item in mixes:
|
|
result.obj.mixes.add(Mix.objects.get(pk=mix_item['id']))
|
|
|
|
result.obj.save()
|
|
|
|
return result
|
|
except Exception, ex:
|
|
print ex |