1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
import psycopg2
import os.path
import re
import datetime
import csv
from datetime import date
import pdb
if os.name=='nt':
root = "//WDSENTINEL/share/CorpCDOs/"
elif os.name=='posix':
root = "/home/share/CorpCDOs/"
root = root + "Collaterals_2012-11-20"
fields = ['Asset Name', 'Issuer', 'Current Balance', 'Maturity Date', 'Asset Subtype', \
'Asset Type', 'Gross Coupon', 'Spread', 'Frequency', 'Next Paydate', 'Second Lien', \
'LoanX ID', 'CUSIP', 'Market Price', 'Market Price Source', 'Price Date', 'Fixed or Float', \
'Defaulted Flag', 'Security Sub-Category', 'Structured Finance Security']
def convertToNone(s):
return None if s=='' else s
conn = psycopg2.connect(database="ET", user="et_user", password="Serenitas1", host="192.168.1.108")
cursor = conn.cursor()
prog = re.compile("\((.*)\)")
for dealname in os.listdir(root):
#dealname, updatedate = line.rstrip().split()
# updatedate = datetime.datetime.strptime(updatedate, '%m/%d/%Y')
#dealname = dealname.upper() + ",AD.txt"
with open( os.path.join(root, dealname), "r") as fh:
dr = csv.DictReader(fh, dialect = 'excel-tab')
dealname , ending = dealname.split(',')
dealname = dealname.lower()
data = []
for line in dr:
missingfields = list(set(fields) - set(dr.fieldnames))
for field in missingfields:
line[field] = None
if line['Fixed or Float'] is not None:
line['Fixed or Float'] = line['Fixed or Float'].upper()
if 'LoanX ID' in dr.fieldnames and len(line['LoanX ID']) >8:
print "dubious id found: {0}".format(line['LoanX ID'])
line['LoanX ID'] = line['LoanX ID'][:8]
try:
# make sure the string is utf8 safe
line['Issuer']= line['Issuer'].decode('windows-1252')
if line['Issuer']=='' or line['Issuer'].lower() == 'dummy':
break
except AttributeError as detail:
print dealname
#convert (x) to -x
for field in ['Spread', 'Gross Coupon']:
if line[field] and prog.match(line[field]):
line[field] = - float(prog.match(line[field]).group(1))
if line['Market Price'] != '' and isinstance(line['Market Price'], str):
line['Market Price'] = float(line['Market Price'].replace(',',''))
if isinstance(line['Current Balance'], str):
line['Current Balance'] = float(line['Current Balance'].replace(',',''))
try:
r = [convertToNone(line[field]) for field in fields]
except KeyError as detail:
print detail
pdb.set_trace()
data.append(r)
cursor.execute( "select \"Latest Update\" from clo_universe "
"where dealname='{0}'".format(dealname))
try:
updatedate = cursor.fetchone()[0]
except TypeError:
pdb.set_trace()
cursor.execute( "select max(updatedate) from et_collateral where dealname='{0}'".format(dealname))
updatedate2 = cursor.fetchone()[0]
if updatedate2 is None:
pdb.set_trace()
if updatedate>updatedate2:
for row in data:
# print dealname, row
sqlstr = "INSERT INTO ET_COLLATERAL(dealname, updatedate, name, IssuerName," \
"CurrentBalance, Maturity, AssetSubtype, AssetType, GrossCoupon," \
"Spread, Frequency, NextPaydate, SecondLien, LoanXID, Cusip, IntexPrice," \
"IntexPriceSource, IntexPriceDate, FixedOrFloat, DefaultedFlag, CovLite, isCDO)" \
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s," \
"%s, %s, %s)"
try:
cursor.execute(sqlstr, (dealname, updatedate) + tuple(row))
except psycopg2.DataError:
pdb.set_trace()
except psycopg2.IntegrityError:
# crazy hack intex unique id is not really unique
if dealname in ["caval1", "octag11", "windriv2"]:
conn.rollback()
row[0] = "Affinion Group - Tranche B Term Loan - 18"
cursor.execute(sqlstr, (dealname, updatedate) + tuple(row))
else:
pdb.set_trace()
conn.commit()
cursor.close()
conn.close()
|