aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/bespoke_utils.py132
1 files changed, 86 insertions, 46 deletions
diff --git a/python/bespoke_utils.py b/python/bespoke_utils.py
index eb63e18c..b9c5b1ce 100644
--- a/python/bespoke_utils.py
+++ b/python/bespoke_utils.py
@@ -5,7 +5,9 @@ import datetime
import pandas as pd
-def insert_bbg_tickers(conn: connection, tickers: List[str]) -> Dict[str, Tuple[str, str]]:
+def insert_bbg_tickers(
+ conn: connection, tickers: List[str]
+) -> Dict[str, Tuple[str, str]]:
""" insert bbg tickers into the database
Parameters
@@ -18,42 +20,62 @@ def insert_bbg_tickers(conn: connection, tickers: List[str]) -> Dict[str, Tuple[
dict mapping list of tickers to (company_id, seniority)
"""
- fields = ["cds_company_id", "cds_company_name", "crncy",
- "cds_restructuring_type", "cds_corp_tkr", "sw_seniority",
- "cds_curve_info", "restructuring_type_short_code"]
+ fields = [
+ "cds_company_id",
+ "cds_company_name",
+ "crncy",
+ "cds_restructuring_type",
+ "cds_corp_tkr",
+ "sw_seniority",
+ "cds_curve_info",
+ "restructuring_type_short_code",
+ ]
securities = [f"{t} Corp" for t in tickers]
with init_bbg_session(BBG_IP) as session:
ticker_data = retrieve_data(session, securities, fields)
placeholder = ",".join(["%s"] * 8)
- sql_str = ("INSERT INTO bbg_issuers(name, company_id, ticker, currency,"
- "seniority, doc_clause, cds_curve, short_code) "
- f"VALUES({placeholder}) "
- "ON CONFLICT DO NOTHING")
+ sql_str = (
+ "INSERT INTO bbg_issuers(name, company_id, ticker, currency,"
+ "seniority, doc_clause, cds_curve, short_code) "
+ f"VALUES({placeholder}) "
+ "ON CONFLICT DO NOTHING"
+ )
d = {}
with conn.cursor() as c:
for k, v in ticker_data.items():
- c.execute(sql_str, (v["cds_company_name"],
- v["cds_company_id"],
- v.get("cds_corp_tkr"),
- v["crncy"],
- v["sw_seniority"],
- v["cds_restructuring_type"].replace("-", " "),
- v["cds_curve_info"]["Ticker"].to_list(),
- v["restructuring_type_short_code"]))
+ c.execute(
+ sql_str,
+ (
+ v["cds_company_name"],
+ v["cds_company_id"],
+ v.get("cds_corp_tkr"),
+ v["crncy"],
+ v["sw_seniority"],
+ v["cds_restructuring_type"].replace("-", " "),
+ v["cds_curve_info"]["Ticker"].to_list(),
+ v["restructuring_type_short_code"],
+ ),
+ )
d[k.split()[0]] = (v["cds_company_id"], v["sw_seniority"])
conn.commit()
return d
-def insert_bbg_markit_mapping(conn: connection, d: Dict[str, Tuple[str, str]], df: pd.DataFrame):
- sql_str = ("INSERT INTO bbg_markit_mapping VALUES(%s, %s, %s, %s, %s, %s) "
- "ON CONFLICT DO NOTHING")
+def insert_bbg_markit_mapping(
+ conn: connection, d: Dict[str, Tuple[str, str]], df: pd.DataFrame
+):
+ sql_str = (
+ "INSERT INTO bbg_markit_mapping VALUES(%s, %s, %s, %s, %s, %s) "
+ "ON CONFLICT DO NOTHING"
+ )
with conn.cursor() as c:
for markit_ticker, bbg_ticker in df.itertuples(index=False):
company_id, seniority = d[bbg_ticker]
mkit_tier = "SNRFOR" if seniority == "Senior" else "SUBLT2"
- c.execute(sql_str, ("infinity", company_id, markit_ticker,
- mkit_tier, 100, seniority))
+ c.execute(
+ sql_str,
+ ("infinity", company_id, markit_ticker, mkit_tier, 100, seniority),
+ )
conn.commit()
@@ -62,28 +84,38 @@ def backpopulate_short_codes(conn: connection):
c.execute("SELECT cds_curve[6] from bbg_issuers")
securities = [f"{t} Corp" for t, in c]
with init_bbg_session(BBG_IP) as session:
- short_code = retrieve_data(session, securities,
- ["restructuring_type_short_code",
- "cds_company_id"])
+ short_code = retrieve_data(
+ session, securities, ["restructuring_type_short_code", "cds_company_id"]
+ )
sql_str = "UPDATE bbg_issuers SET short_code=%s WHERE company_id=%s"
with conn.cursor() as c:
for v in short_code.values():
- if 'restructuring_type_short_code' in v:
- c.execute(sql_str,
- (v["restructuring_type_short_code"], v["cds_company_id"]))
- c.executemany(sql_str,
- [(v["restructuring_type_short_code"], v["cds_company_id"])
- for v in short_code.values() if 'restructuring_type_short_code' in v])
+ if "restructuring_type_short_code" in v:
+ c.execute(
+ sql_str, (v["restructuring_type_short_code"], v["cds_company_id"])
+ )
+ c.executemany(
+ sql_str,
+ [
+ (v["restructuring_type_short_code"], v["cds_company_id"])
+ for v in short_code.values()
+ if "restructuring_type_short_code" in v
+ ],
+ )
conn.commit()
-def get_bbg_ids(conn: connection, df: pd.DataFrame,
- date: datetime.date = datetime.date.today()) -> pd.DataFrame:
- df_mapping = pd.read_sql_query("SELECT company_id, markit_ticker, markit_tier, "
- "seniority FROM historical_cds_issuers(%s) "
- "WHERE markit_ticker IS NOT NULL",
- conn, params=(date,),
- index_col=["markit_ticker", "markit_tier"])
+def get_bbg_ids(
+ conn: connection, df: pd.DataFrame, date: datetime.date = datetime.date.today()
+) -> pd.DataFrame:
+ df_mapping = pd.read_sql_query(
+ "SELECT company_id, markit_ticker, markit_tier, "
+ "seniority FROM historical_cds_issuers(%s) "
+ "WHERE markit_ticker IS NOT NULL",
+ conn,
+ params=(date,),
+ index_col=["markit_ticker", "markit_tier"],
+ )
df.columns = ["markit_ticker", "markit_tier"]
df = df.set_index(["markit_ticker", "markit_tier"])
df = df.join(df_mapping).groupby(level=["markit_ticker", "markit_tier"]).first()
@@ -94,32 +126,40 @@ def get_bbg_ids(conn: connection, df: pd.DataFrame,
def get_basketid(conn: connection, name: str) -> Tuple[int, int]:
with conn.cursor() as c:
c.execute("SELECT max(series)+1 FROM index_version where index='BS'")
- serie, = c.fetchone()
- c.execute("INSERT INTO index_version(index, series, version, redindexcode) "
- "VALUES('BS', %s, 1, %s) RETURNING basketid",
- (serie, name))
+ serie, = c.fetchone()
+ c.execute(
+ "INSERT INTO index_version(index, series, version, redindexcode) "
+ "VALUES('BS', %s, 1, %s) RETURNING basketid",
+ (serie, name),
+ )
basket_id, = c.fetchone()
conn.commit()
return serie, basket_id
-def add_basket_constituents(conn: connection, basketid: int,
- df: pd.DataFrame = pd.read_clipboard(header=None)):
+def add_basket_constituents(
+ conn: connection, basketid: int, df: pd.DataFrame = pd.read_clipboard(header=None)
+):
df_bbg = get_bbg_ids(conn, df.iloc[:, :2])
df.columns = ["markit_ticker", "markit_tier", "weight"]
df = df.set_index(["markit_ticker", "markit_tier"])
df = df.join(df_bbg)
with conn.cursor() as c:
- c.executemany("INSERT INTO basket_constituents VALUES(%s, %s, %s, %s)",
- [(t.company_id, t.seniority, basketid, t.weight)
- for t in df.itertuples(index=False)])
+ c.executemany(
+ "INSERT INTO basket_constituents VALUES(%s, %s, %s, %s)",
+ [
+ (t.company_id, t.seniority, basketid, t.weight)
+ for t in df.itertuples(index=False)
+ ],
+ )
conn.commit()
if __name__ == "__main__":
df = pd.read_clipboard(header=None)
from utils.db import serenitas_pool
+
conn = serenitas_pool.getconn()
df = get_bbg_ids(conn, pd.read_clipboard(header=None))
# missing tickers