def setUp(self): super(TestCustomPropertiesField, self).setUp() test_validator_1 = mock.MagicMock(__call__=lambda: None) test_validator_2 = { 'expr': { 'validators': [django_validator.RegexValidator()] } } test_validator_3 = { 'expr': fields.RawProperty(None, None) } kwargs = { 'validators': [ test_validator_1, test_validator_2, test_validator_3 ] } for arg in fields.FIELD_ARGS_TO_ESCAPE: kwargs[arg] = 'foo_' + arg custom_props_field = fields.CustomPropertiesField(**kwargs) for arg in fields.FIELD_ARGS_TO_ESCAPE: self.assertTrue(hasattr(custom_props_field, arg)) self.assertEqual('foo_{0}'.format(arg), getattr(custom_props_field, arg)) self.assertEqual(3, len(custom_props_field.validators))
def parse_spec(spec, keys=None): if keys is None: keys = [] if not isinstance(keys, list): keys = [keys] key = keys and keys[-1] or None if isinstance(spec, yaql_expression.YaqlExpression): return key, fields.RawProperty(key, spec) elif isinstance(spec, dict): items = [] for k, v in six.iteritems(spec): k = helpers.decamelize(k) new_key, v = parse_spec(v, keys + [k]) if new_key: k = new_key items.append((k, v)) return key, dict(items) elif isinstance(spec, list): return key, [parse_spec(_spec, keys)[1] for _spec in spec] elif isinstance(spec, six.string_types) and helpers.is_localizable(keys): return key, spec else: if key == 'hidden': if spec: return 'widget', forms.HiddenInput else: return 'widget', None elif key == 'regexp_validator': return 'validators', [helpers.prepare_regexp(spec)] else: return key, spec
def test_finalize(self): class Control(object): def __init__(self): self.value = None @property def prop(self): return self.value @prop.setter def prop(self, value): self.value = value @prop.deleter def prop(self): delattr(self, 'value') mock_service = mock.Mock() mock_service.get_data.side_effect = ['foo_value'] raw_property = fields.RawProperty('prop', 'foo_spec') props = raw_property.finalize( 'foo_form_name', mock_service, Control) ctl = Control() result = props.fget(ctl) self.assertEqual('foo_value', result) props.fset(ctl, 'bar_value') self.assertEqual('bar_value', ctl.prop) props.fdel(ctl) self.assertNotIn('prop', ctl.__dict__)
def parse_spec(spec, keys=None): if keys is None: keys = [] if not isinstance(keys, types.ListType): keys = [keys] key = keys and keys[-1] or None if isinstance(spec, yaql_expression.YaqlExpression): return key, fields.RawProperty(key, spec) elif isinstance(spec, types.DictType): items = [] for k, v in spec.iteritems(): if not k in ('type', 'name'): k = helpers.decamelize(k) new_key, v = parse_spec(v, keys + [k]) if new_key: k = new_key items.append((k, v)) return key, dict(items) elif isinstance(spec, types.ListType): return key, [parse_spec(_spec, keys)[1] for _spec in spec] elif isinstance(spec, basestring) and helpers.is_localizable(keys): return key, _(spec) else: if key == 'type': return key, TYPES[spec] elif key == 'hidden' and spec is True: return 'widget', forms.HiddenInput elif key == 'regexp_validator': return 'validators', [helpers.prepare_regexp(spec)] else: return key, spec
def test_finalize_properties(self): finalize_properties = fields.CustomPropertiesField.finalize_properties kwargs = { 'foo_raw_property': fields.RawProperty('foo_key', 'foo_spec') } mock_service = mock.Mock() result = finalize_properties(kwargs, 'foo_form_name', mock_service) self.assertIsNotNone(result) result = finalize_properties({}, 'foo_form_name', mock_service) self.assertIsNotNone(result)