[Chandler-dev] Dashboard date and lastmodified proposal
John Anderson
john at osafoundation.org
Tue Aug 15 11:50:46 PDT 2006
+1. I've run into a number of situations where the fine grained
onValueChange would be useful.
Grant Baillie wrote:
> So, there was a long discussion about this subject on IRC yesterday,
> mainly between Phillip & Andi, with occasional interjections from
> Bryan and me. Here's my understanding of what the plan is: Please pipe
> up if you have corrections or objections!
>
> 1) The general "calculated attribute" case:
>
> - Andi will add an onChange attribute aspect, a way of specifying a
> list of methods that will be invoked when a particular attribute is
> changed. This is a more fine-grained version of the current
> onValueChanged() hook for items, but will be initially implemented so
> that the existing onValueChanged() calls still take place.
>
> - Phillip will add support in the schema API for being able to have a
> syntax like the following for Calculateds:
>
> class ContentItem(Item):
>
> nextImportantDate = schema.One(schema.DateTime)
>
> @schema.onChange(lastModified, nextReminderTime,
> 'CalendarEventAnnotation.startTime')
> def updateNextImportantDate(...):
> ...
>
> which is a way of allowing the updateNextImportantDate method to be
> called whenever any of the attributes lastModified, nextReminderTime
> or CalendarEventAnnotation.startTime change. (The latter is assuming
> Events are implemented as an Annotation stamp).
>
> - Longer term, we will need to add support for specifying more than
> just a method for the attribute aspect. (In the case of annotations,
> as alluded to in the "Stamp/Annotation-related questions" thread, we'd
> need to point to a method defined in the annotation class; i.e. the
> schema API will need to pass an Importable here).
>
> 2) ContentItem.lastModified:
>
> - Andi will add support for a commit-time hook to the repository.
>
> - Phillip will figure out a way for "substantive" changes to take
> advantage of that hook. More specifically, a way for all ContentItem
> changes to be considered substantive, unless otherwise specified.
>
>
> A couple of notes:
>
> 1. Andi was a little concerned that the syntax in 1) would lead to
> ambiguities in the order in which the callbacks would take place.
>
> 2. The example in 1) is an interesting one, because it involves code
> (updateNextImportantDate) being called in response to a change in
> lastModified. However, the change in lastModified could be happening
> as a result of the commit-time hook, so it would be good to make sure
> that any further changes made in updateNextImportantDate() are handled
> appropriately (an unbounded recursion being inappropriate :).
>
> --Grant
>
>
> On 10 Aug, 2006, at 08:46, Andi Vajda wrote:
>
>>
>> On Wed, 9 Aug 2006, Bryan Stearns wrote:
>>
>>> That's kind of the reverse of what I was suggesting: the method name
>>> hangs off any attribute that needs the method to be called, instead
>>> of hanging it off the attribute the method updates. I think it might
>>> work, though - something like:
>>
>> I think, we're in agreement actually. I was suggesting hanging the
>> method off the attribute that changed not off the attribute that
>> needs to change, ie the attribute the method updates.
>>
>> In other words, 'foo' changes, a method called say 'onFooChanged'
>> updates another attribute, say 'lastModified'
>>
>>> class Note(ContentItem):
>>> nextReminderTime = schema.One(schema.DateTime,
>>> onChange='updateNextImportantDate')
>>
>> Right, in other words, 'nextReminderTime' changes, a method called
>> 'updateNextImportantDate' is called to make more changes elsewhere.
>>
>>> Also, using this for lastModified (as I've shown) looks possible,
>>> though too wordy (since a parcel developer would have to remember to
>>> put "onChange=updateLastModified" on every user-editable attribute).
>>
>> Yep, but one would hope that this list of attributes is finite.
>> Another solution would be to introduce something discussed a long
>> while ago but never implemented, another attribute aspect describing
>> a difference between 'user' or 'domain' attributes and
>> 'implementation' attributes. If we did this, we could have a sort of
>> onUserValueChanged() method that works like onValueChanged() today.
>> Still, it seems that that would reproduce what now seems like a
>> mistake in hindsight, onValueChanged(), too big of a hammer.
>>
>> I think the per-attribute (yet optional) aspect naming a method to
>> invoke on the item when the attribute changes holds the most promise.
>>
>> Andi..
>>
>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>
>> Open Source Applications Foundation "chandler-dev" mailing list
>> http://lists.osafoundation.org/mailman/listinfo/chandler-dev
>
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> Open Source Applications Foundation "chandler-dev" mailing list
> http://lists.osafoundation.org/mailman/listinfo/chandler-dev
More information about the chandler-dev
mailing list