def get_loan(identifier, user_key=None): """Returns the loan object for given identifier, if a loan exists. If user_key is specified, it returns the loan only if that user is borrowed that book. """ _loan = None account = None if user_key: if user_key.startswith('@'): account = OpenLibraryAccount.get(link=user_key) else: account = OpenLibraryAccount.get(key=user_key) d = web.ctx.site.store.get("loan-" + identifier) if d and (user_key is None or (d['user'] == account.username) or \ (d['user'] == account.itemname)): loan = Loan(d) if loan.is_expired(): return loan.delete() try: _loan = _get_ia_loan(identifier, account and userkey2userid(account.username)) except Exception as e: pass try: _loan = _get_ia_loan(identifier, account and account.itemname) except Exception as e: pass return _loan
def get_loan(identifier, user_key=None): """Returns the loan object for given identifier, if a loan exists. If user_key is specified, it returns the loan only if that user is borrowed that book. """ _loan = None account = None if user_key: if user_key.startswith('@'): account = OpenLibraryAccount.get(link=user_key) else: account = OpenLibraryAccount.get(key=user_key) d = web.ctx.site.store.get("loan-" + identifier) if d and (user_key is None or (d['user'] == account.username) or \ (d['user'] == account.itemname)): loan = Loan(d) if loan.is_expired(): return loan.delete() try: _loan = _get_ia_loan(identifier, account and userkey2userid(account.username)) except Exception as e: pass try: _loan = _get_ia_loan(identifier, account and account.itemname) except Exception as e: pass return _loan
def get_waitinglist_for_user(user_key): """Returns the list of records for all the books that a user is waiting for.""" waitlist = [] account = OpenLibraryAccount.get(key=user_key) if account.itemname: waitlist.extend(WaitingLoan.query(userid=account.itemname)) waitlist.extend(WaitingLoan.query(userid=lending.userkey2userid(user_key))) return waitlist
def new(cls, **kw): user_key = kw['user_key'] itemname = kw.get('itemname', '') if not itemname: account = OpenLibraryAccount.get(key=user_key) itemname = account.itemname _wl_api.join_waitinglist(kw['identifier'], itemname) return cls.find(user_key, kw['identifier'], itemname=itemname)
def get_loans_of_user(user_key): """TODO: Remove inclusion of local data; should only come from IA""" account = OpenLibraryAccount.get(username=user_key.split('/')[-1]) loandata = web.ctx.site.store.values(type='/type/loan', name='user', value=user_key) loans = [Loan(d) for d in loandata] + (_get_ia_loans_of_user(account.itemname) + _get_ia_loans_of_user(userkey2userid(user_key))) return loans
def new(cls, **kw): user_key = kw['user_key'] itemname = kw.get('itemname', '') if not itemname: account = OpenLibraryAccount.get(key=user_key) itemname = account.itemname _wl_api.join_waitinglist(kw['identifier'], itemname) return cls.find(user_key, kw['identifier'], itemname=itemname)
def get_loans_of_user(user_key): """TODO: Remove inclusion of local data; should only come from IA""" account = OpenLibraryAccount.get(username=user_key.split('/')[-1]) loandata = web.ctx.site.store.values(type='/type/loan', name='user', value=user_key) loans = [Loan(d) for d in loandata] + (_get_ia_loans_of_user(account.itemname) + _get_ia_loans_of_user(userkey2userid(user_key))) return loans
def get_waitinglist_for_user(user_key): """Returns the list of records for all the books that a user is waiting for. """ waitlist = [] account = OpenLibraryAccount.get(key=user_key) if account.itemname: waitlist.extend(WaitingLoan.query(userid=account.itemname)) waitlist.extend(WaitingLoan.query(userid=lending.userkey2userid(user_key))) return waitlist
def find(cls, user_key, identifier, itemname=None): """Returns the waitingloan for given book_key and user_key. Returns None if there is no such waiting loan. """ if not itemname: account = OpenLibraryAccount.get(key=user_key) itemname = account.itemname result = cls.query(userid=itemname, identifier=identifier) if result: return result[0]
def find(cls, user_key, identifier, itemname=None): """Returns the waitingloan for given book_key and user_key. Returns None if there is no such waiting loan. """ if not itemname: account = OpenLibraryAccount.get(key=user_key) itemname = account.itemname result = (cls.query(userid=itemname, identifier=identifier) or cls.query(userid=lending.userkey2userid(user_key), identifier=identifier)) if result: return result[0]
def get_user_key(self): user_key = self.get("user_key") if user_key: return user_key userid = self.get("userid") username = "" if userid.startswith('@'): account = OpenLibraryAccount.get(link=userid) username = account.username elif userid.startswith('ol:'): username = userid[len("ol:"):] return "/people/%s" % username
def get_user_key(self): user_key = self.get("user_key") if user_key: return user_key userid = self.get("userid") username = "" if userid.startswith('@'): account = OpenLibraryAccount.get(link=userid) username = account.username elif userid.startswith('ol:'): username = userid[len("ol:"):] return "/people/%s" % username
def delete(self): loan = dict(self, returned_at=time.time()) user_key = self['user'] account = OpenLibraryAccount.get(key=user_key) if self.get("stored_at") == 'ia': ia_lending_api.delete_loan(self['ocaid'], userkey2userid(user_key)) if account.itemname: ia_lending_api.delete_loan(self['ocaid'], account.itemname) else: web.ctx.site.store.delete(self['_key']) sync_loan(self['ocaid']) # Inform listers that a loan is completed msgbroker.send_message("loan-completed", loan)
def delete(self): loan = dict(self, returned_at=time.time()) user_key = self['user'] account = OpenLibraryAccount.get(key=user_key) if self.get("stored_at") == 'ia': ia_lending_api.delete_loan(self['ocaid'], userkey2userid(user_key)) if account.itemname: ia_lending_api.delete_loan(self['ocaid'], account.itemname) else: web.ctx.site.store.delete(self['_key']) sync_loan(self['ocaid']) # Inform listers that a loan is completed msgbroker.send_message("loan-completed", loan)