Ryan, I'd sure like to see what was going on with some heavy logging to see how your method was being called twice via the order_success signal, as our entire store relies on that signal in all cases for various types of custom processing, and I have not seen or heard anything since we launched to indicate it is being called twice.
Do you have sender defined in your connect()? That is: order_success.connect(listener_function, sender=None) If the signal is actually firing twice, this must be a bug, and we should certainly figure out why/where it is happening. Too many stores, imo, would want to depend on this signal to allow a bug not to be found. I can't duplicate it over here. Best, Bob On Fri, Oct 23, 2009 at 10:58 PM, Ryan Headley <[email protected]>wrote: > Okay...your confused?? lol, so am i so lets first talk semantics. When I > say CustomProduct, Im not talkng about product.models.CustomProduct...quite > literally I mean: > > class MyProduct(Product): > my custom fields here > > When MyProduct is added to an order we discovered order_sucess was firing > twice. (We spit out an xml representation of the order to the filesystem > for retrieval by an SAP backend, and for each order we were getting two > files). Through various troubleshooting methods and some logging we were > able to verify that order_sucess was getting fired twice. > > Chris pointed me to the order_success method of DownloadableProduct and > that same spot of code you mention (line 917 or so). This led me to believe > that if i created a method on MyProduct called order_success, that this > method would be the action that gets called when order_success gets fired. > However, nothin we did would get the code in that method to run. > > In would agree that it appears our MyProduct is not being recognized as a > subtype..so we abandoned that idea. This is what our signal code looks > like. (its been placed at the bottom of models.py in oru main app: > > def sap_export(sender, **kwargs): > our code here > > order_success.connect(sap_export) # register the handler > > We've added code to work around our issue in the sap_export method. > It appeared to us that our sap_export method was getting called twice for > each order. > > > Hope that clears up our issue -- let me know if you want more info. > > > > > On Fri, Oct 23, 2009 at 5:06 PM, Bob Waycott <[email protected]> wrote: > >> My assumption as to why the signal got called twice was that is was >>> calling it once for the Parent product (Satchmo's model) and once for our >>> Child Product (the inherited Product). My other assumption (and this could >>> be way off) was that had I done it the way Satchmo intends it to be done, >>> that our subtype product would have been found and THAT model's >>> order_success method would have run. (for reference, here is the link to >>> the discussion I had with Chris: >>> http://groups.google.com/group/satchmo-users/browse_thread/thread/6f88be5a09bb6f41/6cd1799fd3c823f4?hl=en&lnk=gst&q=signal+called+twice#6cd1799fd3c823f4 >>> ) >> >> >> >> Ryan (and Chris): >> >> I think I'm confused here. >> >> Sounds to me like Ryan's custom order_success method wasn't called because >> his CustomProduct wasn't being picked up as a subtype, given what I see in >> the code for the Order.order_success() method (lines 917-925). >> >> Ryan, if your goal was to have your custom order_success() method picked >> up at this point, then wouldn't we want to troubleshoot/define how a >> CustomProduct via model inheritance gets picked up as a subtype via the call >> to `orderitem.product.get_subtype_with_attr('order_success')`? >> >> However, listening to the order_success SIGNAL sent via the Order object >> is a different matter entirely, from how I'm reading the code (and I could >> very well be wrong). An Order is a unique object. It should send the SIGNAL >> once and only once. If it is sending the signal more than once, then there >> must be a bug somewhere that is causing Order.order_success() to be called >> more than once -- as this is the method that sends the Order.order_success >> signal. >> >> From how I read the code, this is the workflow (in pseudocode and/or plain >> English) of Order.order_success(): >> >> log "Order Success" >> execute order_success() method for every Product.sub_type that defines an >> order_sucess() method of its own >> send order_success SIGNAL >> >> Given this expected workflow, it has to be a bug if the signal is sent >> more than once. >> >> Now, if the problem is the order_success() method is not called, then it >> seems to me the problem is that your custom product is not being recognized >> as a valid subtype? >> >> >> > > > -- > http://www.sudovi.com/ > http://www.twitter.com/lifewithryan > http://www.thecommontongue.com > http://www.lifewithryan.com/ > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Satchmo users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/satchmo-users?hl=en -~----------~----~----~----~------~----~------~--~---
