~ubuntu-branches/ubuntu/precise/python-django/precise-proposed

« back to all changes in this revision

Viewing changes to django/core/validators.py

  • Committer: Package Import Robot
  • Author(s): Andres Rodriguez, Julian Edwards
  • Date: 2012-11-20 16:00:41 UTC
  • Revision ID: package-import@ubuntu.com-20121120160041-140ztibl9h0omz79
Tags: 1.3.1-4ubuntu1.5
[ Julian Edwards ]
* debian/patches:
  - genericipaddressfield.diff: Backport GenericIPAddressField
    from 1.4 (LP: #1081391)
  - prefetch_related.diff: Backport prefetch_related from 1.4 (LP: #1081388)
  - bug15496-base64-multipart-fix.diff: Include fix for upstream bug #15496
    which makes 'Content-Transfer-Encoding: base64: work for multipart
    messages. (LP: #1081392)

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
from django.core.exceptions import ValidationError
7
7
from django.utils.translation import ugettext_lazy as _
8
8
from django.utils.encoding import smart_unicode
 
9
from django.utils.ipv6 import is_valid_ipv6_address
9
10
 
10
11
# These values, if given to validate(), will trigger the self.required check.
11
12
EMPTY_VALUES = (None, '', [], (), {})
160
161
comma_separated_int_list_re = re.compile('^[\d,]+$')
161
162
validate_comma_separated_integer_list = RegexValidator(comma_separated_int_list_re, _(u'Enter only digits separated by commas.'), 'invalid')
162
163
 
 
164
def validate_ipv6_address(value):
 
165
    if not is_valid_ipv6_address(value):
 
166
        raise ValidationError(_(u'Enter a valid IPv6 address.'), code='invalid')
 
167
 
 
168
def validate_ipv46_address(value):
 
169
    try:
 
170
        validate_ipv4_address(value)
 
171
    except ValidationError:
 
172
        try:
 
173
            validate_ipv6_address(value)
 
174
        except ValidationError:
 
175
            raise ValidationError(_(u'Enter a valid IPv4 or IPv6 address.'), code='invalid')
 
176
 
 
177
ip_address_validator_map = {
 
178
    'both': ([validate_ipv46_address], _('Enter a valid IPv4 or IPv6 address.')),
 
179
    'ipv4': ([validate_ipv4_address], _('Enter a valid IPv4 address.')),
 
180
    'ipv6': ([validate_ipv6_address], _('Enter a valid IPv6 address.')),
 
181
}
 
182
 
 
183
def ip_address_validators(protocol, unpack_ipv4):
 
184
    """
 
185
    Depending on the given parameters returns the appropriate validators for
 
186
    the GenericIPAddressField.
 
187
 
 
188
    This code is here, because it is exactly the same for the model and the form field.
 
189
    """
 
190
    if protocol != 'both' and unpack_ipv4:
 
191
        raise ValueError(
 
192
            "You can only use `unpack_ipv4` if `protocol` is set to 'both'")
 
193
    try:
 
194
        return ip_address_validator_map[protocol.lower()]
 
195
    except KeyError:
 
196
        raise ValueError("The protocol '%s' is unknown. Supported: %s"
 
197
                         % (protocol, ip_address_validator_map.keys()))
 
198
 
163
199
 
164
200
class BaseValidator(object):
165
201
    compare = lambda self, a, b: a is not b