Skip to main content
ExLibris

Knowledge Assistant

BETA
 
  • Subscribe by RSS
  • Back
    Alma

     

    Ex Libris Knowledge Center
    1. Search site
      Go back to previous article
      1. Sign in
        • Sign in
        • Forgot password
    1. Home
    2. Alma
    3. Community Knowledge
    4. Python script to delete expired patrons from Alma, as determined by an Alma Analytics report

    Python script to delete expired patrons from Alma, as determined by an Alma Analytics report

    1. Last updated
    2. Save as PDF
    3. Share
      1. Share
      2. Tweet
      3. Share
    No headers
    Created By: Lisa Hamlett
    Created on: 5/29/2019



    #!/opt/rh/python27/root/usr/bin/python
    """
       This script deletes expired patrons from Alma, as determined by an Alma Analytics report
    """
    __author__= 'Lisa Hamlett'
    __date__ = 'May 2019'

    import sys
    import requests
    import xml.etree.ElementTree as ET

    # DEFINE SECONDARY FUNCTIONS FOR USE BY MAIN FUNCTION

    ## GET ANALYTICS REPORT
    def analytics_report(analytics_url,path,analytics_apikey):
      payload = {'apikey':analytics_apikey, 'path':path}
      try:
        r = requests.get(analytics_url,params=payload)
        response = r.content
        url = r.url
      except:
        sys.stderr.write("Could not get analytics report"+"\n")
      return r

    ## GET USER IDENTIFIERS FROM ANALYTICS REPORT
    def userids(xml):
      xml = xml.replace("\n", "")
      xml = xml.replace(' xmlns="urn:schemas-microsoft-com:xml-analysis:rowset"', "")
      tree = ET.fromstring(xml)

      userid = ""
      parsed_xml = []
      try:
        rowset = tree.find("QueryResult/ResultXml/rowset")
      except:
        sys.stderr.write("Could not find rowset"+"\n")
      try:
        rows = rowset.findall("Row")
        if rows != None:
          for row in rows:
            try:
              userid = row.find("Column1")
              userid = str(userid.text)
            except:
              sys.stderr.write("Could not find userid"+"\n")
            parsed_xml.append(userid)
        else:
          sys.stderr.write("No items found"+"\n")
          return "Fail"
      except:
        sys.stderr.write("Could not find rows"+"\n")
      return parsed_xml

    ## GET DELETE USER API LINK
    def delete_user_api(alma_api_url,user_id_type,alma_apikey):
      payload = {'user_id_type':user_id_type, 'apikey':alma_apikey}
      try:
        r = requests.delete(alma_api_url,params=payload)
        response = r.content
        url = r.url
      except:
        sys.stderr.write("Could not get delete user api link"+"\n")
      return r

    # DEFINE MAIN FUNCTION
    def main():

    ## OPEN CONFIGURATION FILES
      try:
        configurations = ("job_keys_delete_gt.cfg")
        configfile = open(configurations, "r")
      except:
        sys.stderr.write("Could not open configuration file"+"\n")

    ## FOR EACH LINE IN THE CONFIGURATION FILE
      for line in configfile:

    ### STRIP OUT NEW LINE VALUES
        try:
          line = line.rstrip("\n")
        except:
          sys.stderr.write("Could not strip out new lines")

    ### SPLIT LINES AT EQUAL SIGN
        try:
          value = line.split("=")
        except:
          sys.stderr.write("Could not split lines at equal sign"+"\n")

    ### ASSIGN VALUES FROM ARRAY TO VARIABLES
        try:
          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] == "alma_api_url":
            alma_api_url = value[1]
          elif value[0] == "alma_apikey":
            alma_apikey = value[1]
          elif value[0] == "user_id_type":
            user_id_type = value[1]
        except:
          sys.stderr.write("Could not assign values from array to variables"+"\n")

    ## CALL ANALYTICS FOR REPORT XML
      try:
        result = analytics_report(analytics_url,path,analytics_apikey)
      except:
        sys.stderr.write("Could not call analytics for report XML"+"\n")

    ## PARSE ANALYTICS REPORT XML
      try:
        users = userids(result.content)
      except:
        sys.stderr.write("Could not call analytics for report XML"+"\n")

    ## PARSE USERS FROM XML, CREATES LINK, AND DELETES USERS
      try:
        for user in users:
          try:
            alma_api_url_test = alma_api_url.replace("USERID",str(user))
          except:
            sys.stderr.write("Could not replace USERID with users in alma_api_url"+"\n")
          try:
            deleted = delete_user_api(alma_api_url_test,user_id_type,alma_apikey)
          except:
            sys.stderr.write("Could not delete users"+"\n")
      except:
        sys.stderr.write("Count not parse users from XML"+"\n")

    ## CLOSE FILES
      try:
        configfile.close()
      except:
        sys.stderr.write("Could not close configuration file"+"\n")

    # EXIT SCRIPT
    if __name__ == "__main__":
      sys.exit(main())




    Report
    View article in the Exlibris Knowledge Center
    1. Back to top
      • Python script to change missing UNIV items to the UNIV XM location, as determined by an Alma Analytics report
      • Python script to scan in items enroute to a department, as determined by an Alma Analytics report
    • Was this article helpful?

    Recommended articles

    1. Article type
      Topic
      Community Content Type
      Enhancements
      Content Type
      Documentation
      Language
      English
      Product
      Alma
    2. Tags
      This page has no tags.
    1. © Copyright 2025 Ex Libris Knowledge Center
    2. Powered by CXone Expert ®
    • Term of Use
    • Privacy Policy
    • Contact Us
    2025 Ex Libris. All rights reserved