diff options
| -rw-r--r-- | python/api_quotes/api.py | 30 | ||||
| -rw-r--r-- | python/api_quotes/quotes.py | 24 |
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 |
