user_resource.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from tastypie import fields
  4. from tastypie.resources import ModelResource, ALL, ALL_WITH_RELATIONS
  5. from tastypie.authorization import Authorization
  6. from tastypie.exceptions import ImmediateHttpResponse
  7. from core.models.user import User
  8. from api.validations.user_validation import UserValidation
  9. from api.resources.group_resource import GroupResource
  10. '''
  11. '''
  12. class UserResource(ModelResource):
  13. groups = fields.ToManyField(GroupResource, 'groups')
  14. class Meta:
  15. queryset = User.objects.all()
  16. authorization = Authorization()
  17. always_return_data = True
  18. validation = UserValidation()
  19. '''
  20. '''
  21. def save(self, bundle, skip_errors=False):
  22. if bundle.via_uri:
  23. return bundle
  24. self.is_valid(bundle)
  25. if bundle.errors and not skip_errors:
  26. raise ImmediateHttpResponse(response=self.error_response(bundle.request, bundle.errors))
  27. user = User.objects.create_user(bundle.data['username'], bundle.data['email'], bundle.data['password'])
  28. bundle.obj = user
  29. bundle.data['groups'] = bundle.data.get('groups', [])
  30. if bundle.obj.pk:
  31. self.authorized_update_detail(self.get_object_list(bundle.request), bundle)
  32. else:
  33. self.authorized_create_detail(self.get_object_list(bundle.request), bundle)
  34. self.save_related(bundle)
  35. obj_id = self.create_identifier(bundle.obj)
  36. if obj_id not in bundle.objects_saved or bundle.obj._state.adding:
  37. bundle.obj.save()
  38. bundle.objects_saved.add(obj_id)
  39. m2m_bundle = self.hydrate_m2m(bundle)
  40. self.save_m2m(m2m_bundle)
  41. return bundle