Deprecated django.contrib.gis.geoip2.GeoIP2.coords().

The `ordering` argument is undocumented and of limited use, so this is
effectively the same as `GeoIP2.lon_lat()`.
This commit is contained in:
Nick Pope 2023-11-30 09:51:42 +00:00 committed by Mariusz Felisiak
parent 1311f82a6a
commit b925fefd7d
5 changed files with 25 additions and 3 deletions

View File

@ -1,4 +1,5 @@
import socket
import warnings
import geoip2.database
@ -6,6 +7,7 @@ from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.validators import validate_ipv46_address
from django.utils._os import to_path
from django.utils.deprecation import RemovedInDjango60Warning
from .resources import City, Country
@ -199,6 +201,11 @@ class GeoIP2:
return Country(self._country_or_city(enc_query))
def coords(self, query, ordering=("longitude", "latitude")):
warnings.warn(
"GeoIP2.coords() is deprecated. Use GeoIP2.lon_lat() instead.",
RemovedInDjango60Warning,
stacklevel=2,
)
data = self.city(query)
return tuple(data[o] for o in ordering)

View File

@ -64,6 +64,8 @@ details on these changes.
* The undocumented ``django.utils.itercompat.is_iterable()`` function and the
``django.utils.itercompat`` module will be removed.
* The ``django.contrib.gis.geoip2.GeoIP2.coords()`` method will be removed.
.. _deprecation-removed-in-5.1:
5.1

View File

@ -133,6 +133,10 @@ Coordinate Retrieval
Returns a coordinate tuple of (longitude, latitude).
.. deprecated:: 5.1
Use :meth:`.GeoIP2.lon_lat` instead.
.. method:: GeoIP2.lon_lat(query)
Returns a coordinate tuple of (longitude, latitude).

View File

@ -307,6 +307,9 @@ Miscellaneous
``django.utils.itercompat`` module are deprecated. Use
``isinstance(..., collections.abc.Iterable)`` instead.
* The ``django.contrib.gis.geoip2.GeoIP2.coords()`` method is deprecated. Use
``django.contrib.gis.geoip2.GeoIP2.lon_lat()`` instead.
Features removed in 5.1
=======================

View File

@ -6,6 +6,7 @@ from django.conf import settings
from django.contrib.gis.geoip2 import HAS_GEOIP2
from django.contrib.gis.geos import GEOSGeometry
from django.test import SimpleTestCase
from django.utils.deprecation import RemovedInDjango60Warning
if HAS_GEOIP2:
from django.contrib.gis.geoip2 import GeoIP2, GeoIP2Exception
@ -71,8 +72,6 @@ class GeoIPTest(SimpleTestCase):
# No city database available, these calls should fail.
with self.assertRaises(GeoIP2Exception):
cntry_g.city("tmc.edu")
with self.assertRaises(GeoIP2Exception):
cntry_g.coords("tmc.edu")
# Non-string query should raise TypeError
with self.assertRaises(TypeError):
@ -139,7 +138,6 @@ class GeoIPTest(SimpleTestCase):
for e1, e2 in (
geom.tuple,
g.coords(query),
g.lon_lat(query),
g.lat_lon(query),
):
@ -182,3 +180,11 @@ class GeoIPTest(SimpleTestCase):
g._check_query("2002:81ed:c9a5::81ed:c9a5"), "2002:81ed:c9a5::81ed:c9a5"
)
self.assertEqual(g._check_query("invalid-ip-address"), "expected")
def test_coords_deprecation_warning(self):
g = GeoIP2()
msg = "GeoIP2.coords() is deprecated. Use GeoIP2.lon_lat() instead."
with self.assertWarnsMessage(RemovedInDjango60Warning, msg):
e1, e2 = g.coords(self.fqdn)
self.assertIsInstance(e1, float)
self.assertIsInstance(e2, float)