﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
28981	django.contrib.gis.geoip2.GeoIP2 issue when GEOIP_PATH exists but there is no MaxMind database	Hugo Rodger-Brown	nobody	"If a GEOIP_PATH setting is specified, but there is no database file at that location, the initialisation of GeoIP2 runs without raising an error, which is the expected behaviour. However, during this process, neither the `_country` nor `_city` attributes are set (as there is no database), which means in turn that the `_reader` property will always return `None`. The problem occurs because both the `__repr__` and `info` methods expect the `_reader` to exist, and will fail with an `AttributeError` if it is None.

The expected behaviour is that neither method will fail. The actual behaviour can be replicated below, where GEOIP_PATH is a valid directory that does not contain a MaxMind database file.

{{{#!python
>>> import os
>>> from django.contrib.gis.geoip2 import GeoIP2
>>> from django.contrib.gis.geoip2.base import GEOIP_SETTINGS
>>> assert GEOIP_SETTINGS['GEOIP_PATH']
>>> assert os.path.isdir(GEOIP_SETTINGS['GEOIP_PATH'])
>>> g = GeoIP2()
>>> assert g._city is None
>>> assert g._country is None
>>> assert g._reader is None
>>> print(g)
# traceback truncated
---> meta = self._reader.metadata()
AttributeError: 'NoneType' object has no attribute 'metadata'
>>> g.info()
# traceback truncated
---> meta = self._reader.metadata()
AttributeError: 'NoneType' object has no attribute 'metadata'
}}}

Error occurs in `https://github.com/django/django/blob/1.11.9/django/contrib/gis/geoip2/base.py`

Sugggested remedy: update `GeoIP2.__repr__` and `GeoIP2.info` to handle `_reader is None`."	Uncategorized	new	GIS	1.11	Normal		geoip2 maxmind GEOIP_PATH		Unreviewed	0	0	0	0	0	0
