Django

Code

Ticket #811: ipv6field.diff

File ipv6field.diff, 6.8 kB (added by mattimustang@gmail.com, 3 years ago)

Updated IPv6 Field patch

  • django/core/formfields.py

    old new  
    807807 
    808808class IPAddressField(TextField): 
    809809    def __init__(self, field_name, length=15, maxlength=15, is_required=False, validator_list=[]): 
    810         validator_list = [self.isValidIPAddress] + validator_list 
     810        validator_list = [self.isValidIPv4Address] + validator_list 
    811811        TextField.__init__(self, field_name, length=length, maxlength=maxlength, 
    812812            is_required=is_required, validator_list=validator_list) 
    813813 
    814     def isValidIPAddress(self, field_data, all_data): 
     814    def isValidIPv4Address(self, field_data, all_data): 
    815815        try: 
    816             validators.isValidIPAddress4(field_data, all_data) 
     816            validators.isValidIPv4Address(field_data, all_data) 
    817817        except validators.ValidationError, e: 
    818818            raise validators.CriticalValidationError, e.messages 
    819819 
     
    821821        return data or None 
    822822    html2python = staticmethod(html2python) 
    823823 
     824class IPv6AddressField(TextField): 
     825    def __init__(self, field_name, length=39, maxlength=39, is_required=False, validator_list=[]): 
     826        validator_list = [self.isValidIPv6Address] + validator_list 
     827        TextField.__init__(self, field_name, length=length, maxlength=maxlength, 
     828            is_required=is_required, validator_list=validator_list) 
     829 
     830    def isValidIPv6Address(self, field_data, all_data): 
     831        try: 
     832            validators.isValidIPv6Address(field_data, all_data) 
     833        except validators.ValidationError, e: 
     834            raise validators.CriticalValidationError, e.messages 
     835 
     836    def html2python(data): 
     837        return data or None 
     838    html2python = staticmethod(html2python) 
     839 
    824840#################### 
    825841# MISCELLANEOUS    # 
    826842#################### 
  • django/core/db/backends/ado_mssql.py

    old new  
    150150    'ImageField':        'varchar(100)', 
    151151    'IntegerField':      'int', 
    152152    'IPAddressField':    'char(15)', 
     153    'IPv6AddressField':   'char(39)', 
    153154    'ManyToManyField':   None, 
    154155    'NullBooleanField':  'bit', 
    155156    'OneToOneField':     'int', 
  • django/core/db/backends/postgresql.py

    old new  
    200200    'ImageField':        'varchar(100)', 
    201201    'IntegerField':      'integer', 
    202202    'IPAddressField':    'inet', 
     203    'IPv6AddressField':   'inet', 
    203204    'ManyToManyField':   None, 
    204205    'NullBooleanField':  'boolean', 
    205206    'OneToOneField':     'integer', 
  • django/core/db/backends/sqlite3.py

    old new  
    174174    'ImageField':                   'varchar(100)', 
    175175    'IntegerField':                 'integer', 
    176176    'IPAddressField':               'char(15)', 
     177    'IPv6AddressField':              'char(39)', 
    177178    'ManyToManyField':              None, 
    178179    'NullBooleanField':             'bool', 
    179180    'OneToOneField':                'integer', 
  • django/core/db/backends/mysql.py

    old new  
    184184    'ImageField':        'varchar(100)', 
    185185    'IntegerField':      'integer', 
    186186    'IPAddressField':    'char(15)', 
     187    'IPv6AddressField':   'char(39)', 
    187188    'ManyToManyField':   None, 
    188189    'NullBooleanField':  'bool', 
    189190    'OneToOneField':     'integer', 
  • django/core/meta/fields.py

    old new  
    580580    def get_manipulator_field_objs(self): 
    581581        return [formfields.IPAddressField] 
    582582 
     583class IPv6AddressField(Field): 
     584    def __init__(self, *args, **kwargs): 
     585        kwargs['maxlength'] = 39 
     586        Field.__init__(self, *args, **kwargs) 
     587 
     588    def get_manipulator_field_objs(self): 
     589        return [formfields.IPv6AddressField] 
     590 
    583591class NullBooleanField(Field): 
    584592    def __init__(self, *args, **kwargs): 
    585593        kwargs['null'] = True 
  • django/core/validators.py

    old new  
    1919ansi_datetime_re = re.compile('^%s %s$' % (_datere, _timere)) 
    2020email_re = re.compile(r'^[A-Z0-9._%-][+A-Z0-9._%-]*@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$', re.IGNORECASE) 
    2121integer_re = re.compile(r'^-?\d+$') 
    22 ip4_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}$') 
     22ipv4_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}$') 
     23_ipv6_hex_re = r'(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}' 
     24_ipv6_hex_compressed_re = r'((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)::((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)' 
     25_ipv6_ipv4_compat_re = r'((?:[0-9A-Fa-f]{1,4}:){6,6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}' 
     26_ipv6_ipv4_compat_compressed_re = r'((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)::((?:[0-9A-Fa-f]{1,4}:)*)(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}' 
     27ipv6_re = re.compile('^(%s|%s|%s|%s)$' % (_ipv6_hex_re, _ipv6_hex_compressed_re, _ipv6_ipv4_compat_re, _ipv6_ipv4_compat_compressed_re)) 
    2328phone_re = re.compile(r'^[A-PR-Y0-9]{3}-[A-PR-Y0-9]{3}-[A-PR-Y0-9]{4}$', re.IGNORECASE) 
    2429slug_re = re.compile(r'^[-\w]+$') 
    2530url_re = re.compile(r'^https?://\S+$') 
     
    95100        except ValidationError: 
    96101            raise ValidationError, _("Enter valid e-mail addresses separated by commas.") 
    97102 
    98 def isValidIPAddress4(field_data, all_data): 
    99     if not ip4_re.search(field_data): 
    100         raise ValidationError, _("Please enter a valid IP address.") 
     103def isValidIPAddress(field_data, all_data): 
     104    if not (ipv4_re.search(field_data) or ipv6_re.search(field_data)): 
     105        raise ValidationError, _("Please enter a valid IPv4 or IPv6 address.") 
    101106 
     107def isValidIPv4Address(field_data, all_data): 
     108    if not ipv4_re.search(field_data): 
     109        raise ValidationError, _("Please enter a valid IPv4 address.") 
     110 
     111def isValidIPv6Address(field_data, all_data): 
     112    if not ipv6_re.search(field_data): 
     113        raise ValidationError, _("Please enter a valid IPv6 address.") 
     114 
    102115def isNotEmpty(field_data, all_data): 
    103116    if field_data.strip() == '': 
    104117        raise ValidationError, _("Empty values are not allowed here.")