aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libraries/aspen.py13
-rw-r--r--libraries/base.py13
-rw-r--r--libraries/polaris.py8
-rwxr-xr-xlibrary_info_cli.py37
-rw-r--r--library_info_lib.py14
5 files changed, 70 insertions, 15 deletions
diff --git a/libraries/aspen.py b/libraries/aspen.py
index 40e67c1..b024263 100644
--- a/libraries/aspen.py
+++ b/libraries/aspen.py
@@ -54,7 +54,11 @@ class Library(BaseLibrary):
"Referer": f"{b}/MyAccount/CheckedOut?source=all"
}
s.get(f"{b}/Holds?source=ils",headers=headers)
- output = s.get(f"{b}/AJAX?method=getHolds&source=all",headers=headers)
+ params = {
+ "method": "getHolds",
+ "source": "all"
+ }
+ output = s.get(f"{b}/MyAccount/AJAX",params=params,headers=headers)
output = json.loads(output.content)["holds"].replace("\xa0"," ")
soup = BeautifulSoup(output, "html.parser")
try:
@@ -65,8 +69,8 @@ class Library(BaseLibrary):
if unavailableholds_all:
items = unavailableholds_all.find_all("div",class_=["result"])
for i in items:
- labels = [j.text for i in i.find_all("div","result-label")]
- values = [j.text for i in i.find_all("div","result-value")]
+ labels = [j.text for j in i.find_all("div","result-label")]
+ values = [j.text for j in i.find_all("div","result-value")]
values_dict = dict(map(lambda i,j:(i,j),labels,values))
title_obj = i.find("a",class_="result-title")
img_href = i.find("img")["src"]
@@ -84,13 +88,12 @@ class Library(BaseLibrary):
"img_type": img_type,
}
unavailableReservations.append(obj)
-
# WORKHERE: availableHolds, might not be available.
# Return a single list of objects
return availableReservations + unavailableReservations
def get_checkouts(self, verbose = False):
- # WORKHERE: no example of possible/completed renewals at this time
+ # WORKHERE: no example of completed renewals at this time
checked_out_objects = []
b = self.baseurl
s = self.session
diff --git a/libraries/base.py b/libraries/base.py
index f6f75e4..3c68616 100644
--- a/libraries/base.py
+++ b/libraries/base.py
@@ -26,6 +26,19 @@ class BaseLibrary:
self.baseurl = baseurl
# will need cookies or session manager here.
+ def get_reservations(self, verbose = False):
+ sample = {
+ "position": "1",
+ "status": "pending",
+ "date_placed": "2024-07-11",
+ "format": "DVD",
+ "location": "Somewhere",
+ "title": "Example reserved dvd",
+ "img": "DUMMYIMAGE23412341234",
+ "img_type": "image/sample",
+ }
+ return [sample]
+
def get_checkouts(self):
""" STUB """
sample = {
diff --git a/libraries/polaris.py b/libraries/polaris.py
index a47a289..c2edf9c 100644
--- a/libraries/polaris.py
+++ b/libraries/polaris.py
@@ -54,6 +54,14 @@ class Library(BaseLibrary):
# log in now. Why would we not?
self.login()
+ def get_reservations(self, verbose = False):
+ """ STUB """
+ return []
+ #availableReservations = []
+ #unavailableReservations = []
+ #b = self.baseurl
+ #s = self.session
+
def get_checkouts(self, verbose=False):
checked_out_objects = []
b = self.baseurl
diff --git a/library_info_cli.py b/library_info_cli.py
index b77e9f4..7dfd640 100755
--- a/library_info_cli.py
+++ b/library_info_cli.py
@@ -61,7 +61,7 @@ def serialize(item):
eprint(f"WARNING: unknown type {type(item)} for json-serializing object {item}")
return item
-def html(checkouts):
+def html(checkouts, reservations):
# Uses https://datatables.net/download/builder?dt/jq-3.7.0/dt-2.0.8/cr-2.0.3/fh-4.0.1
# with css corrected by having the utf-8 line at the top of the .min.css file.
""" Make an html of the items """
@@ -115,6 +115,28 @@ def html(checkouts):
prn(f"</table>\n")
else:
prn(f"No checkouts.\n")
+ prn("<h2>Reservations</h2>\n")
+ if len(reservations):
+ prn(f"<table class='display' id='reservations'>\n")
+ prn(f"<thead><tr><th>Date placed</th><th>location</th><th>position</th><th>status</th><th>cover</th><th>title</th></thead>\n")
+ prn("<tbody>\n")
+ for i in reservations:
+ prn(f"<tr>")
+ prn(f"<td>{i['date_placed']}</td>")
+ prn(f"<td>{i['location']}</td>")
+ prn(f"<td>{i['position']}</td>")
+ prn(f"<td>{i['status']}</td>")
+ if "img" in i:
+ img_src = i["img"]
+ else:
+ img_src = ""
+ prn(f"<td><img class='thumb' src='data:{i['img_type']};base64, {img_src}' /></td>")
+ prn(f"<td>{i['title']}</td>")
+ prn(f"</tr>\n")
+ prn(f"</tbody>\n")
+ prn(f"</table>\n")
+ else:
+ prn("No reservations.\n")
prn(f"</body>\n")
prn(f"<footer>\n")
prn(f"</footer>\n")
@@ -124,8 +146,10 @@ def html(checkouts):
prn("""
<script>$(document).ready(
function () {
- var table = $('#checkouts').DataTable({paging: false});
- table.column('2:visible').order('asc').draw();
+ var table1 = $('#checkouts').DataTable({paging: false});
+ table1.column('2:visible').order('asc').draw();
+ var table2 = $('#reservations').DataTable({paging: false});
+ table2.column('0:visible').order('desc').draw();
}
);</script>
""")
@@ -135,14 +159,15 @@ if "__main__" == __name__:
if debuglevel >= 1:
eprint(args)
if single:
- checkouts = library_info_lib.get_single_checkouts(alias = single, full_images = full_images, verbose = debuglevel >= 5)
+ checkouts, reservations = library_info_lib.get_single_configitem(alias = single, full_images = full_images, verbose = debuglevel >= 5)
else:
- checkouts = library_info_lib.get_all_checkouts(full_images = full_images, verbose = debuglevel >= 5)
+ checkouts, reservations = library_info_lib.get_all_configitems(full_images = full_images, verbose = debuglevel >= 5)
if "raw" == output:
print(checkouts)
+ print(reservations)
elif "json" == output:
print(json.dumps(checkouts,default=serialize))
elif "html" == output:
- html(checkouts)
+ html(checkouts, reservations)
else:
print(f"Error! Invalid choice for output format {output}.")
diff --git a/library_info_lib.py b/library_info_lib.py
index 202ec71..ae724ae 100644
--- a/library_info_lib.py
+++ b/library_info_lib.py
@@ -17,19 +17,23 @@ import sys, os
import libraries
from config import config
-def get_all_checkouts(full_images = True, verbose = False):
+def get_all_configitems(full_images = True, verbose = False):
# get all checked out items
checkouts = []
+ reservations = []
for i in config:
#print(f"Found config entry {i}")
instance = i["class"](i)
checkouts += instance.get_checkouts(verbose = verbose)
+ reservations += instance.get_reservations(verbose=verbose)
if not full_images:
checkouts = trim_full_images(checkouts)
- return checkouts
+ reservations = trim_full_images(reservations)
+ return checkouts, reservations
-def get_single_checkouts(alias = None, full_images = True, verbose = False):
+def get_single_configitem(alias = None, full_images = True, verbose = False):
checkouts = []
+ reservations = []
this_config = [i for i in config if i["alias"] == alias]
if not this_config:
raise Exception(f"Alias not found: {alias}")
@@ -37,9 +41,11 @@ def get_single_checkouts(alias = None, full_images = True, verbose = False):
for i in this_config:
instance = i["class"](i)
checkouts += instance.get_checkouts(verbose=verbose)
+ reservations += instance.get_reservations(verbose=verbose)
if not full_images:
checkouts = trim_full_images(checkouts)
- return checkouts
+ reservations = trim_full_images(reservations)
+ return checkouts, reservations
def trim_full_images(checkouts = []):
output = []
bgstack15