1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
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
class QuoteDetails(Deal, table="markit_quote_details", deal_type=None):
quotetime: datetime
quote_source: str
id: int
sender: str = None
@dataclass
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(
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
def message(self):
return QuoteDetails.from_tradeid(self.msg_id)
|