Thank you all for your help.  Just a quick update on what happened:

I copied my implementation from SQLAlchemy cookie cutter.

In order to catch errors raised when committing a transactions, I modified 
Rollbar to work above EXC_VIEW and submitted a PR.  I haven’t received any 
response from the Rollbar team yet.  
https://github.com/rollbar/pyrollbar/pull/162 
<https://github.com/rollbar/pyrollbar/pull/162>

— Theron



> On Apr 29, 2017, at 9:43 AM, Theron Luhn <[email protected]> wrote:
> 
> Hmm, complicating things is that Rollbar doesn’t work when over EXCVIEW, 
> since it tries to catch the exception which EXCVIEW swallows.
> 
> Might try to change that behavior and submit a PR, since it seems it’d be 
> most desirable to have Rollbar as far up the stack as possible.
> 
> — Theron
> 
> 
> 
>> On Apr 28, 2017, at 11:45 AM, Bert JW Regeer <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Here is the motivation for that:
>> 
>> https://github.com/Pylons/pyramid_tm/pull/55 
>> <https://github.com/Pylons/pyramid_tm/pull/55>
>> 
>> When Pyramid 1.9 drops, you’ll want to have the following:
>> 
>> rollbar -> pyramid_retry -> pyramid_tm -> EXC_VIEW -> your_app
>> 
>> Bert
>> 
>>> On Apr 28, 2017, at 12:25, Theron Luhn <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> Thanks for pointing me to that SQLAlchemy cookie cutter, it was very 
>>> helpful.  I was able to get something up and working with pyramid_tm and 
>>> zope.sqlalchemy.
>>> 
>>> Do you know the motivation for pyramid_tm to be above EXC_VIEW by default?  
>>> I moved it below EXC_VIEW since I wanted commit errors to be handled by the 
>>> exception views.  Is there any reason why I shouldn’t do this?
>>> 
>>> — Theron
>>> 
>>> 
>>> 
>>>> On Apr 28, 2017, at 12:12 AM, Bert JW Regeer <[email protected] 
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>> Sorry, I fired a little too soon…
>>>> 
>>>> You might want to look at the current state of the art in our sqlalchemy 
>>>> cookie cutter:
>>>> 
>>>> https://github.com/Pylons/pyramid-cookiecutter-alchemy 
>>>> <https://github.com/Pylons/pyramid-cookiecutter-alchemy>
>>>> 
>>>> Request finalized callbacks are explicitly outside of tweens, and outside 
>>>> of any encapsulation.
>>>> 
>>>> You’ll want to look at pyramid_tm or build a tween yourself that handles 
>>>> things in a similar fashion.
>>>> 
>>>>> On Apr 28, 2017, at 00:20, Theron Luhn <[email protected] 
>>>>> <mailto:[email protected]>> wrote:
>>>>> 
>>>>> I have a pretty standard setup of Pyramid and SQLAlchemy, based off 
>>>>> http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/database/sqlalchemy.html
>>>>>  
>>>>> <http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/database/sqlalchemy.html>
>>>>> 
>>>>> However, this has a problem:  The `cleanup` callback executes *after* the 
>>>>> tween has returned.  I use tweens for both error logging (Rollbar) and 
>>>>> request logging (output via python-fluent-loggerd).  This means that if 
>>>>> the commit and associated flush fail, neither my request logger nor error 
>>>>> logging catch it.
>>>>> 
>>>>> For example, if my tween looked like this:
>>>>> 
>>>>> 
>>>>> class Tween:
>>>>>     def __init__(self, handler, register):
>>>>>         self.handler = handler
>>>>> 
>>>>>     def __call__(self, request):
>>>>>         start = time()
>>>>>         response = self.handler(request)
>>>>>         duration = time() - start
>>>>>         log(duration, response.status_code)  # This shows a success
>>>>>         return response  # session.commit() fails sometime after this
>>>>> 
>>>>> 
>>>>> The log call would report an HTTP 200, even the end result may be a HTTP 
>>>>> 500 due to a failure in session.commt()
>>>>> 
>>>>> The obvious solution is to move logging to the WSGI middleware layer, but 
>>>>> then I lose all the Pyramid-specific details, which I am loath to do.  I 
>>>>> could also manually add a try/except to handle errors in the cleanup and 
>>>>> report to Rollbar, but that still means my request logs show a success.
>>>>> 
>>>>> Is there a way I can force SQLAlchemy to commit/rollback (or at least 
>>>>> flush) before the passing the baton back to the tweens?
>>>>> 
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google Groups 
>>>>> "pylons-discuss" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>>> email to [email protected] 
>>>>> <mailto:[email protected]>.
>>>>> To post to this group, send email to [email protected] 
>>>>> <mailto:[email protected]>.
>>>>> To view this discussion on the web visit 
>>>>> https://groups.google.com/d/msgid/pylons-discuss/a98bf35f-d120-40b4-8168-fe4fc2f09f84%40googlegroups.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/pylons-discuss/a98bf35f-d120-40b4-8168-fe4fc2f09f84%40googlegroups.com?utm_medium=email&utm_source=footer>.
>>>>> For more options, visit https://groups.google.com/d/optout 
>>>>> <https://groups.google.com/d/optout>.
>>>> 
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to a topic in the 
>>>> Google Groups "pylons-discuss" group.
>>>> To unsubscribe from this topic, visit 
>>>> https://groups.google.com/d/topic/pylons-discuss/s5frQK7ES-s/unsubscribe 
>>>> <https://groups.google.com/d/topic/pylons-discuss/s5frQK7ES-s/unsubscribe>.
>>>> To unsubscribe from this group and all its topics, send an email to 
>>>> [email protected] 
>>>> <mailto:[email protected]>.
>>>> To post to this group, send email to [email protected] 
>>>> <mailto:[email protected]>.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/pylons-discuss/B511E99D-97ED-4088-AC83-230157C0E798%400x58.com
>>>>  
>>>> <https://groups.google.com/d/msgid/pylons-discuss/B511E99D-97ED-4088-AC83-230157C0E798%400x58.com?utm_medium=email&utm_source=footer>.
>>>> For more options, visit https://groups.google.com/d/optout 
>>>> <https://groups.google.com/d/optout>.
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "pylons-discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected] 
>>> <mailto:[email protected]>.
>>> To post to this group, send email to [email protected] 
>>> <mailto:[email protected]>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/pylons-discuss/5CA12DCD-F1F8-40E1-9037-EDC270ED382E%40luhn.com
>>>  
>>> <https://groups.google.com/d/msgid/pylons-discuss/5CA12DCD-F1F8-40E1-9037-EDC270ED382E%40luhn.com?utm_medium=email&utm_source=footer>.
>>> For more options, visit https://groups.google.com/d/optout 
>>> <https://groups.google.com/d/optout>.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "pylons-discuss" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/pylons-discuss/s5frQK7ES-s/unsubscribe 
>> <https://groups.google.com/d/topic/pylons-discuss/s5frQK7ES-s/unsubscribe>.
>> To unsubscribe from this group and all its topics, send an email to 
>> [email protected] 
>> <mailto:[email protected]>.
>> To post to this group, send email to [email protected] 
>> <mailto:[email protected]>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/pylons-discuss/E189DD60-2F5A-4D44-96AF-FB5A5D43670D%400x58.com
>>  
>> <https://groups.google.com/d/msgid/pylons-discuss/E189DD60-2F5A-4D44-96AF-FB5A5D43670D%400x58.com?utm_medium=email&utm_source=footer>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "pylons-discuss" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/pylons-discuss/s5frQK7ES-s/unsubscribe 
> <https://groups.google.com/d/topic/pylons-discuss/s5frQK7ES-s/unsubscribe>.
> To unsubscribe from this group and all its topics, send an email to 
> [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/pylons-discuss/81D9EFCB-8E51-43FC-BC70-3B4B36106D83%40luhn.com
>  
> <https://groups.google.com/d/msgid/pylons-discuss/81D9EFCB-8E51-43FC-BC70-3B4B36106D83%40luhn.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pylons-discuss/28F8F117-9DC7-4940-A1D5-22842063E8B6%40luhn.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to