[FIX] crm_partner_assign: Use Google Maps API V3.
authorChristophe Simonis <chs@openerp.com>
Mon, 11 Mar 2013 13:47:00 +0000 (14:47 +0100)
committerChristophe Simonis <chs@openerp.com>
Mon, 11 Mar 2013 13:47:00 +0000 (14:47 +0100)
  Old API is deprecated for 3 years!

bzr revid: chs@openerp.com-20130311134700-q7dat7knvt7lxwdq

addons/crm_partner_assign/partner_geo_assign.py
addons/crm_partner_assign/test/process/partner_assign.yml

index 903a3f5..9180858 100644 (file)
 #
 ##############################################################################
 
+import urllib
+import random
+
+try:
+    import simplejson as json
+except ImportError:
+    import json     # noqa
+
 from osv import osv
 from osv import fields
-import urllib,re
-import random, time
 from tools.translate import _
 import tools
 
 def geo_find(addr):
-    addr = addr.encode('utf8')
-    regex = '<coordinates>([+-]?[0-9\.]+),([+-]?[0-9\.]+),([+-]?[0-9\.]+)</coordinates>'
-    url = 'http://maps.google.com/maps/geo?q=' + urllib.quote(addr) + '&output=xml&oe=utf8&sensor=false'
+    url = 'https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address='
+    url += urllib.quote(addr.encode('utf8'))
+
     try:
-        xml = urllib.urlopen(url).read()
+        result = json.load(urllib.urlopen(url))
     except Exception, e:
         raise osv.except_osv(_('Network error'),
                              _('Could not contact geolocation servers, please make sure you have a working internet connection (%s)') % e)
-
-    if '<error>' in xml:
+    if result['status'] != 'OK':
         return None
-    result = re.search(regex, xml, re.M|re.I)
-    if not result:
+
+    try:
+        geo = result['results'][0]['geometry']['location']
+        return float(geo['lat']), float(geo['lng'])
+    except (KeyError, ValueError):
         return None
-    return float(result.group(2)),float(result.group(1))
 
 def geo_query_address(street=None, zip=None, city=None, state=None, country=None):
     if country and ',' in country and (country.endswith(' of') or country.endswith(' of the')):
index 32606c5..3283ded 100644 (file)
@@ -10,8 +10,8 @@
 -
   !python {model: res.partner}: |
     partner = self.browse(cr, uid, ref('base.res_partner_ericdubois0'))
-    assert 50 < partner.partner_latitude < 51 , "Latitude is wrong"
-    assert 3 < partner.partner_longitude < 5 , "Longitude is wrong"
+    assert 50 < partner.partner_latitude < 51, "Latitude is wrong: 50 < %s < 51" % partner.partner_latitude
+    assert 3 < partner.partner_longitude < 5, "Longitude is wrong: 3 < %s < 5" % partner.partner_longitude
 -
   I assign nearest partner to opportunity.
 -
@@ -23,8 +23,8 @@
   !python {model: crm.lead}: |
     lead = self.browse(cr, uid, ref('crm.crm_case_abcfuelcounits0'))
     assert lead.partner_assigned_id.id == ref('base.res_partner_ericdubois0') , "Opportuniy is not assigned nearest partner"
-    assert 50 < lead.partner_latitude < 51 , "Latitude is wrong"
-    assert 3 < lead.partner_longitude < 5 , "Longitude is wrong"
+    assert 50 < lead.partner_latitude < 51, "Latitude is wrong: 50 < %s < 51" % lead.partner_latitude
+    assert 3 < lead.partner_longitude < 5, "Longitude is wrong: 3 < %s < 5" % lead.partner_longitude 
 -
   I forward this opportunity to its nearest partner.
 -