[Chandler-dev] Future of redirectTo?
Grant Baillie
grant at osafoundation.org
Wed Jul 26 09:51:42 PDT 2006
On 26 Jul, 2006, at 07:34, John Anderson wrote:
> I'm also in favor of getting rid of the redirectTo's and using
> explicit attributes in their place.
Same here ... I think everyone's on board with this one :).
>
> Bryan Stearns wrote:
>> There are a couple of things happening that are calling our
>> attribute-redirection strategy into question...
>>
>> - Bug 6387 (sorted index doesn't maintain sort) where we're trying
>> to index a redirectTo attribute. I'm not sure what exactly is
>> happening, but I can imagine: existing attribute redirection
>> doesn't let the repository know when a redirect-source attribute
>> has changed, so that it can update a redirect-target index.
>>
>> - The dashboard spec calls for more-complex multi-attribute
>> sorting on some columns; some of the sorts call for collection
>> indexes that will need to consider attributes on items other than
>> the one in the collection: eg, when sorting the date column, an
>> item needs to produce "the next interesting datetime", which could
>> be the startTime if it's an event, or the datetime of the next
>> tickler that's going to fire (and while the spec only calls for
>> one tickler per item for now, there'll be multiple ticklers in the
>> future).
> I'm a little confused on "the next interesting datetime", but could
> it be solved by having adding a new attribute
> "interestingDateTime" (which the sort uses), and is possibly
> updated whenever an event's startTime is modified or it's tickler
> time is updated? This is what I proposed in bug#6387 and seems like
> what Jeffrey is proposing below.
Sure. But how exactly would this work: i.e. onValueChanged(),
monitoring the changed values, or some other way? I'm a little wary
of onValueChanged() becoming overly complex. In general, we want to
index these attributes, so what I'd like to see is an API similar to
what's now pim.Calculated:
class MyContentItem(ContentItem):
def getInterestingDatetime(self):
# ... perform possibly complex calculation
return resultOfPossiblyComplexCalculation
# optional: setInterestingDatetime
interestingDatetime = schema.IndexedProperty(
schema.DateTime,
basedOn = ('startTime',
'ticklers'), # basedOn == attributes in Indexed.addIndex()
indexType = 'attribute', # could
be 'string',
fset = getInterestingDatetime)
This would create an attribute which is a property on the class, and
also create the appropriate index (named the same as the attribute).
Maybe it somehow caches the value so that getInterestingDatetime
doesn't get called every time the attribute is accessed (though it's
not clear that's necessary).
(FWIW, it's the index that ends up creating a monitor here to update
when changes are made to the "source" attribute).
--Grant
More information about the chandler-dev
mailing list