On 3/10/10 9:07 AM, Andrey Popp wrote:
>>> I was thinking of this too — it is good to return control back to
>>> application during handling of this kind of errors (4xx). Also it will
>>> convert notfound/forbidden views from special cases of Router
>>> processing cycle to special cases of "exception view".
>>>
>>
>> Right, I think it makes sense... do you think you might want to take a stab
>> at implementing that?
>
> Ok, what about reusing the current view registering/lookup machinery?
> I mean can we treat exception views as views for context defined by
> raised exception? So raising exception is just context switching
> inside request processing.
>
> Pros:
>
> * We can define different exception views for different request predicates.
> * Unification with view machinery.
>
> Cons:
>
> * We cannot access previously located context (if there was one),
> cause it replaced with current exception context.
> * We should register exception views for exception interfaces, not
> classes. This is because adapter lookup uses IRO, not standard MRO.
>

I think it should probably work like this:

- app developers should register views that match with a context that
   equals the exception class itself, the default request type, and
   the empty string as a view name.

- when bfg encounters any exception when calling a view (or trying to
   resolve a root factory, etc.. basically the scope handled currently
   when it catches NotFound/Forbidden), it will do this:

      exc_view = registry.adapters.lookup((req_iface, providedBy(exc)), IView,
                 name='')
      if exc_view is not None:
         response = exc_view(exc, request)

The context of such an "exception view" will be the exception instance itself. 
  If you want a particular exception to be able to use a "real" context, you'll 
make it available as an attribute of the exception for use by the registered 
exception view (e.g. context.context or so).

-- 
Chris McDonough
Agendaless Consulting, Fredericksburg VA
The repoze.bfg Web Application Framework Book: http://bfg.repoze.org/book
_______________________________________________
Repoze-dev mailing list
Repoze-dev@lists.repoze.org
http://lists.repoze.org/listinfo/repoze-dev

Reply via email to