From 0f83133a35088f6bbbce11ea8256168782860932 Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Fri, 1 Dec 2023 12:55:45 +0000 Subject: [PATCH] Made GeoIP2.__del__() close all databases. --- django/contrib/gis/geoip2/base.py | 6 ++++-- tests/gis_tests/test_geoip2.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/django/contrib/gis/geoip2/base.py b/django/contrib/gis/geoip2/base.py index b9c3027668..d07f79dd25 100644 --- a/django/contrib/gis/geoip2/base.py +++ b/django/contrib/gis/geoip2/base.py @@ -132,8 +132,10 @@ class GeoIP2: def __del__(self): # Cleanup any GeoIP file handles lying around. - if self._reader: - self._reader.close() + if self._city: + self._city.close() + if self._country: + self._country.close() def __repr__(self): meta = self._reader.metadata() diff --git a/tests/gis_tests/test_geoip2.py b/tests/gis_tests/test_geoip2.py index 1a8773a6d7..53f2b20bbc 100644 --- a/tests/gis_tests/test_geoip2.py +++ b/tests/gis_tests/test_geoip2.py @@ -152,6 +152,16 @@ class GeoIPTest(SimpleTestCase): self.assertEqual("Lawrence", d["city"]) self.assertEqual("KS", d["region"]) + def test_del(self): + g = GeoIP2() + city = g._city + country = g._country + self.assertIs(city._db_reader.closed, False) + self.assertIs(country._db_reader.closed, False) + del g + self.assertIs(city._db_reader.closed, True) + self.assertIs(country._db_reader.closed, True) + def test_repr(self): path = settings.GEOIP_PATH g = GeoIP2(path=path)