mirror of
https://github.com/fergalmoran/dss.git
synced 2025-12-22 09:38:18 +00:00
109 lines
5.3 KiB
Python
109 lines
5.3 KiB
Python
from django.contrib.auth.models import User
|
|
from tastypie import fields
|
|
from tastypie.authentication import Authentication
|
|
from tastypie.authorization import DjangoAuthorization
|
|
from django.conf.urls import url
|
|
|
|
from spa.api.v1.BackboneCompatibleResource import BackboneCompatibleResource
|
|
from spa.models import UserProfile
|
|
|
|
|
|
class UserProfileResource(BackboneCompatibleResource):
|
|
class Meta:
|
|
queryset = UserProfile.objects.all()
|
|
resource_name = 'profile'
|
|
include_resource_uri = False
|
|
include_absolute_url = False
|
|
always_return_data = True
|
|
authorization = DjangoAuthorization()
|
|
authentication = Authentication()
|
|
|
|
def _hydrateBitmapOption(self, source, comparator):
|
|
return "checked" if (source & comparator) != 0 else ""
|
|
|
|
def hydrate(self, bundle):
|
|
if 'activity_sharing_likes' in bundle.data:
|
|
likes = UserProfile.ACTIVITY_SHARE_LIKES if bundle.data['activity_sharing_likes'] else 0
|
|
favourites = UserProfile.ACTIVITY_SHARE_FAVOURITES if bundle.data['activity_sharing_favourites'] else 0
|
|
comments = UserProfile.ACTIVITY_SHARE_COMMENTS if bundle.data['activity_sharing_comments'] else 0
|
|
bundle.data['activity_sharing'] = (likes | favourites | comments)
|
|
del bundle.data['activity_sharing_likes']
|
|
del bundle.data['activity_sharing_favourites']
|
|
del bundle.data['activity_sharing_comments']
|
|
|
|
if 'activity_sharing_networks_facebook' in bundle.data:
|
|
facebook = UserProfile.ACTIVITY_SHARE_NETWORK_FACEBOOK if bundle.data[
|
|
'activity_sharing_networks_facebook'] else 0
|
|
twitter = UserProfile.ACTIVITY_SHARE_NETWORK_TWITTER if bundle.data[
|
|
'activity_sharing_networks_twitter'] else 0
|
|
bundle.data['activity_sharing_networks'] = (facebook | twitter)
|
|
del bundle.data['activity_sharing_networks_facebook']
|
|
del bundle.data['activity_sharing_networks_twitter']
|
|
|
|
return bundle
|
|
|
|
def obj_update(self, bundle, skip_errors=False, **kwargs):
|
|
"""
|
|
This feels extremely hacky - but for some reason, deleting from the bundle
|
|
in hydrate is not preventing the fields from being serialized at the ORM
|
|
"""
|
|
if 'activity_sharing_networks_facebook' in kwargs: del kwargs['activity_sharing_networks_facebook']
|
|
if 'activity_sharing_networks_twitter' in kwargs: del kwargs['activity_sharing_networks_twitter']
|
|
if 'activity_sharing_likes' in kwargs: del kwargs['activity_sharing_likes']
|
|
if 'activity_sharing_favourites' in kwargs: del kwargs['activity_sharing_favourites']
|
|
if 'activity_sharing_comments' in kwargs: del kwargs['activity_sharing_comments']
|
|
|
|
return super(UserProfileResource, self).obj_update(bundle, skip_errors, **kwargs)
|
|
|
|
def dehydrate(self, bundle):
|
|
del bundle.data['activity_sharing']
|
|
del bundle.data['activity_sharing_networks']
|
|
bundle.data['display_name'] = bundle.obj.get_nice_name()
|
|
bundle.data['avatar_image'] = bundle.obj.get_avatar_image()
|
|
if bundle.obj.user.id == bundle.request.user.id:
|
|
bundle.data['activity_sharing_likes'] = \
|
|
self._hydrateBitmapOption(bundle.obj.activity_sharing, UserProfile.ACTIVITY_SHARE_LIKES)
|
|
bundle.data['activity_sharing_favourites'] = \
|
|
self._hydrateBitmapOption(bundle.obj.activity_sharing, UserProfile.ACTIVITY_SHARE_FAVOURITES)
|
|
bundle.data['activity_sharing_comments'] = \
|
|
self._hydrateBitmapOption(bundle.obj.activity_sharing, UserProfile.ACTIVITY_SHARE_COMMENTS)
|
|
|
|
bundle.data['activity_sharing_networks_facebook'] = \
|
|
self._hydrateBitmapOption(bundle.obj.activity_sharing_networks,
|
|
UserProfile.ACTIVITY_SHARE_NETWORK_FACEBOOK)
|
|
bundle.data['activity_sharing_networks_twitter'] = \
|
|
self._hydrateBitmapOption(bundle.obj.activity_sharing_networks,
|
|
UserProfile.ACTIVITY_SHARE_NETWORK_TWITTER)
|
|
|
|
bundle.data['mix_count'] = 4
|
|
bundle.data['follower_count'] = 4
|
|
bundle.data['following_count'] = 8
|
|
bundle.data['following'] = bundle.obj.is_follower(bundle.request.user)
|
|
return bundle
|
|
|
|
|
|
class UserResource(BackboneCompatibleResource):
|
|
profile = fields.ToOneField(UserProfileResource, attribute='userprofile', related_name='user', full=True)
|
|
|
|
class Meta:
|
|
queryset = User.objects.all()
|
|
resource_name = 'user'
|
|
excludes = ['is_active', 'is_staff', 'is_superuser', 'password']
|
|
authorization = DjangoAuthorization()
|
|
authentication = Authentication()
|
|
|
|
def prepend_urls(self):
|
|
return [
|
|
url(r"^(?P<resource_name>%s)/(?P<pk>\d+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'),
|
|
name="api_dispatch_detail"),
|
|
url(r"^(?P<resource_name>%s)/(?P<userprofile__slug>[\w\d_.-]+)/$" % self._meta.resource_name,
|
|
self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
|
|
]
|
|
|
|
def dehydrate(self, bundle):
|
|
if bundle.obj.id != bundle.request.user.id:
|
|
del bundle.data['email']
|
|
del bundle.data['username']
|
|
|
|
return bundle
|