~lutostag/ubuntu/trusty/maas/1.5.4+keystone

« back to all changes in this revision

Viewing changes to src/maasserver/dj14/validators.py

  • Committer: Package Import Robot
  • Author(s): Andres Rodriguez
  • Date: 2013-03-04 11:49:44 UTC
  • mto: This revision was merged to the branch mainline in revision 25.
  • Revision ID: package-import@ubuntu.com-20130304114944-azcvu9anlf8mizpa
Tags: upstream-1.3+bzr1452+dfsg
ImportĀ upstreamĀ versionĀ 1.3+bzr1452+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# flake8: noqa
2
 
# Extract of Django 1.4's core/validators.py file with modified imports.
3
 
import re
4
 
 
5
 
from django.core.exceptions import ValidationError
6
 
from django.core.validators import RegexValidator
7
 
from django.utils.translation import ugettext_lazy as _
8
 
from maasserver.dj14.ipv6 import is_valid_ipv6_address
9
 
 
10
 
 
11
 
ipv4_re = re.compile(r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$')
12
 
validate_ipv4_address = RegexValidator(ipv4_re, _(u'Enter a valid IPv4 address.'), 'invalid')
13
 
 
14
 
def validate_ipv6_address(value):
15
 
    if not is_valid_ipv6_address(value):
16
 
        raise ValidationError(_(u'Enter a valid IPv6 address.'), code='invalid')
17
 
 
18
 
def validate_ipv46_address(value):
19
 
    try:
20
 
        validate_ipv4_address(value)
21
 
    except ValidationError:
22
 
        try:
23
 
            validate_ipv6_address(value)
24
 
        except ValidationError:
25
 
            raise ValidationError(_(u'Enter a valid IPv4 or IPv6 address.'), code='invalid')
26
 
 
27
 
ip_address_validator_map = {
28
 
    'both': ([validate_ipv46_address], _('Enter a valid IPv4 or IPv6 address.')),
29
 
    'ipv4': ([validate_ipv4_address], _('Enter a valid IPv4 address.')),
30
 
    'ipv6': ([validate_ipv6_address], _('Enter a valid IPv6 address.')),
31
 
}
32
 
 
33
 
def ip_address_validators(protocol, unpack_ipv4):
34
 
    """
35
 
    Depending on the given parameters returns the appropriate validators for
36
 
    the GenericIPAddressField.
37
 
 
38
 
    This code is here, because it is exactly the same for the model and the form field.
39
 
    """
40
 
    if protocol != 'both' and unpack_ipv4:
41
 
        raise ValueError(
42
 
            "You can only use `unpack_ipv4` if `protocol` is set to 'both'")
43
 
    try:
44
 
        return ip_address_validator_map[protocol.lower()]
45
 
    except KeyError:
46
 
        raise ValueError("The protocol '%s' is unknown. Supported: %s"
47
 
                         % (protocol, ip_address_validator_map.keys()))