Add hashes wich store in DashboardMeta for each abi.

pull/383/head
Andrey Dolgolev 2021-11-10 15:53:54 +02:00
rodzic 402fcddf87
commit 414b2f15ef
2 zmienionych plików z 18 dodań i 6 usunięć

Wyświetl plik

@ -1,6 +1,7 @@
"""
Pydantic schemas for the Moonstream HTTP API
"""
from _typeshed import OpenTextModeReading
from enum import Enum
from typing import List, Optional, Dict, Any, Union
from uuid import UUID
@ -238,12 +239,14 @@ class DashboardMeta(BaseModel):
all_events: bool = False
methods: List[Dict[str, Any]]
events: List[Dict[str, Any]]
subscription_abi_hash: Optional[str]
class DashboardResource(BaseModel):
type: str
user_id: str
name: str
abi_hash
dashboard_subscriptions: List[DashboardMeta]

Wyświetl plik

@ -1,5 +1,5 @@
import hashlib
import logging
from os import read
import json
from typing import Any, List, Optional, Dict
from uuid import UUID
@ -9,6 +9,7 @@ from bugout.data import BugoutResource, BugoutResources
from bugout.exceptions import BugoutResponseException
from fastapi import APIRouter, Request, Query
from .. import actions
from .. import data
from ..middleware import MoonstreamHTTPException
@ -119,6 +120,12 @@ async def add_dashboard_handler(
dashboard_subscription, abi, s3_path=s3_path
)
abi_string = json.dumps(abi, sort_keys=True, indent=2)
hash = hashlib.md5(abi_string.encode("utf-8")).hexdigest()
dashboard_subscription.subscription_abi_hash = hash
else:
logger.error(
f"Error subscription_id: {dashboard_subscription.subscription_id} not exists."
@ -385,17 +392,19 @@ async def get_dashboard_data_links_handler(
raise MoonstreamHTTPException(status_code=500, internal_error=e)
# filter out dasboards
subscriptions_ids = [
UUID(subscription_meta["subscription_id"])
subscriptions_ids_hashes = {
UUID(subscription_meta["subscription_id"]): subscription_meta[
"subscription_abi_hash"
]
for subscription_meta in dashboard_resource.resource_data[
"dashboard_subscriptions"
]
]
}
dashboard_subscriptions = [
subscription
for subscription in subscription_resources.resources
if subscription.id in subscriptions_ids
if subscription.id in subscriptions_ids_hashes
]
# generate s3 links
@ -410,7 +419,7 @@ async def get_dashboard_data_links_handler(
stats[subscription.id] = {}
for timescale in available_timescales:
try:
result_key = f'contracts_data/{subscription.resource_data["address"]}/v1/{timescale}.json'
result_key = f'contracts_data/{subscription.resource_data["address"]}/{subscriptions_ids_hashes[subscription.id]}/v1/{timescale}.json'
stats_presigned_url = s3_client.generate_presigned_url(
"get_object",
Params={"Bucket": SMARTCONTRACTS_ABI_BUCKET, "Key": result_key},