Thanks Tom!

I somehow was under the impression that each instantiated plugin would
overwrite the data that is stored on the class level.

What would be the best approach if i don't want to create an __init__
for all my Plugin-Subclasses?
Would it help to define the queryset-attribute as a descriptor which
automatically stores the assigned data on the instance (or an readable
and writeable attribute of my class) and always returns "fresh" data?
It's more a question of aesthetics but it would be nice if a plugin
could be defined with a minimum of lines.

Andreas

On 17 Feb., 13:13, Tom Evans <[email protected]> wrote:
> On Fri, Feb 17, 2012 at 12:00 PM, andreas <[email protected]> wrote:
> > Sorry for the vague description, but i find it hard to exactly name
> > the problem i am facing. Hopefully my description is clear enough:
>
> > I am working on a reporting app that collects and displays events/
> > actions that happened in my application.
>
> > I wrote a litte plugin base class and added plugins for all of the
> > relevant events i am interested in.
> > Basically a plugin only defines the query that is used to return the
> > matching events.
>
> > Now i am facing the situation that the queries are only evaluated
> > once:
> > A view that instantiates all my plugins and collects their events
> > (get_plugin_data) always returns the same data unless i restart my
> > server.
>
> >        class DigestPluginBase(object):
>
> >            def get_plugin_data(self):
> >                if self.queryset:
> >                    data = list(self.queryset)
> >                else:
> >                    data = []
> >                return data
>
>          class UpdatesNew(DigestPluginBase):
>                def __init__(self, *args, **kwargs):
>                    self.queryset =
> Update.objects.filter(timestamp__gte=yesterday)
>
>
>
> > Querysets are lazy, so i assume this is a problem with the way i
> > assign/define the queryset for my plugin.
> > But then i don't see how the old data is stored in my class as the
> > there should be a new instance (and new queries) of my class every
> > time the view is called.
> > So where do i go wrong?
>
> > On a side note: Can you think of more elegant ways to define the
> > querysets for my plugins?
>
> FTFY
>
> How you had it before set a class level attribute. It exists on each
> instance, but only as a copy of that on the class. Set it up as an
> instance attribute (see inline fix) and it will be recalculated each
> time your class is instantiated.
>
> Cheers
>
> Tom

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to