From 714aaca03edc4185d6a57a98b645fc0cd54be9af Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 17 May 2015 16:45:22 +0200 Subject: [PATCH] [FIX] website: ir.http geoip default file - set the default value to be the debian bundled geoip database. - split into 2 methods to avoir bloating dispatch --- addons/website/models/ir_http.py | 44 ++++++++++++++++++-------------- openerp/tools/config.py | 2 +- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index e063eb39d87..d8311197a31 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -26,7 +26,7 @@ class ir_http(orm.AbstractModel): _inherit = 'ir.http' rerouting_limit = 10 - geo_ip_resolver = None + _geoip_resolver = None def _get_converters(self): return dict( @@ -66,6 +66,28 @@ class ir_http(orm.AbstractModel): return code return False + def _geoip_setup_resolver(self): + if self._geoip_resolver is None: + try: + import GeoIP + # updated database can be downloaded on MaxMind website + # http://dev.maxmind.com/geoip/legacy/install/city/ + geofile = config.get('geoip_database') + if os.path.exists(geofile): + self._geoip_resolver = GeoIP.open(geofile, GeoIP.GEOIP_STANDARD) + else: + self._geoip_resolver = False + logger.warning('GeoIP database file %r does not exists', geofile) + except ImportError: + self._geoip_resolver = False + + def _geoip_resolve(self): + if 'geoip' not in request.session: + record = {} + if self._geoip_resolver and request.httprequest.remote_addr: + record = self._geoip_resolver.record_by_addr(request.httprequest.remote_addr) or {} + request.session['geoip'] = record + def _dispatch(self): first_pass = not hasattr(request, 'website') request.website = None @@ -86,24 +108,8 @@ class ir_http(orm.AbstractModel): func and func.routing.get('multilang', func.routing['type'] == 'http') ) - if 'geoip' not in request.session: - record = {} - if self.geo_ip_resolver is None: - try: - import GeoIP - # updated database can be downloaded on MaxMind website - # http://dev.maxmind.com/geoip/legacy/install/city/ - geofile = config.get('geoip_database') - if os.path.exists(geofile): - self.geo_ip_resolver = GeoIP.open(geofile, GeoIP.GEOIP_STANDARD) - else: - self.geo_ip_resolver = False - logger.warning('GeoIP database file %r does not exists', geofile) - except ImportError: - self.geo_ip_resolver = False - if self.geo_ip_resolver and request.httprequest.remote_addr: - record = self.geo_ip_resolver.record_by_addr(request.httprequest.remote_addr) or {} - request.session['geoip'] = record + self._geoip_setup_resolver() + self._geoip_resolve() cook_lang = request.httprequest.cookies.get('website_lang') if request.website_enabled: diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 027ef49ffa2..d11956d8124 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -270,7 +270,7 @@ class configmanager(object): type="int") group.add_option("--unaccent", dest="unaccent", my_default=False, action="store_true", help="Use the unaccent function provided by the database when available.") - group.add_option("--geoip-db", dest="geoip_database", my_default='/usr/share/GeoIP/GeoLiteCity.dat', + group.add_option("--geoip-db", dest="geoip_database", my_default='/usr/share/GeoIP/GeoIP.dat', help="Absolute path to the GeoIP database file.") parser.add_option_group(group)