def compute_geoCode(r, component): 
     g = geocoders.Google() 
     place, (lat, lng) = cache.ram(r.name, lambda: g.geocode(r.name), None) 
     return eval(component)

Anthony

On Thursday, May 17, 2012 11:44:16 AM UTC-4, Gabriella Canavesi wrote:
>
> 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