The problem here is a little technical, so bear with me.
The way things work normally is that the default configuration for the Cheetah generator includes a TimeBinder in the search list. Because a TimeBinder includes an attribute 'trend', the tag $trend works.
The problem is that the extension since.py also includes a TimeBinder, but one that has not been properly initialized. It needs a keyword argument "trend".
Why did it work before, but not now? Because the order of evaluation of the search list changed. Before, it searched built-in objects first, then user extensions. V4.6 does it the other way around: it searches user extensions first, then the built-ins. This is to allow overriding the behavior of the built-in search list, which the since.py extension inadvertently did. So, when evaluating the tag $trend, the custom, not properly initialized, version of TimeBinder is hit first, and the built-in version is never seen. This re-ordering should have been mentioned in the Upgrade Guide.
There are two ways to fix:
1. Properly initialize the instance of TimeBinder in since.py.
2. Change the logic of since.py. Frankly, I don't know why it returns a TimeBinder at all. It's way more complicated than it needs to be, and has the side effect that it's basically overriding all of the tags, including such mundane tags as $day, $week, etc. It gets away with this because its semantics are identical for these other tags.
If you want a quick fix, do option #1. Here's the delta
--- since.py 2022-02-06 04:59:19.000000000 -0800
***************
*** 160,169 ****
formatter=self.formatter,
converter=self.converter)
tspan_binder = NewBinder(db_lookup,
! timespan.stop,
! self.generator.formatter,
! self.generator.converter)
t2 = time.time()
logdbg2("Since SLE executed in %0.3f seconds" % (t2-t1))
--- 160,176 ----
formatter=self.formatter,
converter=self.converter)
+ try:
+ trend_dict = self.generator.skin_dict['Units']['Trend']
+ except KeyError:
+ trend_dict = {'time_delta': 10800,
+ 'time_grace': 300}
+
tspan_binder = NewBinder(db_lookup,
! timespan.stop,
! self.generator.formatter,
! self.generator.converter,
! trend=trend_dict)
t2 = time.time()
logdbg2("Since SLE executed in %0.3f seconds" % (t2-t1))
But, really, since.py should be fixed so that it doesn't override default behavior.
-tk