Hi Alex,

I have a similar use case, and fixed it by buffering the signals until the
session transaction completes. On rollback, the buffered signals are
discarded; on successful commit, the signals are truly emitted.

Cheers,
Jason


On Mon, Sep 22, 2014 at 2:20 AM, Alex Michael <alex...@tictail.com> wrote:

> Hey,
>
> From my understanding it's recommended that the business logic does not
> commit the session and that the application itself handles the session
> lifecycle. Following that, I have all the session handling logic in my
> controllers so the business logic just changes the objects as necessary and
> then the controllers call .commit() when needed. When a model is committed
> and say X property has changed, I need to send a queue message. My problem
> is that I'm not sure where the logic for emitting such signals should live
> in order to avoid duplicating logic all over the place. An example:
>
> I have an order which I take a payment for. If the payment is successful,
> I mark the order as paid. At this point I need to emit a signal. If the
> order is pending, I wait for a notification to come in from the payment
> gateway and then mark the order as paid. My business logic has a
> `mark_as_paid` function which changes the status of the order. Ideally I
> would like to emit the signal in the `mark_as_paid` method but I don't know
> at that point in time if the session commit will succeed or not. The
> alternative would be to emit the signal manually after the session was
> committed but that would (1) lead to duplicated logic since `mark_as_paid`
> can be triggered from many code paths (2) not always work since the status
> of the order is determined dynamically so the caller doesn't actually know
> what "changed" in order to emit the correct signal.
>
> Am I missing something here? I'd appreciate any help.
>
> Thanks!
>
> -- alex
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to