diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/markit/rates.py | 68 |
1 files changed, 49 insertions, 19 deletions
diff --git a/python/markit/rates.py b/python/markit/rates.py index 945650ec..95be7f98 100644 --- a/python/markit/rates.py +++ b/python/markit/rates.py @@ -82,27 +82,57 @@ def update_bbg_members(conn, session, curve_type, download_date): except TypeError: with conn.cursor() as c: c.execute( - "INSERT INTO bbg_curves VALUES(%s, %s, %s)", - (curve_type.value, new_members, DateRange(download_date)), - ) - conn.commit() - return - if new_members != members: - with conn.cursor() as c: - c.execute( - "UPDATE bbg_curves SET in_effect=%s " - "WHERE curve_type=%s AND in_effect @> %s", - ( - DateRange(in_effect.lower, download_date), - curve_type.value, - download_date, - ), - ) - c.execute( - "INSERT INTO bbg_curves VALUES(%s, %s, %s)", - (curve_type.value, new_members, DateRange(download_date)), + "SELECT in_effect, members FROM bbg_curves " + "WHERE curve_type=%s ORDER BY lower(in_effect) LIMIT 1", + (curve_type.value,), ) + ( + in_effect, + members, + ) = c.fetchone() + if new_members == members: + with conn.cursor() as c: + c.execute( + "UPDATE bbg_curves SET in_effect=%s " + "WHERE in_effect=%s AND curve_type=%s", + ( + DateRange(download_date, in_effect.upper), + in_effect, + curve_type.value, + ), + ) + else: + with conn.cursor() as c: + c.execute( + "INSERT INTO bbg_curves VALUES(%s, %s, %s)", + ( + curve_type.value, + new_members, + DateRange(download_date, in_effect.lower), + ), + ) conn.commit() + else: + if new_members != members: + with conn.cursor() as c: + c.execute( + "UPDATE bbg_curves SET in_effect=%s " + "WHERE curve_type=%s AND in_effect @> %s", + ( + DateRange(in_effect.lower, download_date), + curve_type.value, + download_date, + ), + ) + c.execute( + "INSERT INTO bbg_curves VALUES(%s, %s, %s)", + ( + curve_type.value, + new_members, + DateRange(download_date, in_effect.upper), + ), + ) + conn.commit() def update_bbg_desc(conn, session, download_date): |
