Opened 13 years ago
Closed 12 years ago
#17066 closed Bug (fixed)
Exception TypeError when using GeoIP
Reported by: | Mitar | Owned by: | nobody |
---|---|---|---|
Component: | GIS | Version: | 1.4 |
Severity: | Normal | Keywords: | |
Cc: | mmitar@…, Stefan Wehrmeyer | Triage Stage: | Ready for checkin |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
When using GeoIP in my code I am getting such error at the end of syncdb call:
Exception TypeError: "'NoneType' object is not callable" in <bound method GeoIP.__del__ of <django.contrib.gis.utils.geoip.GeoIP object at 0x103a35690>> ignored
It seems there is some race condition? I am using Python 2.7.2 on Mac OS X. It has threaded support enabled. Django 1.3. python-geoip 1.2.5, libgeoip 1.4.7.
Attachments (1)
Change History (10)
comment:1 by , 13 years ago
comment:2 by , 13 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:5 by , 12 years ago
It could be useful if anyone could provide us with a basic project where this error can be reproduced.
comment:6 by , 12 years ago
Resolution: | → needsinfo |
---|---|
Status: | new → closed |
comment:7 by , 12 years ago
Cc: | added |
---|---|
Resolution: | needsinfo |
Status: | closed → new |
I can confirm this on Django 1.4.3 with geoip 1.4.8.
I attached a test project that should reproduce this error. Instructions: Extract, install requirements (Django==1.4.3) and run runtest.sh
which downloads GeoIP country data (slightly too big to attach) and then does a syncdb
(any Django command will do).
The exception should be the last line of the output. The culprit is obviously in django.contrib.gis.geoip.base.GeoIP.__del__
where GeoIP_delete
is None when this method is called.
Replacing __del__
with the following removes the exception, but may leave file handles lying around (I have no deeper knowledge about that).
def __del__(self): # Cleaning any GeoIP file handles lying around. if GeoIP_delete is None: return if self._country: GeoIP_delete(self._country) if self._city: GeoIP_delete(self._city)
comment:8 by , 12 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
Thanks for the research on that issue. I guess that we might have difficulties to come with a test for this, so I suggest to simply add the if GeoIP_delete is None
safeguard, and call it a day!
comment:9 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
This looks similar to #13488 and #13843.