made _lock a module global variable. made set_session_key thread safe.
parent
c36d689690
commit
0a285dd6bf
|
@ -6,7 +6,9 @@ __version__ = "0.2"
|
||||||
__license__ = "GNU Lesser General Public License"
|
__license__ = "GNU Lesser General Public License"
|
||||||
__package__ = "lastfm"
|
__package__ = "lastfm"
|
||||||
|
|
||||||
|
from threading import Lock
|
||||||
from lastfm.decorators import cached_property, async_callback
|
from lastfm.decorators import cached_property, async_callback
|
||||||
|
_lock = Lock()
|
||||||
|
|
||||||
class Api(object):
|
class Api(object):
|
||||||
"""The class representing the last.fm web services API."""
|
"""The class representing the last.fm web services API."""
|
||||||
|
@ -64,7 +66,6 @@ class Api(object):
|
||||||
self._no_cache = no_cache
|
self._no_cache = no_cache
|
||||||
self._debug = debug
|
self._debug = debug
|
||||||
self._last_fetch_time = datetime.now()
|
self._last_fetch_time = datetime.now()
|
||||||
self._lock = Lock()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def api_key(self):
|
def api_key(self):
|
||||||
|
@ -113,9 +114,10 @@ class Api(object):
|
||||||
if session_key is not None:
|
if session_key is not None:
|
||||||
self._session_key = session_key
|
self._session_key = session_key
|
||||||
else:
|
else:
|
||||||
params = {'method': 'auth.getSession', 'token': self.auth_token}
|
with _lock:
|
||||||
self._session_key = self._fetch_data(params, sign = True).findtext('session/key')
|
params = {'method': 'auth.getSession', 'token': self.auth_token}
|
||||||
self._auth_token = None
|
self._session_key = self._fetch_data(params, sign = True).findtext('session/key')
|
||||||
|
self._auth_token = None
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def auth_token(self):
|
def auth_token(self):
|
||||||
|
@ -644,7 +646,7 @@ class Api(object):
|
||||||
return urllib.urlencode([(k, self._encode(parameters[k])) for k in keys if parameters[k] is not None])
|
return urllib.urlencode([(k, self._encode(parameters[k])) for k in keys if parameters[k] is not None])
|
||||||
|
|
||||||
def _read_url_data(self, opener, url, data = None):
|
def _read_url_data(self, opener, url, data = None):
|
||||||
with self._lock:
|
with _lock:
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
delta = now - self._last_fetch_time
|
delta = now - self._last_fetch_time
|
||||||
delta = delta.seconds + float(delta.microseconds)/1000000
|
delta = delta.seconds + float(delta.microseconds)/1000000
|
||||||
|
@ -767,7 +769,6 @@ class Api(object):
|
||||||
return "<lastfm.Api: %s>" % self._api_key
|
return "<lastfm.Api: %s>" % self._api_key
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from threading import Lock
|
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import urllib
|
import urllib
|
||||||
|
|
Loading…
Reference in New Issue