class DeleteFollowingHandler(RetrieveOneFollowHandler): triggers = [ LoginRequired(), ] def _clean(self, request, *args, **kwargs): resource_id = kwargs['id'] try: resource = self.resource_model.objects.get(pk=resource_id) except self.resource_model.DoesNotExist: raise falcon.HTTPNotFound if not getattr(request.user, f'followed_{self.resource_name}s').filter( pk=resource.id).exists(): raise falcon.HTTPNotFound( title='404 not found', description=_('resource is not followed'), code='not_followed') return {'follower': request.user, 'resource': resource} def _data(self, request, cleaned, *args, **kwargs): following = self.database_model.objects.get( **{ 'follower': cleaned['follower'], self.resource_name: cleaned['resource'] }) connection.cursor().execute('SET myapp.userid = "{}"'.format( request.user.id)) following.delete() return super()._data(request, cleaned, *args, **kwargs)
class CreateFollowingHandler(RetrieveOneFollowHandler): triggers = [ LoginRequired(), ] def _clean(self, request, *args, **kwargs): resource_id = kwargs['id'] try: resource = self.resource_model.objects.get(pk=resource_id) except self.resource_model.DoesNotExist: raise falcon.HTTPNotFound if getattr(request.user, f'followed_{self.resource_name}s').filter( pk=resource.id).exists(): raise falcon.HTTPForbidden( title='403 Forbidden', description=_('resource already followed'), code='already_followed') return {'follower': request.user, 'resource': resource} def _data(self, request, cleaned, *args, **kwargs): following = self.database_model( **{ 'follower': cleaned['follower'], self.resource_name: cleaned['resource'] }) following.save() return super()._data(request, cleaned, *args, **kwargs)
class PUT(UpdateHandler): database_model = get_user_model() request_schema = AccountUpdate() response_serializer = UserSerializer(many=False, ) triggers = [ LoginRequired(), ]
class GET(RetrieveOneHandler): database_model = get_user_model() response_serializer = RegistrationSerializer(many=False, ) triggers = [ LoginRequired(), ] def _clean(self, request, *args, **kwargs): return request.user
class POST(CreateHandler): database_model = get_user_model() request_schema = PasswordChange() response_serializer = UserSerializer(many=False, ) triggers = [ LoginRequired(), ] def _data(self, request, cleaned, *args, **kwargs): request.user.set_password(cleaned['new_password1']) request.user.save() def _serialize(self, data, meta, links=None, *args, **kwargs): return {}
class POST(CreateHandler): database_model = get_user_model() triggers = [ LoginRequired(), ] def _clean(self, request, *args, **kwargs): return request.user def _data(self, request, cleaned, *args, **kwargs): logout(request) def _serialize(self, data, meta, links=None, *args, **kwargs): return {}
class FollowedListHandler(SearchHandler): triggers = [ LoginRequired(), ] def _queryset(self, cleaned, user_id, *args, **kwargs): queryset = super()._queryset(cleaned, *args, **kwargs) return queryset.filter('term', users_following=str(user_id)) def _data(self, request, cleaned, *args, **kwargs): queryset = self._queryset(cleaned, user_id=request.user.id, *args, **kwargs) return self._search(queryset, cleaned, *args, **kwargs)