Skip to content

Commit 8dc4432

Browse files
authored
Make URL field enforce the "required" flag (#41)
1 parent 3f0263e commit 8dc4432

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

cleancat/base.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,6 @@ def __init__(self, require_tld=True, default_scheme=None,
258258
)
259259

260260
def clean(self, value):
261-
if value == self.blank_value:
262-
return value
263261
value = super(URL, self).clean(value)
264262
if not self.scheme_regex.match(value):
265263
value = self.default_scheme + value

tests/__init__.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,24 @@ class URLSchema(Schema):
376376
# Longest to date (Feb 2017) TLD in punicode format is 24 chars long
377377
self.assertValid(URLSchema({'url': u'http://test.xn--vermgensberatung-pwb'}), {'url': u'http://test.xn--vermgensberatung-pwb'})
378378

379+
def test_url_required_flag(self):
380+
class URLSchema(Schema):
381+
url = URL()
382+
383+
for value in (None, ''):
384+
schema = URLSchema({'url': value})
385+
self.assertInvalid(schema, {'field-errors': ['url']})
386+
assert schema.field_errors['url'] == 'This field is required.'
387+
388+
def test_url_bad_data_type(self):
389+
class URLSchema(Schema):
390+
url = URL()
391+
392+
schema = URLSchema({'url': 23.0})
393+
self.assertInvalid(schema, {'field-errors': ['url']})
394+
assert schema.field_errors['url'] == 'Value must be of basestring type.'
395+
396+
def test_url_with_default_schema(self):
379397
class DefaultURLSchema(Schema):
380398
url = URL(default_scheme='http://')
381399

@@ -385,6 +403,7 @@ class DefaultURLSchema(Schema):
385403
self.assertInvalid(DefaultURLSchema({'url': 'invalid'}), {'field-errors': ['url']})
386404
self.assertInvalid(DefaultURLSchema({'url': True}), {'field-errors': ['url']})
387405

406+
def test_relaxed_url(self):
388407
class RelaxedURLSchema(Schema):
389408
url = RelaxedURL(default_scheme='http://')
390409

@@ -398,6 +417,7 @@ class RelaxedURLSchema(Schema):
398417
self.assertInvalid(RelaxedURLSchema({'url': 'invalid'}), {'field-errors': ['url']})
399418
self.assertInvalid(RelaxedURLSchema({'url': True}), {'field-errors': ['url']})
400419

420+
def test_optional_relaxed_url(self):
401421
class OptionalRelaxedURLSchema(Schema):
402422
url = RelaxedURL(required=False, default_scheme='http://')
403423

@@ -408,6 +428,7 @@ class OptionalRelaxedURLSchema(Schema):
408428
self.assertInvalid(OptionalRelaxedURLSchema({'url': 'invalid'}), {'field-errors': ['url']})
409429
self.assertInvalid(OptionalRelaxedURLSchema({'url': True}), {'field-errors': ['url']})
410430

431+
def test_url_with_allowed_schemes(self):
411432
class OnlyHTTPSURLSchema(Schema):
412433
url = URL(default_scheme='https://', allowed_schemes=['https://'])
413434

0 commit comments

Comments
 (0)