Skip to content

Commit

Permalink
Deprecated django.contrib.gis.geoip2.GeoIP2.coords().
Browse files Browse the repository at this point in the history
The `ordering` argument is undocumented and of limited use, so this is
effectively the same as `GeoIP2.lon_lat()`.
  • Loading branch information
ngnpope authored and felixxm committed Dec 1, 2023
1 parent 1311f82 commit b925fef
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 3 deletions.
7 changes: 7 additions & 0 deletions django/contrib/gis/geoip2/base.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import socket
import warnings

import geoip2.database

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

Expand Down Expand Up @@ -199,6 +201,11 @@ def country(self, query):
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)

Expand Down
2 changes: 2 additions & 0 deletions docs/internals/deprecation.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions docs/ref/contrib/gis/geoip2.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down
3 changes: 3 additions & 0 deletions docs/releases/5.1.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
=======================

Expand Down
12 changes: 9 additions & 3 deletions tests/gis_tests/test_geoip2.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
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
Expand Down Expand Up @@ -71,8 +72,6 @@ def test02_bad_query(self):
# 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):
Expand Down Expand Up @@ -139,7 +138,6 @@ def test04_city(self, gethostbyname):

for e1, e2 in (
geom.tuple,
g.coords(query),
g.lon_lat(query),
g.lat_lon(query),
):
Expand Down Expand Up @@ -182,3 +180,11 @@ def test_check_query(self, gethostbyname):
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)

0 comments on commit b925fef

Please sign in to comment.