Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/dipdup/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ async def fire_handler(
self,
name: str,
index: str,
datasource: Datasource,
datasource: TzktDatasource,
fmt: Optional[str] = None,
*args,
**kwargs: Any,
Expand Down Expand Up @@ -208,7 +208,7 @@ def __init__(
callbacks: 'CallbackManager',
logger: FormattedLogger,
handler_config: HandlerConfig,
datasource: Datasource,
datasource: TzktDatasource,
) -> None:
super().__init__(datasources, config, callbacks)
self.logger = logger
Expand Down Expand Up @@ -246,7 +246,7 @@ async def fire_handler(
ctx: 'DipDupContext',
name: str,
index: str,
datasource: Datasource,
datasource: TzktDatasource,
fmt: Optional[str] = None,
*args,
**kwargs: Any,
Expand Down
28 changes: 27 additions & 1 deletion src/dipdup/datasources/tzkt/datasource.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
)
from dipdup.datasources.datasource import IndexDatasource
from dipdup.datasources.tzkt.enums import TzktMessageType
from dipdup.models import BigMapAction, BigMapData, BlockData, Head, HeadBlockData, OperationData
from dipdup.models import BigMapAction, BigMapData, BlockData, Head, HeadBlockData, OperationData, QuoteData
from dipdup.utils import groupby, split_by_chunks

OperationID = int
Expand Down Expand Up @@ -537,6 +537,17 @@ async def get_big_maps(
big_maps.append(self.convert_big_map(bm))
return big_maps

async def get_quotes(self, level: int) -> QuoteData:
"""Get quote for block"""
self._logger.info('Fetching quotes for level %s', level)
quote_json = await self._http.request(
'get',
url='v1/quotes',
params={"level": level},
cache=True,
)
return self.convert_quote(quote_json[0])

async def add_index(self, index_config: ResolvedIndexConfigT) -> None:
"""Register index config in internal mappings and matchers. Find and register subscriptions."""

Expand Down Expand Up @@ -866,6 +877,21 @@ def convert_head_block(cls, head_block_json: Dict[str, Any]) -> HeadBlockData:
quote_eth=Decimal(head_block_json['quoteEth']),
)

@classmethod
def convert_quote(cls, quote_json: Dict[str, Any]) -> QuoteData:
"""Convert raw quote message from REST into dataclass"""
return QuoteData(
level=quote_json['level'],
timestamp=cls._parse_timestamp(quote_json['timestamp']),
btc=Decimal(quote_json['btc']),
eur=Decimal(quote_json['eur']),
usd=Decimal(quote_json['usd']),
cny=Decimal(quote_json['cny']),
jpy=Decimal(quote_json['jpy']),
krw=Decimal(quote_json['krw']),
eth=Decimal(quote_json['eth']),
)

async def _send(self, method: str, arguments: List[Dict[str, Any]], on_invocation=None) -> None:
client = self._get_client()
while client.transport.state != ConnectionState.connected:
Expand Down
15 changes: 15 additions & 0 deletions src/dipdup/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,21 @@ class HeadBlockData:
quote_eth: Decimal


@dataclass
class QuoteData:
"""Basic structure for quotes from TzKT HTTP response"""

level: int
timestamp: datetime
btc: Decimal
eur: Decimal
usd: Decimal
cny: Decimal
jpy: Decimal
krw: Decimal
eth: Decimal


class Schema(Model):
name = fields.CharField(256, pk=True)
hash = fields.CharField(256)
Expand Down