# © 2022 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import requests import logging from odoo import api, models, tools _logger = logging.getLogger(__name__) class GeoCoder(models.AbstractModel): _inherit = "base.geocoder" def _geo_query_address_adressedatagouv(self, street=None, zip=None, city=None, state=None, country=None): address = ("%s %s %s %s" % (street or '', zip or '', city or '', 'France')).strip() addr = address.replace(' ', '+') if zip: addr += '&postcode=%s' % zip return addr def _call_adressedatagouv(self, addr, **kw): """ Use French Address API Data Gouv service to retrieve location :return: (latitude, longitude) or None if not found """ if not addr: _logger.info('invalid address given') return None url = 'https://api-adresse.data.gouv.fr/search/?q=' try: response = requests.get(url + addr) _logger.info('Address API Gouv service called') if response.status_code != 200: _logger.error('Request to Address API Gouv failed.\nCode: %s\nContent: %s' % (response.status_code, response.content)) result = response.json() except Exception as e: self._raise_query_error(e) if result.get('features', False): geo = result.get('features')[0].get('geometry').get('coordinates') return float(geo[1]), float(geo[0])