Exemplo n.º 1
0
    def setUp(self):
        F = make_json(
            a=StringField(validators=[validators.DataRequired()]),
            b=StringField(),
        )
        self.F1 = make_json('F1', a=ObjectField(F))
        self.F2 = make_json('F2', a=ObjectField(F))

        make_inner = lambda: AttrDict(a='ddd')
        self.F3 = make_json('F3', a=ObjectField(F, default=make_inner))
Exemplo n.º 2
0
class ListFieldTest(TestCase):
    t = StringField(validators=[validators.DataRequired()])

    def test_json(self):
        F = make_json(a=ListField(self.t))
        data = ['foo', 'hi', 'rawr']
        a = F(a=data).a
        self.assertEqual(a.entries[1].data, 'hi')
        self.assertEqual(a.entries[1].name, 'a')
        self.assertEqual(a.data, data)
        self.assertEqual(len(a.entries), 3)

        pdata = {'a': ['bleh', 'yarg', '', 'mmm']}
        json = F(pdata)
        self.assertEqual(len(json.a.entries), 4)
        self.assertEqual(json.a.data, ['bleh', 'yarg', '', 'mmm'])
        self.assertFalse(json.validate())

        json = F(pdata, data)
        self.assertEqual(json.a.data, ['bleh', 'yarg', '', 'mmm'])
        self.assertFalse(json.validate())

        pdata = {'a': ['a', 'b']}
        json = F(pdata, a=data)
        self.assertEqual(len(json.a.entries), 2)
        self.assertEqual(json['a'].data, ['a', 'b'])
        self.assertEqual(list(iter(json.a)), list(json.a.entries))

        pdata = {'a': 'xx'}
        json = F(pdata)
        self.assertFalse(json.validate())

    def test_enclosed_subjson(self):
        make_inner = lambda: AttrDict(a=None)
        F = make_json(a=ListField(
            ObjectField(make_json('FChild', a=self.t), default=make_inner)))
        data = [{'a': 'hello'}]
        json = F(a=data)
        self.assertEqual(json.a.data, data)
        self.assertTrue(json.validate())
        json.a.append_entry()
        self.assertEqual(json.a.data, data + [{'a': None}])
        self.assertFalse(json.validate())

        pdata = {'a': [{'a': 'foo'}, {'a': 'bar'}]}
        json = F(pdata, a=data)
        self.assertEqual(json.a.data, [{'a': 'foo'}, {'a': 'bar'}])
        self.assertTrue(json.validate())

        # Test failure on populate
        obj2 = AttrDict(a=42)
        self.assertRaises(NotImplementedError, json.populate_obj, obj2)

    def test_entry_management(self):
        J = make_json(a=ListField(self.t))
        a = J(a=['hello', 'bye']).a
        self.assertEqual(a.pop_entry().name, 'a')
        self.assertEqual(a.data, ['hello'])
        a.append_entry('orange')
        self.assertEqual(a.data, ['hello', 'orange'])
        self.assertEqual(a[-1].name, 'a')
        self.assertEqual(a.pop_entry().data, 'orange')
        self.assertEqual(a.pop_entry().name, 'a')
        self.assertRaises(IndexError, a.pop_entry)

    def test_min_max_entries(self):
        J = make_json(a=ListField(self.t, min_entries=1, max_entries=3))
        a = J().a
        self.assertEqual(len(a), 1)
        self.assertEqual(a[0].data, None)
        big_input = ['foo', 'flaf', 'bar', 'baz']
        self.assertRaises(AssertionError, J, a=big_input)

    def test_validators(self):
        def validator(json, field):
            if field.data and field.data[0] == 'fail':
                raise ValueError('fail')
            elif len(field.data) > 2:
                raise ValueError('too many')

        J = make_json(a=ListField(self.t, validators=[validator]))

        jdata = {'a': ['hello', 'bye', 'test3']}
        json = J(jdata)
        assert not json.validate()
        self.assertEqual(json.a.errors, ['too many'])

        jdata['a'] = ['fail']
        json = J(jdata)
        assert not json.validate()
        self.assertEqual(json.a.errors, ['fail'])

        json = J({'a': ['']})
        assert not json.validate()
        self.assertEqual(json.a.errors, [['This field is required.']])

    def test_no_filters(self):
        my_filter = lambda x: x
        self.assertRaises(TypeError,
                          ListField,
                          self.t,
                          filters=[my_filter],
                          _json=Json(),
                          _name='foo')

    def test_process_prefilled(self):
        data = ['foo', 'hi', 'rawr']

        class A(object):
            def __init__(self, a):
                self.a = a

        obj = A(data)
        J = make_json(a=ListField(self.t))
        # fill json
        json = J(obj=obj)
        self.assertEqual(len(json.a.entries), 3)
        # pretend to submit form unchanged
        pdata = {'a': ['foo', 'hi', 'rawr']}
        json.process(jsondata=pdata)
        # check if data still the same
        self.assertEqual(len(json.a.entries), 3)
        self.assertEqual(json.a.data, data)
Exemplo n.º 3
0
 class A(Json):
     a = ObjectField(self.F1, validators=[validators.DataRequired()])
Exemplo n.º 4
0
 def setUp(self):
     t = StringField(validators=[validators.DataRequired()]).bind(
         Json(), 'a')
     self.flags = t.flags
Exemplo n.º 5
0
 class F2(jsons.Json):
     a = StringField(validators=[validators.DataRequired(), validators.Length(max=3)])
Exemplo n.º 6
0
 class F(jsons.Json):
     class Meta:
         locales = ['en_US', 'en']
     a = StringField(validators=[validators.DataRequired()])