Exemplo n.º 1
0
class FailingOutContractView(ApiView):
    spec = Spec(Method.GET, s.Query(result=s.Boolean()),
                Response(200, schema=s.Object(foo=s.String())))

    def handle(self, data):
        if data['result']:
            return {'foo': '1'}
Exemplo n.º 2
0
    def test_qs(self):
        schema = s.Query(string=s.String(),
                         number=s.Number(),
                         integer=s.Integer(),
                         boolean=s.Boolean(),
                         array=s.Array(s.String()))
        data = QueryDict(
            'string=foo&number=1.2&integer=1&boolean=&array=foo&array=bar')
        self.assertEqual(
            schema.qs_check_and_return(data), {
                'string': 'foo',
                'number': 1.2,
                'integer': 1,
                'boolean': False,
                'array': ['foo', 'bar']
            })

        data = QueryDict('string=foo&number=1.2&boolean=&array=foo&array=bar')
        with self.assertRaises(s.DataError) as ctx:
            schema.qs_check_and_return(data)
        self.assertEqual(ctx.exception.as_dict(),
                         [{
                             'path': ['integer'],
                             'error': "'None' is not of type 'integer'"
                         }])
Exemplo n.º 3
0
class ReturnStatusView(ApiView):
    spec = Spec(Method.GET, s.Query(result=s.String()), Response(204),
                Response(200, schema=s.Object(result=s.String())))

    def handle(self, data):
        if data['result'] == 'int':
            return 204
        elif data['result'] == 'fail':
            return 201
        return data
Exemplo n.º 4
0
class EmailConfirm(ApiView):
    '''
    Confirm user email
    '''
    spec = Spec(
        Method.GET,
        s.Query(
            id=s.Integer(),
            code=s.String(),
            next=s.Optional(s.String()),
        ),
        Response(301, description='redirect to the next page'),
    )

    def handle(self, data):
        code = data['code']
        user = User.objects.filter(pk=data['id']) \
            .exclude(email=None, new_email=None) \
            .filter(Q(email_confirm_code=code) | Q(new_email_confirm_code=code)) \
            .first()

        if user:
            if user.email_confirm_code == code:
                user.email_confirmed = True
                user.email_confirm_code = None
                user.is_active = True
                user.save(update_fields=[
                    'email_confirmed', 'email_confirm_code', 'is_active'
                ])

                signals.email_confirmed.send(User, user=user)

                login(self.request, user)
                signals.signup_completed.send(User, user=user)

            elif user.new_email_confirm_code == code:
                user.backend = 'django.contrib.auth.backends.ModelBackend'
                login(self.request, user)
                signals.signup_completed.send(User, user=user)

                if not User.objects.filter(email=user.new_email).exists():
                    user.email = user.new_email
                    user.new_email = None
                    user.new_email_confirm_code = None
                    user.email_confirmed = True
                    user.save(update_fields=[
                        'email', 'new_email', 'new_email_confirm_code',
                        'email_confirmed'
                    ])

        next = data['next'] or '/'

        return redirect(next)
Exemplo n.º 5
0
class UnknownResponseView(ApiView):
    spec = Spec(Method.GET, s.Query(status=s.Number()), Response(204))

    def handle(self, data):
        return data['status'], data
Exemplo n.º 6
0
class OutContractView(ApiView):
    spec = Spec(Method.GET, s.Query(foo=s.String()),
                Response(200, schema=s.Object(foo=s.String())))

    def handle(self, data):
        return data
Exemplo n.º 7
0
class InContractView(ApiView):
    spec = Spec(Method.GET, s.Query(foo=s.Number()), Response(204))

    def handle(self, data):
        return 204