示例#1
0
 def pop(self, data):
     if self.name in data or self.default is not NoKeyDefault:
         yield self.get_name(), catch_error(self.trafaret,
                 data.pop(self.name, self.default))
         raise StopIteration
     if not self.optional:
         yield self.name, DataError(error='is required')
示例#2
0
 def check_(value):
     first, second = None, None
     if name in value:
         first = value[name]
     else:
         yield name, t.DataError('is required'), (name,)
     if confirm_name in value:
         second = value[confirm_name]
     else:
         yield confirm_name, t.DataError('is required'), (confirm_name,)
     if not (first and second):
         return
     yield name, t.catch_error(trafaret, first), (name,)
     yield confirm_name, t.catch_error(trafaret, second), (confirm_name,)
     if first != second:
         yield confirm_name, t.DataError(f'must be equal to {name}'), (confirm_name,)
async def register_user(request: web.Request) -> web.Response:
    """ Register user handler. Check if user already exist or create new user in database

    :param request: web request
    :return: web response in json format
    """
    json_data = await request.json()
    result = T.catch_error(REGISTER_TRAFARET, json_data)
    if isinstance(result, DataError):
        errors = result.as_dict()
        return json_response({'errors': errors}, status=400)

    async with request.app['db'].acquire() as connection:
        cursor = await connection.execute(
            users.select().where(users.c.email == json_data['email']))
        user_credentials = await cursor.fetchone()
        if user_credentials:
            return json_response({
                'message':
                'User with email {email} already exist'.format(
                    email=json_data['email'])
            })
        else:
            await connection.execute(users.insert().values(
                name=json_data['name'],
                last_name=json_data['last_name'],
                email=json_data['email'],
                password=generate_password_hash(json_data['password']),
            ))
            return json_response({
                'message':
                'User with email {email} register successfully'.format(
                    email=json_data['email'])
            })
示例#4
0
 def check_(value):
     first, second = None, None
     if name in value:
         first = value[name]
     else:
         yield name, t.DataError('is required'), (name,)
     if confirm_name in value:
         second = value[confirm_name]
     else:
         yield confirm_name, t.DataError('is required'), (confirm_name,)
     if not (first and second):
         return
     yield name, t.catch_error(trafaret, first), (name,)
     yield confirm_name, t.catch_error(trafaret, second), (confirm_name,)
     if first != second:
         yield confirm_name, t.DataError('must be equal to {}'.format(name)), (confirm_name,)
示例#5
0
    def test_regexp_raw_error(self):
        trafaret = t.RegexpRaw('cat')
        res = catch_error(trafaret, 'dog')
        assert res.as_dict(value=True) == 'does not match pattern cat, got \'dog\''

        res = extract_error(trafaret, None)
        assert res == 'value is not a string'
示例#6
0
    def test_xor_key(self):
        trafaret = t.Dict(xor_key('name', 'nick', t.String()))

        res = trafaret({'name': u'Nickolay'})
        assert res == {'name': u'Nickolay'}

        res = catch_error(trafaret, {'name': u'Nickolay', 'nick': u'Sveta'})
        assert res.as_dict() == {
            'name': 'correct only if nick is not defined',
            'nick': 'correct only if name is not defined',
        }
        res = catch_error(trafaret, {})
        assert res.as_dict() == {
            'name': 'is required if nick is not defined',
            'nick': 'is required if name is not defined',
        }
示例#7
0
 def transform(self, value, context=None):
     errors = []
     for trafaret in self.trafarets:
         res = t.catch_error(trafaret, value, context=context)
         if isinstance(res, t.DataError):
             errors.append(res)
         else:
             return value
     raise t.DataError(errors)
示例#8
0
 def check_(value):
     if (first in value) ^ (second in value):
         key = first if first in value else second
         yield first, t.catch_error(trafaret, value[key]), (key,)
     elif first in value and second in value:
         yield first, t.DataError(error='correct only if {} is not defined'.format(second)), (first,)
         yield second, t.DataError(error='correct only if {} is not defined'.format(first)), (second,)
     else:
         yield first, t.DataError(error='is required if {} is not defined'.format('second')), (first,)
         yield second, t.DataError(error='is required if {} is not defined'.format('first')), (second,)
