Shopify/shopify_python_api — pull request #5 by dylanahsmith (2012-02-13 21:17:05+00:00)
Title: Make the library thread-safe, allowing concurrent connections. Fixes #4

@csaunders for review

Thread-local storage is used to store the connection and variables used to
set up the connection object. This allows multiple threads to concurrently
make API requests for different shops.

The user, password, site and timeout properties are used to change
their respective thread-local variables, but they will also set the
class variables _user, _password, _site and _timeout remain for
backwards compatibility. These class variables are used as default
values when the thread-local value has not been set, allowing the
main thread to set up these default values before creating other
threads. All thread-local values are set as soon as the connection object
is created in a thread, through the connection property, to avoid
further interference between threads.

The _format variable was not make thread-local in the same way because
currently only XML is supported, and the ActiveResource class in
pyactiveresource accesses cls._format in a few places where it
should refer to the cls.format property. This makes localizing it
more difficult until pyactiveresource is fixed.