mirror of https://github.com/django/django.git
Fixed #20439 -- Started deprecation of IPAddressField
This commit is contained in:
parent
8f51ba669a
commit
1a63092981
|
@ -1312,6 +1312,8 @@ class IPAddressField(Field):
|
||||||
description = _("IPv4 address")
|
description = _("IPv4 address")
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
warnings.warn("IPAddressField has been deprecated. Use GenericIPAddressField instead.",
|
||||||
|
PendingDeprecationWarning)
|
||||||
kwargs['max_length'] = 15
|
kwargs['max_length'] = 15
|
||||||
Field.__init__(self, *args, **kwargs)
|
Field.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import datetime
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
import warnings
|
||||||
from decimal import Decimal, DecimalException
|
from decimal import Decimal, DecimalException
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
|
@ -1144,6 +1145,11 @@ class SplitDateTimeField(MultiValueField):
|
||||||
class IPAddressField(CharField):
|
class IPAddressField(CharField):
|
||||||
default_validators = [validators.validate_ipv4_address]
|
default_validators = [validators.validate_ipv4_address]
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
warnings.warn("IPAddressField has been deprecated. Use GenericIPAddressField instead.",
|
||||||
|
PendingDeprecationWarning)
|
||||||
|
super(IPAddressField, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
if value in self.empty_values:
|
if value in self.empty_values:
|
||||||
return ''
|
return ''
|
||||||
|
|
|
@ -436,6 +436,8 @@ these changes.
|
||||||
:ref:`initial SQL data<initial-sql>` in ``myapp/models/sql/``. Move your
|
:ref:`initial SQL data<initial-sql>` in ``myapp/models/sql/``. Move your
|
||||||
custom SQL files to ``myapp/sql/``.
|
custom SQL files to ``myapp/sql/``.
|
||||||
|
|
||||||
|
* The model and form ``IPAddressField`` will be removed.
|
||||||
|
|
||||||
* FastCGI support via the ``runfcgi`` management command will be
|
* FastCGI support via the ``runfcgi`` management command will be
|
||||||
removed. Please deploy your project using WSGI.
|
removed. Please deploy your project using WSGI.
|
||||||
|
|
||||||
|
|
|
@ -657,6 +657,10 @@ For each field, we describe the default widget used if you don't specify
|
||||||
|
|
||||||
.. class:: IPAddressField(**kwargs)
|
.. class:: IPAddressField(**kwargs)
|
||||||
|
|
||||||
|
.. deprecated:: 1.7
|
||||||
|
This field has been deprecated in favour of
|
||||||
|
:class:`~django.forms.GenericIPAddressField`.
|
||||||
|
|
||||||
* Default widget: :class:`TextInput`
|
* Default widget: :class:`TextInput`
|
||||||
* Empty value: ``''`` (an empty string)
|
* Empty value: ``''`` (an empty string)
|
||||||
* Normalizes to: A Unicode object.
|
* Normalizes to: A Unicode object.
|
||||||
|
|
|
@ -849,6 +849,10 @@ An integer. The default form widget for this field is a
|
||||||
|
|
||||||
.. class:: IPAddressField([**options])
|
.. class:: IPAddressField([**options])
|
||||||
|
|
||||||
|
.. deprecated:: 1.7
|
||||||
|
This field has been deprecated in favour of
|
||||||
|
:class:`~django.db.models.GenericIPAddressField`.
|
||||||
|
|
||||||
An IP address, in string format (e.g. "192.0.2.30"). The default form widget
|
An IP address, in string format (e.g. "192.0.2.30"). The default form widget
|
||||||
for this field is a :class:`~django.forms.TextInput`.
|
for this field is a :class:`~django.forms.TextInput`.
|
||||||
|
|
||||||
|
|
|
@ -529,3 +529,12 @@ to ``utils.py`` in an effort to unify all util and utils references:
|
||||||
``ModelAdmin.get_formsets`` has been deprecated in favor of the new
|
``ModelAdmin.get_formsets`` has been deprecated in favor of the new
|
||||||
:meth:`~django.contrib.admin.ModelAdmin.get_formsets_with_inlines`, in order to
|
:meth:`~django.contrib.admin.ModelAdmin.get_formsets_with_inlines`, in order to
|
||||||
better handle the case of selecting showing inlines on a ``ModelAdmin``.
|
better handle the case of selecting showing inlines on a ``ModelAdmin``.
|
||||||
|
|
||||||
|
``IPAddressField``
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The :class:`django.db.models.IPAddressField` and
|
||||||
|
:class:`django.forms.IPAddressField` fields have been deprecated in favor of
|
||||||
|
:class:`django.db.models.GenericIPAddressField` and
|
||||||
|
:class:`django.forms.GenericIPAddressField`.
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import warnings
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
@ -173,7 +174,9 @@ class FieldDeconstructionTests(TestCase):
|
||||||
self.assertEqual(kwargs, {})
|
self.assertEqual(kwargs, {})
|
||||||
|
|
||||||
def test_ip_address_field(self):
|
def test_ip_address_field(self):
|
||||||
field = models.IPAddressField()
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
field = models.IPAddressField()
|
||||||
name, path, args, kwargs = field.deconstruct()
|
name, path, args, kwargs = field.deconstruct()
|
||||||
self.assertEqual(path, "django.db.models.IPAddressField")
|
self.assertEqual(path, "django.db.models.IPAddressField")
|
||||||
self.assertEqual(args, [])
|
self.assertEqual(args, [])
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import warnings
|
||||||
|
|
||||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||||
from django.forms import *
|
from django.forms import *
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
@ -192,7 +194,9 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
||||||
'required': 'REQUIRED',
|
'required': 'REQUIRED',
|
||||||
'invalid': 'INVALID IP ADDRESS',
|
'invalid': 'INVALID IP ADDRESS',
|
||||||
}
|
}
|
||||||
f = IPAddressField(error_messages=e)
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
f = IPAddressField(error_messages=e)
|
||||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||||
self.assertFormErrors(['INVALID IP ADDRESS'], f.clean, '127.0.0')
|
self.assertFormErrors(['INVALID IP ADDRESS'], f.clean, '127.0.0')
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import warnings
|
||||||
|
|
||||||
from django.forms import *
|
from django.forms import *
|
||||||
from django.forms.extras import SelectDateWidget
|
from django.forms.extras import SelectDateWidget
|
||||||
|
@ -535,7 +536,9 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
||||||
self.assertEqual(f.cleaned_data['field1'], 'some text,JP,2007-04-25 06:24:00')
|
self.assertEqual(f.cleaned_data['field1'], 'some text,JP,2007-04-25 06:24:00')
|
||||||
|
|
||||||
def test_ipaddress(self):
|
def test_ipaddress(self):
|
||||||
f = IPAddressField()
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
f = IPAddressField()
|
||||||
self.assertFormErrors(['This field is required.'], f.clean, '')
|
self.assertFormErrors(['This field is required.'], f.clean, '')
|
||||||
self.assertFormErrors(['This field is required.'], f.clean, None)
|
self.assertFormErrors(['This field is required.'], f.clean, None)
|
||||||
self.assertEqual(f.clean(' 127.0.0.1'), '127.0.0.1')
|
self.assertEqual(f.clean(' 127.0.0.1'), '127.0.0.1')
|
||||||
|
@ -544,7 +547,9 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
||||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
|
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
|
||||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
|
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
|
||||||
|
|
||||||
f = IPAddressField(required=False)
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
f = IPAddressField(required=False)
|
||||||
self.assertEqual(f.clean(''), '')
|
self.assertEqual(f.clean(''), '')
|
||||||
self.assertEqual(f.clean(None), '')
|
self.assertEqual(f.clean(None), '')
|
||||||
self.assertEqual(f.clean(' 127.0.0.1'), '127.0.0.1')
|
self.assertEqual(f.clean(' 127.0.0.1'), '127.0.0.1')
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# -*- encoding: utf-8 -*-
|
# -*- encoding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
import warnings
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
@ -49,7 +50,9 @@ class ColumnTypes(models.Model):
|
||||||
file_path_field = models.FilePathField()
|
file_path_field = models.FilePathField()
|
||||||
float_field = models.FloatField()
|
float_field = models.FloatField()
|
||||||
int_field = models.IntegerField()
|
int_field = models.IntegerField()
|
||||||
ip_address_field = models.IPAddressField()
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
ip_address_field = models.IPAddressField()
|
||||||
gen_ip_adress_field = models.GenericIPAddressField(protocol="ipv4")
|
gen_ip_adress_field = models.GenericIPAddressField(protocol="ipv4")
|
||||||
pos_int_field = models.PositiveIntegerField()
|
pos_int_field = models.PositiveIntegerField()
|
||||||
pos_small_int_field = models.PositiveSmallIntegerField()
|
pos_small_int_field = models.PositiveSmallIntegerField()
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import os
|
import os
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import warnings
|
||||||
|
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
|
||||||
|
@ -85,7 +86,9 @@ class VerboseNameField(models.Model):
|
||||||
# Don't want to depend on Pillow/PIL in this test
|
# Don't want to depend on Pillow/PIL in this test
|
||||||
#field_image = models.ImageField("verbose field")
|
#field_image = models.ImageField("verbose field")
|
||||||
field12 = models.IntegerField("verbose field12")
|
field12 = models.IntegerField("verbose field12")
|
||||||
field13 = models.IPAddressField("verbose field13")
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
field13 = models.IPAddressField("verbose field13")
|
||||||
field14 = models.GenericIPAddressField("verbose field14", protocol="ipv4")
|
field14 = models.GenericIPAddressField("verbose field14", protocol="ipv4")
|
||||||
field15 = models.NullBooleanField("verbose field15")
|
field15 = models.NullBooleanField("verbose field15")
|
||||||
field16 = models.PositiveIntegerField("verbose field16")
|
field16 = models.PositiveIntegerField("verbose field16")
|
||||||
|
|
|
@ -3,6 +3,7 @@ from __future__ import unicode_literals
|
||||||
import datetime
|
import datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
import unittest
|
import unittest
|
||||||
|
import warnings
|
||||||
|
|
||||||
from django import test
|
from django import test
|
||||||
from django import forms
|
from django import forms
|
||||||
|
@ -603,9 +604,11 @@ class PromiseTest(test.TestCase):
|
||||||
|
|
||||||
def test_IPAddressField(self):
|
def test_IPAddressField(self):
|
||||||
lazy_func = lazy(lambda: '127.0.0.1', six.text_type)
|
lazy_func = lazy(lambda: '127.0.0.1', six.text_type)
|
||||||
self.assertIsInstance(
|
with warnings.catch_warnings(record=True) as w:
|
||||||
IPAddressField().get_prep_value(lazy_func()),
|
warnings.simplefilter("always")
|
||||||
six.text_type)
|
self.assertIsInstance(
|
||||||
|
IPAddressField().get_prep_value(lazy_func()),
|
||||||
|
six.text_type)
|
||||||
|
|
||||||
def test_GenericIPAddressField(self):
|
def test_GenericIPAddressField(self):
|
||||||
lazy_func = lazy(lambda: '127.0.0.1', six.text_type)
|
lazy_func = lazy(lambda: '127.0.0.1', six.text_type)
|
||||||
|
|
|
@ -4,6 +4,7 @@ A test spanning all the capabilities of all the serializers.
|
||||||
This class sets up a model for each model field type
|
This class sets up a model for each model field type
|
||||||
(except for image types, because of the Pillow/PIL dependency).
|
(except for image types, because of the Pillow/PIL dependency).
|
||||||
"""
|
"""
|
||||||
|
import warnings
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.contenttypes import generic
|
from django.contrib.contenttypes import generic
|
||||||
|
@ -52,7 +53,9 @@ class BigIntegerData(models.Model):
|
||||||
# data = models.ImageField(null=True)
|
# data = models.ImageField(null=True)
|
||||||
|
|
||||||
class IPAddressData(models.Model):
|
class IPAddressData(models.Model):
|
||||||
data = models.IPAddressField(null=True)
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
data = models.IPAddressField(null=True)
|
||||||
|
|
||||||
class GenericIPAddressData(models.Model):
|
class GenericIPAddressData(models.Model):
|
||||||
data = models.GenericIPAddressField(null=True)
|
data = models.GenericIPAddressField(null=True)
|
||||||
|
@ -199,7 +202,9 @@ class IntegerPKData(models.Model):
|
||||||
# data = models.ImageField(primary_key=True)
|
# data = models.ImageField(primary_key=True)
|
||||||
|
|
||||||
class IPAddressPKData(models.Model):
|
class IPAddressPKData(models.Model):
|
||||||
data = models.IPAddressField(primary_key=True)
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
data = models.IPAddressField(primary_key=True)
|
||||||
|
|
||||||
class GenericIPAddressPKData(models.Model):
|
class GenericIPAddressPKData(models.Model):
|
||||||
data = models.GenericIPAddressField(primary_key=True)
|
data = models.GenericIPAddressField(primary_key=True)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
import warnings
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.encoding import python_2_unicode_compatible
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
@ -49,7 +50,9 @@ class Base(models.Model):
|
||||||
class Article(models.Model):
|
class Article(models.Model):
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
text = models.TextField()
|
text = models.TextField()
|
||||||
submitted_from = models.IPAddressField(blank=True, null=True)
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
submitted_from = models.IPAddressField(blank=True, null=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "Article %s" % self.name
|
return "Article %s" % self.name
|
||||||
|
|
Loading…
Reference in New Issue