aboutsummaryrefslogtreecommitdiffstats
path: root/python/markit/loans.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/markit/loans.py')
-rw-r--r--python/markit/loans.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/python/markit/loans.py b/python/markit/loans.py
new file mode 100644
index 00000000..0b14d60b
--- /dev/null
+++ b/python/markit/loans.py
@@ -0,0 +1,93 @@
+import csv
+import logging
+import os
+import requests
+
+from common import root
+from db import with_connection
+
+logger = logging.getLogger(__name__)
+
+def download_facility(workdate, payload):
+ r = requests.get('https://loans.markit.com/loanx/LoanXFacilityUpdates.csv', params=payload)
+ facility_filename = os.path.join(root, "data", "Facility files", "facility_{0}.csv".format(workdate))
+ with open( facility_filename, "wb") as fh:
+ fh.write(r.content)
+
+@with_connection('etdb')
+def insert_facility(conn, workdate):
+ facility_filename = os.path.join(root, "data", "Facility files", "facility_{0}.csv".format(workdate))
+ sqlstring = "INSERT INTO markit_facility VALUES( {0} )".format( ",".join(["%s"] * 13))
+ with open( facility_filename, "r") as fh:
+ reader = csv.reader(fh)
+ header = next(reader)
+ if 'Authentication failed' in header:
+ logger.error("Couldn't authenticate")
+ raise SystemExit
+ with conn.cursor() as c:
+ for line in reader:
+ newline = tuple([v or None for v in line])
+ try:
+ c.execute(sqlstring, newline)
+ except IntegrityError as e:
+ logger.error(e)
+ conn.rollback()
+ else:
+ conn.commit()
+
+@with_connection('etdb')
+def download_marks(conn, workdate, payload):
+ r = requests.get('https://loans.markit.com/loanx/LoanXMarks.csv', params=payload)
+ marks_filename = os.path.join(root, "data", "markit", "markit_data_{0}.csv".format(workdate))
+ with open(marks_filename, "wb") as fh:
+ fh.write(r.content)
+ sqlstring = "INSERT INTO markit_prices VALUES( {0} )".format( ",".join([ "%s" ] * 5))
+ with open(marks_filename, "r") as fh:
+ reader = csv.DictReader(fh)
+ if 'Authentication failed' in reader.fieldnames[0]:
+ logger.error("Couldn't authenticate")
+ raise SystemExit
+ with conn.cursor() as c:
+ for line in reader:
+ if line['Depth']=='implied':
+ line['Depth']=0
+ c.execute(sqlstring, (line['LoanX ID'], line['Bid'], line['Offer'],
+ line['Depth'], line['Mark Date']))
+ conn.commit()
+
+@with_connection('etdb')
+def update_facility(conn, workdate, payload):
+ #we update the missing facility loanxids
+ sqlstring = "SELECT loanxid FROM markit_prices EXCEPT SELECT loanxid FROM markit_facility";
+ facility_diff_filename = os.path.join(root, "data", "Facility files",
+ "facility_diff_{0}.csv".format(workdate))
+ with open( facility_diff_filename, "wb") as fh:
+ flag = False
+ with conn.cursor() as c:
+ c.execute(sqlstring)
+ for loanxid in c:
+ payload.update({'LOANXID':loanxid[0]})
+ r = requests.get('https://loans.markit.com/loanx/LoanXOneFacility.csv', params=payload)
+ if flag:
+ fh.write(r.content.split('\n')[1] + "\n")
+ else:
+ fh.write(r.content.split('\n')[0] + "\n")
+ fh.write(r.content.split('\n')[1] + "\n")
+ flag = True
+
+ sqlstring = "INSERT INTO markit_facility(LoanXID, PMDID, IssuerName, dealname, facility_type," \
+ "loanx_facility_type, initial_amount, initial_spread, maturity, industry, modified_time)" \
+ "VALUES( {0} )".format( ",".join( ["%s"] * 11))
+ try:
+ with open(facility_diff_filename, "r") as fh:
+ reader = csv.reader(fh)
+ next(reader)
+ with conn.cursor() as c:
+ for line in reader:
+ newline = [v or None for v in line] + [workdate]
+ newline.pop(9) # remove the spread to maturity value
+ c.execute(sqlstring, newline)
+ conn.commit()
+ except StopIteration:
+ pass
+ conn.close()