home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- __license__ = 'GPL v3'
- __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
- __docformat__ = 'restructuredtext en'
- import threading
- import re
- import json
- from calibre import browser
-
- class xISBN(object):
- QUERY = 'http://xisbn.worldcat.org/webservices/xid/isbn/%s?method=getEditions&format=json&fl=form,year,lang,ed'
-
- def __init__(self):
- self.lock = threading.RLock()
- self._data = []
- self._map = { }
- self.br = browser()
- self.isbn_pat = re.compile('[^0-9X]', re.IGNORECASE)
-
-
- def purify(self, isbn):
- return self.isbn_pat.sub('', isbn.upper())
-
-
- def fetch_data(self, isbn):
- url = self.QUERY % isbn
- data = self.br.open_novisit(url).read()
- data = json.loads(data)
- if data.get('stat', None) != 'ok':
- return []
- data = data.get('list', [])
- ans = []
- for rec in data:
- forms = rec.get('form', [])
- forms = _[1]
- if forms:
- ans.append(rec)
- continue
- []
-
- return ans
-
-
- def get_data(self, isbn):
- isbn = self.purify(isbn)
- self.lock.__enter__()
-
- try:
- return self._data[self._map[isbn]]
- finally:
- pass
-
-
-
- def get_associated_isbns(self, isbn):
- data = self.get_data(isbn)
- ans = set([])
- for rec in data:
- for i in rec.get('isbn', []):
- ans.add(i)
-
-
- return ans
-
-
- xisbn = xISBN()
- if __name__ == '__main__':
- import sys
- isbn = sys.argv[-1]
- print xisbn.get_data(isbn)
- print
- print xisbn.get_associated_isbns(isbn)
-
-