Hi Anthony, thanks for the answer,
Your solution is pretty nice but I am still calling it 3 times which actually is the main problem since I am asking 'google' 3 times the same stuff. Is it possible to store the answer somewhere (cache?) the first time and then use the cache copy for the latter calls?

Regards,
Paolo

Il 17.05.2012 15:09 Anthony ha scritto:
To get it down to it down to one function, how about:

def compute_geoCode(r, component):
 g = geocoders.Google()
 place, (lat, lng) = g.geocode(r.name [4])
 return eval(component)

db.cities.full_address.compute = lambda r: compute_geoCode(r, 'place')
db.cities.lat.compute = lambda r: compute_geoCode(r, 'lat')
db.cities.lgt.compute = lambda r: compute_geoCode(r, 'lng')

Anthony

On Thursday, May 17, 2012 4:35:46 AM UTC-4, Gabriella Canavesi wrote:

Hi all,
I have a simple table with 3 computed fields, the function that set
their values is almost the same. However, unfortunately I had to set
up
three different functions because I didn't find a better approach.
The code:
db.define_table('cities',
Field('name', 'string', requires=IS_TRIM()),
Field('full_address', 'string',requires=IS_TRIM()),
Field("lat", "double", label=T('Latitude')),
Field("lgt", "double", label=T('Longitude')))

db.cities.full_address.compute = compute_geoCode_place
db.cities.lat.compute = compute_geoCode_lat
db.cities.lgt.compute = compute_geoCode_lng

def compute_geoCode_place(r):
g = geocoders.Google()
place, (lat, lng) = g.geocode(r.name [1])
return place

def compute_geoCode_lat(r):
g = geocoders.Google()
place, (lat, lng) = g.geocode(r.name [2])
return lat

def compute_geoCode_lng(r):
g = geocoders.Google()
place, (lat, lng) = g.geocode(r.name [3])
return lng

What I would like to find is a way to fire the execution of a
function
when the form is submitted. More or less something like a compute
action
at table level.

Regards,

--
Paolo


Links:
------
[1] http://r.name
[2] http://r.name
[3] http://r.name
[4] http://r.name/

--
 Paolo

Reply via email to