示例#9
0
 def check_(value):
     if (first in value) ^ (second in value):
         key = first if first in value else second
         yield first, t.catch_error(trafaret, value[key]), (key,)
     elif first in value and second in value:
         yield first, t.DataError(error=f'correct only if {second} is not defined'), (first,)
         yield second, t.DataError(error=f'correct only if {first} is not defined'), (second,)
     else:
         yield first, t.DataError(error=f'is required if {second} is not defined'), (first,)
         yield second, t.DataError(error=f'is required if {first} is not defined'), (second,)
示例#10
0
    def test_confirm_key(self):
        trafaret = t.Dict(
            confirm_key('password', 'password_confirm', t.String()))

        res = trafaret({'password': u'qwerty', 'password_confirm': u'qwerty'})
        assert res == {'password': u'qwerty', 'password_confirm': u'qwerty'}

        res = catch_error(trafaret, {'password_confirm': u'qwerty'})
        assert res.as_dict() == {'password': '******'}

        res = catch_error(trafaret, {'password': u'qwerty'})
        assert res.as_dict() == {'password_confirm': 'is required'}

        res = catch_error(trafaret, {
            'password': u'qwerty',
            'password_confirm': u'not qwerty'
        })
        assert res.as_dict() == {
            'password_confirm': 'must be equal to password'
        }
示例#11
0
文件: keys.py 项目: dzw-gdd/untitled2
 def __call__(self, data):
     subdict = dict((k, data.get(k)) for k in self.keys if k in data)
     keys_names = self.keys
     res = t.catch_error(self.trafaret, subdict)
     if isinstance(res, t.DataError):
         for k, e in res.error.items():
             if not isinstance(e, t.DataError):
                 raise RuntimeError('Please use DataError instance')
             yield k, e, keys_names
     else:
         for k, v in res.items():
             yield k, v, keys_names
示例#12
0
文件: keys.py 项目: dzw-gdd/untitled2
 def check_(value):
     first, second = None, None
     if name in value:
         first = value[name]
         yield name, t.catch_error(trafaret, first), (name, )
     else:
         yield name, t.DataError('is required',
                                 code=codes.REQUIRED), (name, )
     if confirm_name in value:
         second = value[confirm_name]
         yield confirm_name, t.catch_error(trafaret,
                                           second), (confirm_name, )
     else:
         yield confirm_name, t.DataError(
             'is required', code=codes.REQUIRED), (confirm_name, )
     if not (first and second):
         return
     if first != second:
         yield (confirm_name,
                t.DataError('must be equal to {}'.format(name),
                            code=codes.MUST_BE_EQUAL), (confirm_name, ))
示例#13
0
    def test_subdict_sample(self):
        def check_passwords_equal(data):
            if data['password'] != data['password_confirm']:
                return t.DataError('Passwords are not equal',
                                   code='are_no_equal')
            return data['password']

        check_password = t.String()
        passwords_key = subdict(
            'password',
            t.Key('password', trafaret=check_password),
            t.Key('password_confirm', trafaret=check_password),
            trafaret=check_passwords_equal,
        )

        signup_trafaret = t.Dict(
            t.Key('email', trafaret=t.Email),
            passwords_key,
        )

        res = signup_trafaret({
            'email': u'*****@*****.**',
            'password': u'qwerty',
            'password_confirm': u'qwerty'
        })
        assert res == {'email': u'*****@*****.**', 'password': u'qwerty'}

        res = catch_error(
            signup_trafaret, {
                'email': u'*****@*****.**',
                'password': u'qwerty',
                'password_confirm': u'not qwerty'
            })
        assert res.as_dict() == {'password': '******'}

        res = catch_error(signup_trafaret, {
            'email': u'*****@*****.**',
            'password': u'qwerty'
        })
        assert res.as_dict() == {'password_confirm': 'is required'}
