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
>