Skip to content

Commit dd037d1

Browse files
authored
Merge pull request #13505 from CipherZ3r0/perf/dedupe-get-loan-ia-call
Don't make archive.org loan request for deprecated "ol:*" user id
2 parents 6c255c6 + 61765ff commit dd037d1

2 files changed

Lines changed: 16 additions & 28 deletions

File tree

‎openlibrary/core/lending.py‎

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -601,36 +601,14 @@ def is_loaned_out_on_ia(identifier: str) -> bool | None:
601601
return None
602602

603603

604-
def get_loan(identifier: str, user_key: str | None = None):
605-
"""Returns the loan object for given identifier, if a loan exists.
606-
607-
If user_key is specified, it returns the loan only if that user is
608-
borrowed that book.
609-
"""
610-
_loan = None
611-
account = None
612-
if user_key:
613-
if user_key.startswith("@"):
614-
account = OpenLibraryAccount.get_by_link(user_key)
615-
else:
616-
account = OpenLibraryAccount.get_by_key(user_key)
617-
604+
def get_loan(identifier: str) -> Loan | None:
605+
"""Returns the loan object for given identifier, if a loan exists."""
618606
try:
619-
_loan = _get_ia_loan(identifier, account and userkey2userid(account.username))
607+
ia_loan = ia_lending_api.get_loan(identifier)
608+
return ia_loan and Loan.from_ia_loan(ia_loan)
620609
except Exception: # TODO: Narrow exception scope
621-
logger.exception(f"get_loan({identifier}) 1 of 2")
622-
623-
try:
624-
_loan = _get_ia_loan(identifier, account and account.itemname)
625-
except Exception: # TODO: Narrow exception scope
626-
logger.exception(f"get_loan({identifier}) 2 of 2")
627-
628-
return _loan
629-
630-
631-
def _get_ia_loan(identifier: str, userid: str | None = None):
632-
ia_loan = ia_lending_api.get_loan(identifier, userid)
633-
return ia_loan and Loan.from_ia_loan(ia_loan)
610+
logger.exception(f"get_loan({identifier})")
611+
return None
634612

635613

636614
def get_loans_of_user(user_key: str) -> list[Loan]:

‎openlibrary/tests/core/test_lending.py‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,16 @@ def test_get_lending_state_waiting_loan(self, mock_site):
208208
assert lending.get_lending_state(doc, user=mock_user, check_loan_status=True) == "open"
209209

210210

211+
def test_get_loan_queries_ia_once(monkeypatch):
212+
mock_api = Mock()
213+
mock_api.get_loan.return_value = {"identifier": "foo00bar"}
214+
monkeypatch.setattr(lending, "ia_lending_api", mock_api)
215+
monkeypatch.setattr(lending.Loan, "from_ia_loan", staticmethod(lambda d: ("loan", d)))
216+
217+
assert lending.get_loan("foo00bar") == ("loan", {"identifier": "foo00bar"})
218+
mock_api.get_loan.assert_called_once_with("foo00bar")
219+
220+
211221
@pytest.mark.usefixtures("request_context_fixture")
212222
class TestGetLoanHistoryData:
213223
"""parse_s3_cookie() is annotated `dict | None` and legitimately returns

0 commit comments

Comments
 (0)