Thanks Mai for your comment which put me on the right track...
I ended up creating a module that extends the crm.lead model. Here's a simplified version:
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class DistanceLead(models.Model):
_inherit = 'crm.lead'
address1 = fields.Char(string='Start Address')
address2 = fields.Char(string='End Address')
distance = fields.Float(string='Driving Distance', compute='_compute_distance')
@staticmethod
def get_distance_km(start_addr, end_addr):
if start_addr=='' or end_addr=='':
return 0
import googlemaps
client = googlemaps.Client("YOUR-API-KEY")
try:
matrix = client.distance_matrix([start_addr], [end_addr])
distance_km = matrix['rows'][0]['elements'][0]['distance']['value'] / 1000.00
return distance_km
except:
return 0
@api.depends('address1', 'address2')
def _compute_distance(self):
self.distance = DistanceLead.get_distance_km(self.address1, self.address2)