Python script to scan in items enroute to a department, as determined by an Alma Analytics report
#!/opt/rh/python27/root/usr/bin/python
"""
This script scans in items enroute to Woodruff Technical Services from Preservation, as determined by an Alma Analytics report
"""
__author__= 'Lisa Hamlett'
__date__ = 'January 2020'
import sys
import requests
import xml.etree.ElementTree as ET
import time
# DEFINE SECONDARY FUNCTIONS FOR USE BY MAIN FUNCTION
## GET ANALYTICS REPORT
def get_analytics_report(analytics_url,path,analytics_apikey):
payload = {'path':path, 'apikey':analytics_apikey}
r = requests.get(analytics_url,params=payload)
response = r.content
url = r.url
return response,url
## GET BARCODES FROM ANALYTICS REPORT
def get_barcodes(xml):
xml = xml.replace("\n", "")
xml = xml.replace(' xmlns="urn:schemas-microsoft-com:xml-analysis:rowset"', "")
tree = ET.fromstring(xml)
barcode = ""
parsed_xml = []
rowset = tree.find("QueryResult/ResultXml/rowset")
rows = rowset.findall("Row")
if rows != None:
for row in rows:
barcode = row.find("Column1")
barcode = str(barcode.text)
parsed_xml.append(barcode)
return parsed_xml
## GET ITEM INFO FROM ALMA
def get_item_info(line,api_key):
barcode = line
payload = { 'item_barcode' : barcode, 'apikey' : api_key }
r = requests.get('https://api-na.hosted.exlibrisgroup....lmaws/v1/items?', params=payload)
return r
## SCAN IN ITEMS
def scan_item(r,api_key):
### RETRIEVE MMS_ID, HOLDING_ID, and ITEM_PID
root = ET.fromstring(r.text)
### FEED INTO PAYLOAD
mmsid = root[0][0].text
holdingid = root[1][0].text
pid = root[2][0].text
### GET ITEM STATUS INFORMATION
item_data = root.find("item_data")
base_status = item_data.find("base_status")
base_status_desc = base_status.get("desc")
process_type = item_data.find("process_type")
process_type_desc = process_type.get("desc")
### SEND PAYLOAD TO SCAN-IN URL
payload2 = {'op' : 'scan', 'library' : 'UNIV', 'department' : 'AcqDeptUNIV', 'register_in_house_use' : 'false', 'apikey' : api_key}
r2 = requests.post('https://api-na.hosted.exlibrisgroup....lmaws/v1/bibs/' + mmsid + '/holdings/' + holdingid + '/items/' + pid + '?', params=payload2)
root2 = ET.fromstring(r2.text)
return r2.status_code
# DEFINE MAIN FUNCTION
def main():
## OPEN CONFIGURATION FILE AND FOR EACH LINE IN THE CONFIGURATION FILE, STRIP OUT NEW LINE VALUES, SPLIT LINES AT EQUAL SIGN, AND ASSIGN VALUES FROM ARRAY TO VARIABLE
configurations = ("job_keys_GenLibstoTechSer.cfg")
configfile = open(configurations, "r")
for line in configfile:
line = line.rstrip("\n")
value = line.split("=")
if value[0] == "analytics_url":
analytics_url = value[1]
elif value[0] == "path":
path = value[1]
elif value[0] == "analytics_apikey":
analytics_apikey = value[1]
elif value[0] == "api_key":
api_key = value[1]
# elif value[0] == "sandbox_api_key":
# api_key = value[1]
## CALL SECONDARY FUNCTION TO NEW VARIABLES
response,url = get_analytics_report(analytics_url,path,analytics_apikey)
barcode = get_barcodes(response)
## CREATE LIST OF BARCODES AND RETURN ITEM INFO
barcode_list = ""
for line in barcode:
barcode_list += line + '\n'
# print line
r = get_item_info(line,api_key)
if r.status_code == 200:
# print(r.text)
status = scan_item(r,api_key)
# print(status)
else:
sys.stderr.write("Barcode " + line + " does not exist in Alma" + "\n")
continue
## CLOSE FILES
configfile.close()
# EXIT SCRIPT
if __name__ == "__main__":
sys.exit(main())