Example #1
0
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)
Example #2
0
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)
Example #3
0
 class PUT(UpdateHandler):
     database_model = get_user_model()
     request_schema = AccountUpdate()
     response_serializer = UserSerializer(many=False, )
     triggers = [
         LoginRequired(),
     ]
Example #4
0
    class GET(RetrieveOneHandler):
        database_model = get_user_model()
        response_serializer = RegistrationSerializer(many=False, )
        triggers = [
            LoginRequired(),
        ]

        def _clean(self, request, *args, **kwargs):
            return request.user
Example #5
0
    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 {}
Example #6
0
    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 {}
Example #7
0
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)