home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 January / maximum-cd-2011-01.iso / DiscContents / calibre-0.7.26.msi / file_975 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-10-31  |  2.9 KB  |  76 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __license__ = 'GPL v3'
  5. __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
  6. __docformat__ = 'restructuredtext en'
  7. import threading
  8. import re
  9. import json
  10. from calibre import browser
  11.  
  12. class xISBN(object):
  13.     QUERY = 'http://xisbn.worldcat.org/webservices/xid/isbn/%s?method=getEditions&format=json&fl=form,year,lang,ed'
  14.     
  15.     def __init__(self):
  16.         self.lock = threading.RLock()
  17.         self._data = []
  18.         self._map = { }
  19.         self.br = browser()
  20.         self.isbn_pat = re.compile('[^0-9X]', re.IGNORECASE)
  21.  
  22.     
  23.     def purify(self, isbn):
  24.         return self.isbn_pat.sub('', isbn.upper())
  25.  
  26.     
  27.     def fetch_data(self, isbn):
  28.         url = self.QUERY % isbn
  29.         data = self.br.open_novisit(url).read()
  30.         data = json.loads(data)
  31.         if data.get('stat', None) != 'ok':
  32.             return []
  33.         data = data.get('list', [])
  34.         ans = []
  35.         for rec in data:
  36.             forms = rec.get('form', [])
  37.             forms = _[1]
  38.             if forms:
  39.                 ans.append(rec)
  40.                 continue
  41.             []
  42.         
  43.         return ans
  44.  
  45.     
  46.     def get_data(self, isbn):
  47.         isbn = self.purify(isbn)
  48.         self.lock.__enter__()
  49.         
  50.         try:
  51.             return self._data[self._map[isbn]]
  52.         finally:
  53.             pass
  54.  
  55.  
  56.     
  57.     def get_associated_isbns(self, isbn):
  58.         data = self.get_data(isbn)
  59.         ans = set([])
  60.         for rec in data:
  61.             for i in rec.get('isbn', []):
  62.                 ans.add(i)
  63.             
  64.         
  65.         return ans
  66.  
  67.  
  68. xisbn = xISBN()
  69. if __name__ == '__main__':
  70.     import sys
  71.     isbn = sys.argv[-1]
  72.     print xisbn.get_data(isbn)
  73.     print 
  74.     print xisbn.get_associated_isbns(isbn)
  75.  
  76.