Re: New-style middleware

2016-11-23 Thread Torsten Bronger
Hallöchen!

Carl Meyer writes:

> [...]
>
> Yes, I agree with you that for middleware which don't implement
> request or response processing (only process_exception,
> process_view, or process_template_response), the new style is less
> concise, because it requires implementing a boilerplate __init__
> and __call__. To be honest, the primary consideration in the new
> middleware was request and response processing, and your case did
> not receive as much attention as it perhaps should have.

Thanks for the explanation!  The boilerplate is ineed not too bad.
I just wanted to make sure to not have overlooked something.

Regards,
Torste.

-- 
Torsten Bronger

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/87inreqxer.fsf%40physik.rwth-aachen.de.
For more options, visit https://groups.google.com/d/optout.


Re: New-style middleware

2016-11-22 Thread Carl Meyer
Hi Torsten,

I worked on the design and implementation of new-style middleware.

On 11/22/2016 01:30 PM, Torsten Bronger wrote:
> Hallöchen!
> 
> Considering the following old-style middleware class:
> 
> class ExceptionsMiddleware:
> def process_exception(self, request, exception):
> ...
> 
> I convert this to new-style middleware by inserting two methods:
> 
> class ExceptionsMiddleware:
> def __init__(self, get_response):
> self.get_response = get_response
> def __call__(self, request):
> return self.get_response(request)
> def process_exception(self, request, exception):
> ...
> 
> Is this really correct?  Actually, the old way looks more concise to
> me.  In particular, is there a reason why Django does not provide a
> non-deprecated base class for middleware like:
> 
> class Middleware:
> def __init__(self, get_response):
> self.get_response = get_response
> def __call__(self, request):
> return self.get_response(request)

Yes, I agree with you that for middleware which don't implement request
or response processing (only process_exception, process_view, or
process_template_response), the new style is less concise, because it
requires implementing a boilerplate __init__ and __call__. To be honest,
the primary consideration in the new middleware was request and response
processing, and your case did not receive as much attention as it
perhaps should have.

I've considered a few possible approaches to fix this, and I think your
suggestion of a built-in base class that implements the
simplest-possible version of __init__ and __call__ makes sense; it is
the least magical and most explicit option.

Carl

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/1e256b81-9e79-88ec-46d9-ee8041e5d712%40oddbird.net.
For more options, visit https://groups.google.com/d/optout.


signature.asc
Description: OpenPGP digital signature


New-style middleware

2016-11-22 Thread Torsten Bronger
Hallöchen!

Considering the following old-style middleware class:

class ExceptionsMiddleware:
def process_exception(self, request, exception):
...

I convert this to new-style middleware by inserting two methods:

class ExceptionsMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
return self.get_response(request)
def process_exception(self, request, exception):
...

Is this really correct?  Actually, the old way looks more concise to
me.  In particular, is there a reason why Django does not provide a
non-deprecated base class for middleware like:

class Middleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
return self.get_response(request)

(I know MiddlewareMixin but it is deprecated.)

Tschö,
Torsten.

-- 
Torsten Bronger

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/87oa17kxsd.fsf%40physik.rwth-aachen.de.
For more options, visit https://groups.google.com/d/optout.