Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
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
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
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)
        if result:
            return result[0]
Exemplo n.º 10
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]
Exemplo n.º 11
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
Exemplo n.º 12
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
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
    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)