diff --git a/ox/api.py b/ox/api.py index 042d0be..51742c2 100644 --- a/ox/api.py +++ b/ox/api.py @@ -227,6 +227,8 @@ def signin(url): url = 'https://%s/api/' % url else: site = url.split('/')[2] + if not url.endswith('/'): + url += '/' api = API(url) update = False try: diff --git a/ox/cache.py b/ox/cache.py index c475322..904f31d 100644 --- a/ox/cache.py +++ b/ox/cache.py @@ -456,7 +456,47 @@ class RedisCache(KVCache): self.backend = redis.from_url(self.url) -if cache_path().startswith('fs:'): +class FallbackCache(KVCache): + caches = [] + + def __init__(self): + fallback = cache_path() + for path in fallback.split('|'): + os.environ['oxCACHE'] = path + if path.startswith('redis:'): + store = RedisCache() + elif path.startswith('memcache:'): + store = MemCache() + self.caches.append(store) + os.environ['oxCACHE'] = fallback + + def get(self, url, data, headers=None, timeout=-1, value="data"): + if timeout == 0: + return None + + info_key, data_key = self._keys(url, data, headers) + for cache in self.caches: + try: + info = cache.backend.get(info_key) + except: + info = None + if info: + return cache.get(url, data, headers, timeout, value) + return None + + def set(self, url, post_data, data, headers): + self.caches[0].set(url, post_data, data, headers) + for cache in self.caches[1:]: + cache.delete(url, post_data, headers) + + def delete(self, url, data=None, headers=None): + for cache in self.caches: + cache.delete(url, data, headers) + + +if '|' in cache_path(): + store = FallbackCache() +elif cache_path().startswith('fs:'): store = FileCache() elif cache_path().startswith('redis:'): store = RedisCache() diff --git a/ox/web/imdb.py b/ox/web/imdb.py index 641fdd7..4821b0c 100644 --- a/ox/web/imdb.py +++ b/ox/web/imdb.py @@ -187,7 +187,7 @@ class Imdb(SiteParser): ], type='int'), 'keyword': { 'page': 'keywords', - 're': '(.*?)']), @@ -224,7 +224,7 @@ class Imdb(SiteParser): 'releasedate': { 'page': 'releaseinfo', 're': [ - '