Shopify / shopify_python_api

ShopifyAPI library allows Python developers to programmatically access the admin section of stores
http://shopify.github.io/shopify_python_api
MIT License
1.27k stars 353 forks source link

Get rid of Class variable storage and move to instance storage #191

Open corby opened 7 years ago

corby commented 7 years ago

I'm building an admin/monitoring server that handles requests from both out production and qa Shopify store. In the current setup, the user/password/site_uri are stored at the class level, so I can't create a prod session and a qa session and store them in memory. For every request to the REST server I have to clear the current class variables and set for requested environment.

Additionally, this is not thread safe. If two REST requests arrive at the same time for different endpoints, they will clobber each other.

metatick commented 6 years ago

+1 for this - very easy to solve this and will prevent unexpected behaviour for apps running under different environments (eg. threads vs processes, persistent vs cgi).

VichoReyes commented 1 year ago

(maybe this wasn't in place when you raised this issue, I'm not sure)

@corby The sessions are actually in thread-local storage. I don't fully understand how it works (I'm reading about metaclasses now) but the ShopifyResource class somehow uses ShopifyResourceMeta properties, which are based on the _theadlocal object, an instance of threading.local.

I believe this makes them thread-safe.

odie5533 commented 10 months ago

@corby The sessions are actually in thread-local storage.

It also makes it difficult to work on them in an async environment because work is not always done on the same thread.