示例#14
0
async def login_user(request: web.Request) -> web.Response:
    """ Login user handler. Check if user exist in database and generate JWT token

    :param request: web request
    :return: web response in json format
    """
    jwt_config = request.app['config']['jwt_auth']
    json_data = await request.json()

    result = T.catch_error(LOGIN_TRAFARET, json_data)
    if isinstance(result, DataError):
        errors = result.as_dict()
        return json_response({'errors': errors}, status=400)

    async with request.app['db'].acquire() as connection:
        cursor = await connection.execute(
            users.select().where(users.c.email == json_data['email']))
        user_credentials = await cursor.fetchone()
        if not user_credentials:
            return json_response(
                {
                    'message':
                    'User with email {email} does not exist'.format(
                        email=json_data['email'])
                },
                status=403)
        else:
            id, email, password = user_credentials['id'], user_credentials[
                'email'], user_credentials['password']
            if check_password_hash(password, json_data['password']):
                payload = {
                    'user_id':
                    id,
                    'user_email':
                    email,
                    'exp':
                    datetime.datetime.utcnow() +
                    timedelta(seconds=jwt_config['jset_exp_delta_seconds'])
                }
                jwt_token = jwt.encode(payload, jwt_config['jwt_secret'],
                                       jwt_config['jwt_algorithm'])
                return json_response({'token': jwt_token.decode('utf-8')})
            else:
                return json_response({'message': 'Password is not correct'},
                                     status=401)
示例#15
0
 def check_(value):
     if (first in value) ^ (second in value):
         key = first if first in value else second
         yield first, t.catch_error(trafaret, value[key]), (key, )
     elif first in value and second in value:
         yield first, t.DataError(
             error='correct only if {} is not defined'.format(second)), (
                 first, )
         yield second, t.DataError(
             error='correct only if {} is not defined'.format(first)), (
                 second, )
     else:
         yield first, t.DataError(
             error='is required if {} is not defined'.format('second')), (
                 first, )
         yield second, t.DataError(
             error='is required if {} is not defined'.format('first')), (
                 second, )
示例#16
0
文件: keys.py 项目: dzw-gdd/untitled2
 def check_(value):
     if (first in value) ^ (second in value):
         key = first if first in value else second
         yield first, t.catch_error(trafaret, value[key]), (key, )
     elif first in value and second in value:
         yield (
             first,
             t.DataError(
                 error='correct only if {} is not defined'.format(second),
                 code=codes.ONLY_ONE_MUST_BE_DEFINED), (first, ))
         yield (second,
                t.DataError(
                    error='correct only if {} is not defined'.format(first),
                    code=codes.ONLY_ONE_MUST_BE_DEFINED), (second, ))
     else:
         yield (first,
                t.DataError(
                    error='is required if {} is not defined'.format(second),
                    code=codes.ONE_IS_REQUIRED), (first, ))
         yield (second,
                t.DataError(
                    error='is required if {} is not defined'.format(first),
                    code=codes.ONE_IS_REQUIRED), (second, ))
示例#17
0
 def test_regexp_raw_error(self):
     trafaret = t.RegexpRaw('cat')
     res = catch_error(trafaret, 'dog')
     self.assertEqual(res.as_dict(value=True),
                      'does not match pattern cat, got \'dog\'')
示例#18
0
 def transform(self, value, context=None):
     res = t.catch_error(self.trafaret, value, context=context)
     if not isinstance(res, t.DataError):
         raise t.DataError('Value must not be validated')
     return value
示例#19
0
 def test_regexp_raw_error(self):
     trafaret = t.RegexpRaw('cat')
     res = catch_error(trafaret, 'dog')
     self.assertEqual(res.as_dict(value=True), 'does not match pattern cat, got \'dog\'')
示例#20
0
    def test_on_error_data_error(self):
        trafaret = t.OnError(t.Bool, message='Changed message')

        res = catch_error(trafaret, 'Trololo')

        self.assertEqual(res.as_dict(), 'Changed message')
示例#21
0
    def test_on_error_data_error(self):
        trafaret = t.OnError(t.Bool, message='Changed message')

        res = catch_error(trafaret, 'Trololo')

        self.assertEqual(res.as_dict(), 'Changed message')