Excerpts from Rob Miller's message of Fri Jan 23 15:57:34 -0500 2009:
> Nicholas Bergson-Shilcock wrote:
> > Excerpts from Rob Miller's message of Fri Jan 23 13:30:36 -0500 2009:
> >> Nicholas Bergson-Shilcock wrote:
> >>> While troubleshooting a bug with the recently added next/previous thread
> >>> links,
> >>> I noticed that getToplevelMessages[1] was not behaving as I expected it
> >>> to.
> >>> Specifically, there were two places where I wanted different behavior:
> >>>
> >>> 1. The function takes an optional boolean argument, recent_first. When
> >>> true,
> >>> the method sorts the threads by their modification dates, with the thread
> >>> with
> >>> the most recent response listed first. Unexpectedly (at least to me), when
> >>> recent_first is false (the default), the threads are returned sorted by
> >>> their
> >>> dates, i.e., by when the initial message was sent. Thus this is *not*
> >>> necessarily the reverse ordering from when specifying recent_first = True.
> >>>
> >>> 2. getToplevelMessages also takes optional start and end arguments for
> >>> specifying a date range. Again, this range uses the dates and not the
> >>> modification dates of the messages. This leads to confusion, particularly
> >>> when
> >>> sorting on the modification, since you will likely not get the results you
> >>> expect (e.g., you'll likely get messages that you thought should have been
> >>> filtered out).
> >>>
> >>> I'd like to modify the function to both sort and filter by
> >>> modification_date.
> >>> This seems to me to be more sensible behavior, particularly because it
> >>> provides
> >>> the expected behavior when dealing with threads. I've grep'd through the
> >>> code
> >>> and it doesn't look like it will break anything, but I wanted to shoot an
> >>> e-mail out to the list to make sure no one was relying on the current
> >>> behavior
> >>> or had some reason to prefer it.
> >> i agree that we should consider some changes here, but i'm not completely
> >> clear on what you're proposing. for instance, for #1 above, i would not
> >> expect recent_first being False to necessarily reverse the order in which
> >> the
> >> threads are returned, so if that's what you're thinking it would do i'm
> >> not
> >> sure i like that idea.
> >>
> >
> > Yes, that is what I was thinking. I agree that setting recent_first to False
> > does not *necessarily* (in the logical sense) need to return the reversed
> > list,
> > however, I still think it's a good idea. At a minimum, the interface needs
> > to
> > be more clearly defined, as right now the only way to know how things are
> > ordered is to read the actual code. Is there a present use case for doing
> > otherwise?
> >
> >> maybe what we need is a better API altogether. instead of a single
> >> boolean,
> >> we might accept a 'sort_key' argument and an optional 'descending' or
> >> 'reversed' boolean argument. this would allow for more expressiveness and
> >> more clarity. would doing things this way meet your needs? does it
> >> complicate things enough to make you balk at wanting to do so right now?
> >>
> >
> > I'm +0 on this, mostly because I think adding this on top of recent_first
> > would
> > be clunky, and doing away with recent_first would change the established
> > interface. My needs could definitely be met by this API, however, assuming
> > there were
> > both sort_on and filter_on (or something similar) keywords.
>
> i'd prefer that we not change the recent_first behavior, but instead
> deprecate
> the use of that argument, so that if it's passed in to the method a
> deprecation warning is sent (using the python 'warnings' package) to the log,
> like so:
>
> _marker = object()
> def getToplevelMessages(self, start=None, end=None, recent_first=_marker,
> sort_on=None, filter_on=None, descending=False):
> if recent_first is not _marker:
> warnings.warn("Use of the 'recent_first' argument to the "
> "getToplevelMessages method is deprecated. "
> "Please use the 'sort_on', 'filter_on', and "
> "'descending' arguments to achieve the desired "
> "results", DeprecationWarning)
> # following would be code that sets 'sort_on' and 'descending'
> # so as to emulate the correct behavior depending on what
> # 'recent_first' was set to
>
> as long as the default behavior (i.e. the behavior when neither recent_first
> nor one of the new keyword args) is the same, this seems to me a reasonable
> transition path.
To recap, here's what I did and how things are working now:
1. Assuming none of the new arguments (sort_on, filter_on or reversed) are
specified, the behavior is identical to before, so no existing code should
break.
2. If recent_first is set explicitly, a DeprecationWarning is written to the
log.
3. You can now choose to filter and sort messages by modification_date (i.e.,
date of most recent reply) in addition to date (which was previously the only
option).
4. I used 'reversed' instead of 'descending' as the boolean argument, since
that name is used for the same functionality in the getMessageReferrers method
5. I updated the doc string and interface definition accordingly. Note I
changed the default here to be recent_first=False, as this was incorrect before
(the docs said True when in the actual implementation it was False).
6. I updated the calls to getToplevelMessages elsewhere in the code to use the
new arguments instead of recent_first
These changes were made on the ui-improvements branch, which rmarianski and I
just merged to trunk.
-Nick
>
> -r
>
--
Archive:
http://www.openplans.org/projects/listen/lists/listen-dev/archive/2009/01/1233262299283
To unsubscribe send an email with subject "unsubscribe" to
[email protected]. Please contact
[email protected] for questions.