aboutsummaryrefslogtreecommitdiffstats
path: root/python/handle_default.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/handle_default.py')
-rw-r--r--python/handle_default.py57
1 files changed, 33 insertions, 24 deletions
diff --git a/python/handle_default.py b/python/handle_default.py
index c61f071f..a47854c3 100644
--- a/python/handle_default.py
+++ b/python/handle_default.py
@@ -2,19 +2,27 @@ from db import serenitas_pool
import datetime
from sys import argv
-def affected_indices(company_id, conn):
- """returns the list of indices containing company_id"""
+def get_recovery(company_id: int, seniority: str, conn):
+ with conn.cursor() as c:
+ c.execute("SELECT recovery * 100, auction_date FROM defaulted "
+ "WHERE id=%s AND seniority=%s",
+ (company_id, seniority))
+ return c.fetchone()
+def affected_indices(company_id: int, seniority: str, conn):
+ """returns the list of indices containing company_id"""
+ sqlstr = ("SELECT b.*, a.curr_weight*b.indexfactor AS orig_weight "
+ "FROM basket_constituents_current a "
+ "JOIN (SELECT * FROM index_version WHERE lastdate='infinity') b "
+ "USING (basketid) "
+ "WHERE company_id=%s AND seniority=%s")
+ print(sqlstr)
with conn.cursor() as c:
- sqlstr = """SELECT * FROM
- (SELECT unnest(index_list) AS basketid FROM bbg_issuers WHERE company_id=%s) a
- JOIN index_version USING (basketid)
- WHERE lastdate='infinity'"""
- c.execute(sqlstr, (company_id,))
+ c.execute(sqlstr, (company_id, seniority))
recordslist = c.fetchall()
return recordslist
-def create_newindices(recordslist, lastdate, nissuers, conn):
+def create_newindices(recordslist, recovery, lastdate, conn):
"""create the new indices versions and update the old"""
insertstr = """INSERT INTO index_version(Index, Series, Version, IndexFactor,
CumulativeLoss, lastdate) Values(%(index)s, %(series)s, %(version)s, %(indexfactor)s,
@@ -25,9 +33,9 @@ def create_newindices(recordslist, lastdate, nissuers, conn):
with conn.cursor() as c:
newids = {}
for r in recordslist:
- r['indexfactor'] -= 100/nissuers
+ r['indexfactor'] -= r['orig_weight']
r['version'] += 1
- r['cumulativeloss'] += (100-recovery)/nissuers
+ r['cumulativeloss'] += (100-recovery) * r['orig_weight']
r['lastdate'] = 'infinity'
c.execute(insertstr, r)
newids[r['basketid']] = c.fetchone()[0]
@@ -36,12 +44,14 @@ def create_newindices(recordslist, lastdate, nissuers, conn):
conn.commit()
return newids
-def update_indexmembers(newids, company_id, conn):
+def update_indexmembers(newids, company_id, seniority, conn):
with conn.cursor() as c:
for oldid, newid in newids.items():
- c.execute("""update bbg_issuers set index_list=index_list||%s where company_id in
- (select company_id from bbg_issuers where %s=Any(index_list)
- and company_id != %s)""", (newid, oldid, company_id))
+ c.execute("INSERT INTO basket_constituents "
+ "(SELECT company_id, seniority, %s, weight "
+ "FROM basket_constituents "
+ "WHERE basket_id=%s AND NOT (company_id=%s AND seniority=%s))",
+ (newid, oldid, company_id, seniority))
conn.commit()
def update_redcodes(index_type, conn):
@@ -69,16 +79,15 @@ def update_redcodes(index_type, conn):
if __name__=="__main__":
if len(argv) == 1:
print("""Usage:
- python handle_default.py <company_id> <date> <recovery> <n_issuers>
+ python handle_default.py <company_id> <seniority>
For instance:
- python handle_default.py 210065 2015-02-19 15.875 100""")
+ python handle_default.py 210065 Senior""")
else:
- conn = serenitas_pool.getconn(__name__)
+ conn = serenitas_pool.getconn()
company_id = int(argv[1])
- lastdate = datetime.datetime.strptime(argv[2], "%Y-%m-%d")
- recovery = float(argv[3])
- n_issuers = float(argv[4])
- recordslist = affected_indices(company_id, serenitasdb)
- newids = create_newindices(recordslist, lastdate, n_issuers, serenitasdb)
- update_indexmembers(newids, company_id, serenitasdb)
- serenitas_pool.putconn(conn, __name__)
+ seniority = argv[2]
+ recovery, lastdate = get_recovery(company_id, seniority, conn)
+ recordslist = affected_indices(company_id, seniority, conn)
+ newids = create_newindices(recordslist, recovery, lastdate, conn)
+ update_indexmembers(newids, company_id, seniority, conn)
+ serenitas_pool.putconn(conn,)