aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/api_quotes/api.py30
-rw-r--r--python/api_quotes/quotes.py24
2 files changed, 32 insertions, 22 deletions
diff --git a/python/api_quotes/api.py b/python/api_quotes/api.py
index 15e080eb..a1ec5dfd 100644
--- a/python/api_quotes/api.py
+++ b/python/api_quotes/api.py
@@ -6,19 +6,19 @@ from typing import ClassVar
import requests
-class MarkitAPI:
- api_key: ClassVar = None
- base_url: ClassVar = None
+def load_api_key():
+ with get_credential_path("markit_api").open() as fh:
+ creds = json.load(fh)
+ base_url = creds.pop("url")
+ r = requests.post(
+ urljoin(base_url, "apikey"),
+ data=creds,
+ )
+ return base_url, r.text
- @classmethod
- def set_api(cls):
- creds = cls.get_creds()
- r = requests.post(
- urljoin(creds["url"], "apikey"),
- data={"username": creds["username"], "password": creds["password"]},
- )
- cls.api_key = r.text
- cls.base_url = creds["url"]
+
+class MarkitAPI:
+ base_url, api_key = load_api_key()
@classmethod
def get_data(cls, asset_class, service="latest"):
@@ -36,9 +36,3 @@ class MarkitAPI:
url = urljoin(cls.base_url, path)
r = requests.get(url, params)
return json.loads(r.text)
-
- @classmethod
- def get_creds(cls):
- cred_path = get_credential_path("markit_api")
- creds = json.load(cred_path.open())
- return creds
diff --git a/python/api_quotes/quotes.py b/python/api_quotes/quotes.py
index 7302b411..586320a8 100644
--- a/python/api_quotes/quotes.py
+++ b/python/api_quotes/quotes.py
@@ -1,6 +1,10 @@
from serenitas.ops.trade_dataclasses import Deal
from dataclasses import dataclass, field
import datetime
+from typing import Literal
+
+firmness = Literal["FIRM", "INDICATIVE"]
+asset_class = Literal["CD"]
@dataclass
@@ -12,34 +16,46 @@ class QuoteDetails(Deal, table="markit_quote_details", deal_type=None):
@dataclass
-class Quote(Deal, table="sn_cds_quotes", deal_type=None):
- msg_id: id
- quote_id: text
+class Quote(Deal, table="markit_api_quotes", deal_type=None):
+ quote_id: int
+ asset_class: asset_class
redcode: str
ticker: str
maturity: datetime.date
+ tenor: int
+ running_coupon: int
bid_spread: float
bid_upfront: float
bid_size: float
ask_spread: float
ask_upfront: float
ask_size: float
+ quote_firness: firmness
+ msg_id: str
+ source: str
+ quotetime: datetime
+ quote_source: str
@classmethod
def from_markit_line(cls, line):
return cls(
- msg_id=line["message"]["id"],
+ quote_id=line["quoteId"],
redcode=line["redCode"],
ticker=line["ticker"],
maturity=datetime.date(
line["maturityYear"], line["maturityMonth"], line["maturityDay"]
),
+ tenor=line["tenor"],
+ running_coupon=line["runningCoupon"],
bid_spread=line["bidConventionalSpread"],
bid_upfront=line["bidUpfront"],
bid_size=line["bidSize"],
ask_spread=line["askConventionalSpread"],
ask_upfront=line["askUpfront"],
ask_size=line["askSize"],
+ msg_id=line["message"]["id"],
+ source=line["sourceShortName"],
+ received_date=line["receivedDateTime"],
)
@property