From b56ef75088e17fa3555766e92a6747411ccd738c Mon Sep 17 00:00:00 2001 From: Chris Beaven Date: Thu, 9 Jun 2011 23:51:03 +0000 Subject: [PATCH] Fixes #13511 -- make regex parameter to RegexValidator to be optional. Also tidies up related docs (parameters aren't attributes). Thanks for the patch work, davidfischer. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16351 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/validators.py | 3 ++- docs/ref/validators.txt | 34 +++++++++++++++++----------- tests/modeltests/validators/tests.py | 5 ++++ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/django/core/validators.py b/django/core/validators.py index a40af0c8dd..74db11697b 100644 --- a/django/core/validators.py +++ b/django/core/validators.py @@ -29,8 +29,9 @@ class RegexValidator(object): if code is not None: self.code = code + # Compile the regex if it was not passed pre-compiled. if isinstance(self.regex, basestring): - self.regex = re.compile(regex) + self.regex = re.compile(self.regex) def __call__(self, value): """ diff --git a/docs/ref/validators.txt b/docs/ref/validators.txt index 472fd62a8c..0bb5abd819 100644 --- a/docs/ref/validators.txt +++ b/docs/ref/validators.txt @@ -60,26 +60,31 @@ to, or in lieu of custom ``field.clean()`` methods. ``RegexValidator`` ------------------ -.. class:: RegexValidator(regex, [message=None, code=None]) +.. class:: RegexValidator([regex=None, message=None, code=None]) + + :param regex: If not ``None``, overrides :attr:`regex`. Can be a regular + expression string or a pre-compiled regular expression. + :param message: If not ``None``, overrides :attr:`.message`. + :param code: If not ``None``, overrides :attr:`code`. .. attribute:: regex The regular expression pattern to search for the provided ``value``, or a pre-compiled regular expression. Raises a - :exc:`~django.core.exceptions.ValidationError` with :attr:`.message` - and :attr:`.code` if no match is found. + :exc:`~django.core.exceptions.ValidationError` with :attr:`message` + and :attr:`code` if no match is found. By default, matches any string + (including an empty string). .. attribute:: message - The error message used by :exc:`~django.core.exceptions.ValidationError` - if validation fails. If no :attr:`.message` is specified, a generic - ``"Enter a valid value"`` message is used. Default value: ``None``. + The error message used by + :exc:`~django.core.exceptions.ValidationError` if validation fails. + Defaults to ``"Enter a valid value"``. .. attribute:: code The error code used by :exc:`~django.core.exceptions.ValidationError` - if validation fails. If :attr:`.code` is not specified, ``"invalid"`` - is used. Default value: ``None``. + if validation fails. Defaults to ``"invalid"``. ``URLValidator`` ---------------- @@ -90,16 +95,19 @@ to, or in lieu of custom ``field.clean()`` methods. 404 status code). Raises an error code of ``'invalid'`` if it doesn't look like a URL, and a code of ``'invalid_link'`` if it doesn't exist. + :param verify_exists: Sets :attr:`verify_exists`. Defaults to ``False``. + :param validator_user_agent: Sets :attr:`validator_user_agent`. Defaults to + :setting:`URL_VALIDATOR_USER_AGENT` or, if that setting is set to a + null value, ``"Django (http://www.djangoproject.com/)"``. + .. attribute:: verify_exists - Default value: ``False``. If set to ``True``, this validator checks - that the URL actually exists. + If set to ``True``, this validator checks that the URL actually exists. .. attribute:: validator_user_agent - If :attr:`.verify_exists` is ``True``, Django uses the value of - :attr:`.validator_user_agent` as the "User-agent" for the request. This - defaults to :setting:`settings.URL_VALIDATOR_USER_AGENT `. + If :attr:`verify_exists` is ``True``, Django uses this value as the + "User-agent" for the request. ``validate_email`` ------------------ diff --git a/tests/modeltests/validators/tests.py b/tests/modeltests/validators/tests.py index e58526285b..08965c618f 100644 --- a/tests/modeltests/validators/tests.py +++ b/tests/modeltests/validators/tests.py @@ -112,6 +112,11 @@ TEST_DATA = ( (BaseValidator(True), True, None), (BaseValidator(True), False, ValidationError), + (RegexValidator(), '', None), + (RegexValidator(), 'x1x2', None), + (RegexValidator('[0-9]+'), 'xxxxxx', ValidationError), + (RegexValidator('[0-9]+'), '1234', None), + (RegexValidator(re.compile('[0-9]+')), '1234', None), (RegexValidator('.*'), '', None), (RegexValidator(re.compile('.*')), '', None), (RegexValidator('.*'), 'xxxxx', None),