def to_python(self, value): if not value or isinstance(value, tuple): return value if isinstance(value, six.string_types): if validators.is_valid_point_string(value): if value.startswith('(') and value.endswith(')'): noparens = value[1:-1] else: noparens = value latitude, longitude = noparens.split(',') return (Decimal(latitude.strip()), Decimal(longitude.strip())) raise exceptions.ValidationError("This value must be a point-string.")
def clean(self, value): if not value or validators.is_valid_point_string(value): return super(PointField, self).clean(value) raise forms.ValidationError( "Invalid format. Point field format is '(x,y)'.")
def test_valid_point_string(self): point_string = "(2.3,4.5)" assert is_valid_point_string(point_string)
def test_valid_point_chars(self): point_string = "foo, bar" assert not is_valid_point_string(point_string)
def test_valid_point_no_comma(self): point_string = "(2.4)" assert not is_valid_point_string(point_string)
def test_valid_point_no_parens_and_space(self): point_string = "77.22134124, 543.3342" assert is_valid_point_string(point_string)
def test_valid_point_no_parens(self): point_string = "5.5,8.7" assert is_valid_point_string(point_string)
def test_valid_point_parens_and_sapce(self): point_string = "(9.888, 3.2222)" assert is_valid_point_string(point_string)
def _validate_position(cls, value): return is_valid_point_string(value) if value is not None else True
def clean(self, value): if not value or validators.is_valid_point_string(value): return super(PointField, self).clean(value) raise forms.ValidationError( "Invalid format. Point field format is '(x,y)'.")