Sorry. Forgot that "day <https://github.com/weewx/weewx/blob/v3.7.1/bin/weewx/tags.py#L69>" is actually a function. If Cheetah gets this error it swallows it, then silently tries the attribute again, this time as a function, using default arguments. You, programming in plain old Python, have no such luxury, so you have to call it as a function the first time. I should note that "latest <https://github.com/weewx/weewx/blob/v3.7.1/bin/weewx/tags.py#L364>" is also a function, so it will also have to be called as one. The expression becomes
stats.day().outTemp.latest() If you follow the links for day and latest, you can see what optional arguments they can take. -tk On Sun, Jun 25, 2017 at 1:06 PM, Thomas Carlin <thomascarl...@gmail.com> wrote: > Thanks again Tom, > > Hopefully the last question for today! > > I currently have (truncated for brevity) > > from weewx.cheetahgenerator import SearchList > import weewx.tags > > > class GarageDoorAnalyzer(SearchList): > def __init__(self, generator): > SearchList.__init__(self, generator) > > > def get_extension_list(self, timespan, db_lookup): > > stats = weewx.tags.TimeBinder( > db_lookup, > timespan.stop, > formatter=self.generator.formatter, > converter=self.generator.converter) > > > latest = stats.day.outTemp.latest > print latest > > self.search_list_extension[tag_name] = self._DoSomethingWithLatest > (latest) > return[self.search_list_extension] > > > > When I run this, i get the following traceback: > > , line 67, in get_extension_list > latest = stats.day.outTemp.latest > AttributeError: 'function' object has no attribute 'outTemp' > > > > > > > On Sunday, June 25, 2017 at 11:37:55 AM UTC-6, Tom Keffer wrote: > >> I cut-and-paste from the definition for function >> Stats.get_extension_list() >> <https://github.com/weewx/weewx/blob/v3.7.1/bin/weewx/cheetahgenerator.py#L537>. >> You can see where trend_dict came from there. However, unless you plan >> to use something like stats.trend in your search list extension >> (unlikely), it, and several other parameters, can be safely left out. A >> more minimal assignment for stats would look like: >> >> stats = weewx.tags.TimeBinder( >> db_lookup, >> timespan.stop, >> formatter=self.generator.formatter, >> converter=self.generator.converter) >> >> As for how often an SLE gets called, that depends on the usage pattern. >> Without seeing the exact pattern you are using it's hard to say, but >> something I see quite often is Cheetah expressions that look something like >> this (this came up today): >> >> #if $day.UV.has_data >> <tr> >> <td class="stats_label">UV</td> >> #if $current.UV.raw <= 2.4 >> <td class="stats_data" style="background-color: >> limegreen">$current.UV</td> >> #else if $current.UV.raw >= 2.5 and $current.UV.raw <= 5.4 >> <td class="stats_data" style="background-color: yellow">$current.UV</td> >> #else if $current.UV.raw >= 5.5 and $current.UV.raw <= 7.4 >> <td class="stats_data" style="background-color: orange">$current.UV</td> >> #else if $current.UV.raw >= 7.5 and $current.UV.raw <= 10.4 >> <td class="stats_data" style="background-color: red">$current.UV</td> >> #else if $current.UV.raw > 10.5 >> <td class="stats_data" style="background-color: violet">$current.UV</td> >> #end if >> </tr> >> #end if >> >> >> This snippet will use the Current SLE up to eight times, just to get the >> UV value. If the UV value is not available in the current record, that >> means up to 8 SQL queries! A more efficient pattern is: >> >> #if $day.UV.has_data >> #set $current_UV = $current.UV.raw >> <tr> >> <td class="stats_label">UV</td> >> #if $current_UV <= 2.4 >> <td class="stats_data" style="background-color: >> limegreen">$current.UV</td> >> #else if $current_UV >= 2.5 and $current_UV <= 5.4 >> <td class="stats_data" style="background-color: yellow">$current.UV</td> >> #else if $current_UV >= 5.5 and $current_UV <= 7.4 >> <td class="stats_data" style="background-color: orange">$current.UV</td> >> #else if $current_UV >= 7.5 and $current_UV <= 10.4 >> <td class="stats_data" style="background-color: red">$current.UV</td> >> #else >> <td class="stats_data" style="background-color: violet">$current.UV</td> >> #end if >> </tr> >> #end if >> >> -tk >> >> >> >> On Sun, Jun 25, 2017 at 9:49 AM, Thomas Carlin <thomas...@gmail.com> >> wrote: >> >>> Thanks Tom, that looks like exactly what I need. Doing some testing >>> this morning, I get an error on >>> trend=trend_dict, >>> >>> NameError: global name 'trend_dict' is not defined >>> >>> Where does this dictionary originate? >>> >>> Unrelated to the original question, I noticed that my extension runs >>> several times (7 i think) for each report generation. It's trivial to >>> write a catch in so it only runs once, but i'm curious why this is. Could >>> you shed any light on this? >>> >>> -Thomas >>> >>> >>> On Saturday, June 24, 2017 at 8:25:07 PM UTC-6, Tom Keffer wrote: >>>> >>>> Not a simple question at all! >>>> >>>> Generally, yes, you can use something similar to the tags in your code >>>> by following the same path through the objects. For example, >>>> >>>> $day.outTemp.latest >>>> >>>> can be obtained by using >>>> >>>> stats = weewx.tags.TimeBinder( >>>> db_lookup, >>>> timespan.stop, >>>> formatter=self.generator.formatter, >>>> converter=self.generator.converter, >>>> week_start=self.generator.stn_info.week_start, >>>> rain_year_start=self.generator.stn_info.rain_year_start, >>>> trend=trend_dict, >>>> skin_dict=self.generator.skin_dict) >>>> >>>> latest = stats.day.outTemp.latest >>>> >>>> This is basically all Cheetah is doing! >>>> >>>> Hope this helps. >>>> >>>> -tk >>>> >>>> >>>> On Sat, Jun 24, 2017 at 8:39 AM, Thomas Carlin <thomas...@gmail.com> >>>> wrote: >>>> >>>>> Good morning everyone, >>>>> >>>>> I have a custom search list extension that I am working on to do some >>>>> analysis on my collected data, and I have it to the point that I am >>>>> pulling >>>>> the data out, and can manipulate it, but to do so, I had to define my own >>>>> timespan/binder inside my script. (The historygenerator extension does >>>>> the >>>>> same thing). >>>>> >>>>> Is there any way to use the weewx defined 'latest' or 'current' >>>>> timespan inside my python extension? Please forgive me if this is a >>>>> simple >>>>> question, the only programing experience that I have is self-inflicted, >>>>> and >>>>> far from complete. >>>>> >>>>> Thank you! >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "weewx-user" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to weewx-user+...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "weewx-user" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to weewx-user+...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "weewx-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to weewx-user+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "weewx-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to weewx-user+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.