I just got my wisdom teeth removed so i'm not exactly feeling the greatest, 
however I committed what I've done so far and pushed to my copy of django on 
github.

The goal is to provide a Mixin for class based views, a decorator for class 
based views, a decorator for methods, and a decorator for functions, all from 
the same codebase.

Currently I have the decorator for classes working, and the mixin working. I 
have the places where the other 2 will go but from a combination of not being 
very good at decorators, and not feeling well I haven't finished it yet.

Anyways here's what I've gotten so far: 
https://github.com/dstufft/django/compare/master...universal-mixin-decorators 


On Wednesday, September 21, 2011 at 8:26 AM, Roald de Vries wrote:

> Hi all,
> 
> Haven't seen a comment on this topic for a few days, so was wondering if a 
> core dev can make a design decision yet. I have some spare time in the 
> remainder of this week, so if the (universal) decorator-approach is chosen, I 
> should be able to finish it shortly (the mixin-approach is a bit harder to 
> estimate).
> 
> Cheers, Roald
> 
> 
> On Sep 17, 2011, at 4:32 AM, Alex Gaynor wrote:
> > On Fri, Sep 16, 2011 at 10:27 PM, Donald Stufft <donald.stu...@gmail.com 
> > (mailto:donald.stu...@gmail.com)> wrote:
> > > unittest.skip isn't a Mixin, it turns the class into an exception and 
> > > raises it.
> > > 
> > 
> > It doesn't *turn* a class into anything, it simply returns a function, 
> > instead of a new class, and the function raises SkipTest, the point wasn't 
> > the implementation detail, but rather the syntax and pattern at work. 
> > 
> > > django.test.utils.override_settings is a mixin and it's terrible, it 
> > > dynamically creates a new subclass, and overrides 2 methods. It's magic 
> > > and more complex then need be.
> > > 
> > 
> > 
> > a) it's not a mixin
> > b) yes, it creates subclasses, because the alternative is mutating the 
> > original class, which isn't how people generally expect decorators to work, 
> > we expect them to be syntactic sugar for:
> > 
> > A = wrap(*args)(A)
> > 
> > such that we can also do
> > 
> > B = wrap(*args)(A)
> > 
> > and have two classes (or functions).
> > 
> > c) I'm not sure how it's magic, but certainly if it's too complex we'd take 
> > patches to simplify the implementation. 
> > 
> > > 
> > > On Friday, September 16, 2011 at 9:50 PM, Alex Gaynor wrote:
> > > 
> > > 
> > > 
> > > > 
> > > > 
> > > > On Fri, Sep 16, 2011 at 9:47 PM, James Bennett <ubernost...@gmail.com 
> > > > (mailto:ubernost...@gmail.com)> wrote:
> > > > >  We have the following constraints:
> > > > > 
> > > > >  1. Django supports class-based views.
> > > > > 
> > > > >  2. Django supports function-based views (ultimately these are the 
> > > > > same
> > > > >  thing, which is that Django supports anything as a 'view' so long as
> > > > >  it's callable, accepts an HttpRequest as its first positional 
> > > > > argument
> > > > >  when being called and either returns an HttpResponse or raises an
> > > > >  exception).
> > > > > 
> > > > >  3. The natural way to add processing in/around a class is subclassing
> > > > >  and either overriding or mixing in.
> > > > > 
> > > > >  4. The natural way to add processing in/around around a function is 
> > > > > decorating.
> > > > > 
> > > > >  Any solution to this needs to address those constraints, and allow
> > > > >  code to look and feel natural.
> > > > > 
> > > > >  Based on that, some arrangement which allows the same basic logic to
> > > > >  exist in a "mixin" (I dislike that word) for classes and a decorator
> > > > >  for functions seems most appropriate, even if it does mean having two
> > > > >  ways to do things -- that's a distinction I think we can live with, 
> > > > > as
> > > > >  people will appreciate that it doesn't result in strange-looking 
> > > > > code.
> > > > 
> > > > I agree with all your points, except #3, I think it's an over 
> > > > simplification. There's another way to change a class: class 
> > > > decorators. And there's ample precedent for their use in such a manner, 
> > > > unittest's skip decorators, our own decorators for swapping settings 
> > > > during testing, etc.
> > > > 
> > > > Alex
> > Alex
> 
>  -- 
>  You received this message because you are subscribed to the Google Groups 
> "Django developers" group.
>  To post to this group, send email to django-developers@googlegroups.com 
> (mailto:django-developers@googlegroups.com).
>  To unsubscribe from this group, send email to 
> django-developers+unsubscr...@googlegroups.com 
> (mailto:django-developers+unsubscr...@googlegroups.com).
>  For more options, visit this group at 
> http://groups.google.com/group/django-developers?hl=en.

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

Reply via email to