#!/usr/bin/env python import sys import time import requests import xml.etree.ElementTree API_HOST = 'api.evpsys.com' API_TOKEN = '{PUT-YOUR-TOKEN-HERE}' API_KEY = '{PUT-YOUR-KEY-HERE}' def get_document(text): document = xml.etree.ElementTree.fromstring(response.text) if document.find('status').text not in ['ok', 'pending']: raise Exception(document.find('error-text').text) return document # Build the auth auth = (API_TOKEN, API_KEY) # Create the portfolio ------------------------------------------------------- portfolio = """ """ print('Creating the portfolio...') try: response = requests.post('https://%s/portfolio?output=xml' % (API_HOST), auth=auth, data=portfolio) response.raise_for_status() except Exception as e: print(' FAILED (POST /portfolio error: %s)' % repr(e)) sys.exit(-1) print(' Succeeded') # Get the portfolio-id from the response ------------------------------------- print('Getting the portfolio-id...') try: document = get_document(response.text) portfolio_id = document.find('portfolio-id').text except Exception as e: print(' FAILED (POST /portfolio response format error: %s)' % repr(e)) sys.exit(-1) print(' Succeeded') # Add and modify lots in the portfolio, using the portfolio-id --------------- print('Updating lots in portfolio...') portfolio = """ """ try: response = requests.put('https://%s/portfolio/%s?output=xml' % (API_HOST, portfolio_id), auth=auth, data=portfolio) response.raise_for_status() except Exception as e: print(' FAILED (PUT /portfolio/{portfolio-id} error: %s)' % repr(e)) sys.exit(-1) try: document = get_document(response.text) except Exception as e: print(' FAILED (PUT /portfolio/{portfolio-id} response format error: %s)' % repr(e)) sys.exit(-1) print(' Succeeded') # List the existing portfolios ----------------------------------------------- print('Listing the portfolios...') try: response = requests.get('https://%s/portfolio?output=xml' % (API_HOST), auth=auth, data=portfolio) response.raise_for_status() document = get_document(response.text) for portfolio in document.iter('portfolio'): print(' Portfolio: %s (ID %s, created %s)' % (portfolio.attrib.get('name', '[Unknown]'), portfolio.attrib['id'], portfolio.attrib['portfolio_time_created'])) if document.find('more').text == 'true': print(' ...and more') except Exception as e: print(' FAILED (GET /portfolio error: %s)' % repr(e)) sys.exit(-1) print(' Succeeded') # Start an evaluation of the portfolio, using the portfolio-id --------------- print('Starting the report...') try: response = requests.post('https://%s/portfolio/%s/estateval/report?output=xml&report=dod' % (API_HOST, portfolio_id), auth=auth) response.raise_for_status() except Exception as e: print(' FAILED (POST /portfolio/{portfolio-id}/estateval/report error: %s)' % repr(e)) sys.exit(-1) print(' Succeeded') # Get the report-id from the response ---------------------------------------- print('Getting the report-id...') try: document = get_document(response.text) report_id = document.find('report-id').text except Exception as e: print(' FAILED (POST /portfolio/{portfolio-id}/estateval/report response format error: %s)' % repr(e)) sys.exit(-1) print(' Succeeded') # Poll the report-id for completion ------------------------------------------ print('Polling the report status...') try: while True: response = requests.get('https://%s/portfolio/%s/estateval/report/%s/status?output=xml' % (API_HOST, portfolio_id, report_id), auth=auth) response.raise_for_status() document = get_document(response.text) if document.find('status').text == 'ok': break print(' %03d%%: %s' % (int(document.find('pending-percent').text), document.find('pending-text').text)) time.sleep(1) except Exception as e: print(' FAILED (GET /portfolio/{portfolio-id}/estateval/report/{report-id}/status error: %s)' % repr(e)) sys.exit(-1) print(' Succeeded') # List the existing reports -------------------------------------------------- print('Listing the reports...') try: response = requests.get('https://%s/portfolio/%s/estateval/report?output=xml' % (API_HOST, portfolio_id), auth=auth, data=portfolio) response.raise_for_status() document = get_document(response.text) for report in document.iter('report'): print(' Report: %s for %s (ID %s, created %s)' % (report.attrib['type'], report.attrib['death-date'], report.attrib['id'], report.attrib['report_time_created'])) if document.find('more').text == 'true': print(' ...and more') except Exception as e: print(' FAILED (GET /portfolio/{portfolio-id}/estateval/report error: %s)' % repr(e)) sys.exit(-1) print(' Succeeded') # Get the report data -------------------------------------------------------- print('Getting the report data...') try: response = requests.get('https://%s/portfolio/%s/estateval/report/%s?output=xml' % (API_HOST, portfolio_id, report_id), auth=auth) response.raise_for_status() except Exception as e: print(' FAILED (POST /portfolio/{portfolio-id}/estateval/report/{report-id} error: %s)' % repr(e)) sys.exit(-1) print(' Succeeded') print("\n%s" % response.text)