moonstream/moonstreamapi/moonstreamapi/data.py

299 wiersze
7.1 KiB
Python
Czysty Zwykły widok Historia

2021-07-19 10:31:18 +00:00
"""
Pydantic schemas for the Moonstream HTTP API
"""
2021-11-24 11:07:48 +00:00
from datetime import datetime
2021-11-09 15:13:36 +00:00
from enum import Enum
2022-02-17 10:22:20 +00:00
from typing import Any, Dict, List, Optional, Union, Literal
2021-10-26 16:07:33 +00:00
from uuid import UUID
2022-02-17 10:22:20 +00:00
from xmlrpc.client import Boolean
2021-07-21 16:51:28 +00:00
from pydantic import BaseModel, Field
2022-02-17 10:22:20 +00:00
from sqlalchemy import false
2021-07-19 10:31:18 +00:00
2021-09-06 17:21:05 +00:00
USER_ONBOARDING_STATE = "onboarding_state"
2022-03-07 17:14:56 +00:00
BUGOUT_RESOURCE_QUERY_RESOLVER = "query_name_resolver"
2021-07-19 10:31:18 +00:00
2021-11-09 15:13:36 +00:00
class TimeScale(Enum):
month = "month"
week = "week"
day = "day"
2021-12-21 15:23:26 +00:00
class UpdateStats(BaseModel):
timescales: List[str]
2021-07-27 15:08:40 +00:00
class SubscriptionTypeResourceData(BaseModel):
id: str
name: str
description: str
2021-09-08 15:06:12 +00:00
choices: List[str] = Field(default_factory=list)
icon_url: str
blockchain: Optional[str] = None
stripe_product_id: Optional[str] = None
stripe_price_id: Optional[str] = None
2021-07-27 15:08:40 +00:00
active: bool = False
class SubscriptionTypesListResponse(BaseModel):
subscription_types: List[SubscriptionTypeResourceData] = Field(default_factory=list)
2021-07-27 15:08:40 +00:00
class SubscriptionResourceData(BaseModel):
id: str
address: Optional[str]
2021-10-26 15:26:03 +00:00
abi: Optional[str]
2021-08-10 16:29:16 +00:00
color: Optional[str]
label: Optional[str]
2021-07-27 15:08:40 +00:00
user_id: str
subscription_type_id: Optional[str]
created_at: Optional[datetime]
updated_at: Optional[datetime]
2021-07-27 15:08:40 +00:00
class CreateSubscriptionRequest(BaseModel):
address: str
color: str
label: str
subscription_type_id: str
2021-07-19 10:31:18 +00:00
class PingResponse(BaseModel):
"""
Schema for ping response
"""
status: str
class VersionResponse(BaseModel):
"""
Schema for responses on /version endpoint
"""
version: str
class NowResponse(BaseModel):
"""
Schema for responses on /now endpoint
"""
epoch_time: float
2021-09-29 14:08:58 +00:00
class StatusResponse(BaseModel):
ethereum_txpool_timestamp: Optional[datetime] = None
ethereum_trending_timestamp: Optional[datetime] = None
2021-08-10 16:29:16 +00:00
class SubscriptionUpdate(BaseModel):
update: Dict[str, Any]
drop_keys: List[str] = Field(default_factory=list)
class SubscriptionsListResponse(BaseModel):
2021-08-02 10:59:32 +00:00
subscriptions: List[SubscriptionResourceData] = Field(default_factory=list)
2021-07-28 16:59:13 +00:00
class EVMFunctionSignature(BaseModel):
type = "function"
hex_signature: str
text_signature_candidates: List[str] = Field(default_factory=list)
2021-07-28 16:59:13 +00:00
class EVMEventSignature(BaseModel):
type = "event"
hex_signature: str
text_signature_candidates: List[str] = Field(default_factory=list)
2021-07-28 16:59:13 +00:00
class ContractABI(BaseModel):
functions: List[EVMFunctionSignature]
events: List[EVMEventSignature]
class EthereumTransaction(BaseModel):
gas: int
gas_price: int
value: int
from_address: str = Field(alias="from")
to_address: Optional[str] = Field(alias="to")
hash: Optional[str] = None
block_hash: Optional[str] = Field(default=None, alias="blockHash")
block_number: Optional[int] = Field(default=None, alias="blockNumber")
input: Optional[str] = None
nonce: Optional[int] = None
r: Optional[str] = None
s: Optional[str] = None
v: Optional[str] = None
transaction_index: Optional[int] = Field(default=None, alias="transactionIndex")
transaction_type: str = Field(default="0x0", alias="type")
2021-08-02 10:59:32 +00:00
class EthereumTransactionItem(BaseModel):
color: Optional[str]
from_label: Optional[str] = None
to_label: Optional[str] = None
2021-08-06 14:03:24 +00:00
block_number: Optional[int] = None
2021-08-02 10:59:32 +00:00
gas: int
gasPrice: int
value: int
nonce: Optional[str]
2021-08-02 10:59:32 +00:00
from_address: Optional[str] # = Field(alias="from")
to_address: Optional[str] # = Field(default=None, alias="to")
hash: Optional[str] = None
input: Optional[str] = None
timestamp: Optional[int] = None
subscription_type_id: Optional[str] = None
2021-08-02 10:59:32 +00:00
class StreamBoundary(BaseModel):
"""
StreamBoundary represents a window of time through which an API caller can view a stream.
This data structure is foundational to our stream rendering, and is used throughout the code
base.
"""
start_time: int = 0
end_time: Optional[int] = None
include_start: bool = False
include_end: bool = False
2021-11-24 11:07:48 +00:00
reversed_time: bool = False
class Event(BaseModel):
event_type: str
event_timestamp: int # Seconds since epoch
event_data: Dict[str, Any] = Field(default_factory=dict)
class GetEventsResponse(BaseModel):
stream_boundary: StreamBoundary
events: List[Event] = Field(default_factory=list)
2021-08-02 10:59:32 +00:00
class TxinfoEthereumBlockchainRequest(BaseModel):
tx: EthereumTransaction
class EthereumSmartContractSourceInfo(BaseModel):
name: str
source_code: str
abi: str
compiler_version: str
2021-08-30 13:46:51 +00:00
class EthereumTokenDetails(BaseModel):
name: Optional[str] = None
symbol: Optional[str] = None
external_url: List[str] = Field(default_factory=list)
2021-08-25 14:04:58 +00:00
2021-08-30 13:46:51 +00:00
class EthereumSmartContractDetails(BaseModel):
name: Optional[str] = None
external_url: List[str] = Field(default_factory=list)
class EthereumNFTDetails(EthereumTokenDetails):
total_supply: Optional[int] = None
2021-08-30 13:46:51 +00:00
2021-08-25 14:04:58 +00:00
class EthereumAddressInfo(BaseModel):
address: str
2021-10-26 08:12:09 +00:00
ens_name: Optional[str] = None
token: Optional[EthereumTokenDetails] = None
smart_contract: Optional[EthereumSmartContractDetails] = None
nft: Optional[EthereumNFTDetails] = None
2021-08-25 14:04:58 +00:00
class TxinfoEthereumBlockchainResponse(BaseModel):
tx: EthereumTransaction
is_smart_contract_deployment: bool = False
is_smart_contract_call: bool = False
smart_contract_address: Optional[str] = None
smart_contract_info: Optional[EthereumSmartContractSourceInfo] = None
abi: Optional[ContractABI] = None
errors: List[str] = Field(default_factory=list)
2021-08-16 14:41:41 +00:00
class AddressLabelResponse(BaseModel):
label: str
label_data: Optional[Dict[str, Any]] = None
class AddressLabelsResponse(BaseModel):
address: str
labels: List[AddressLabelResponse] = Field(default_factory=list)
class AddressListLabelsResponse(BaseModel):
addresses: List[AddressLabelsResponse] = Field(default_factory=list)
2021-09-02 14:57:27 +00:00
class OnboardingState(BaseModel):
is_complete: bool
steps: Dict[str, int]
2021-10-26 16:07:33 +00:00
2021-11-29 12:53:09 +00:00
class SubdcriptionsAbiResponse(BaseModel):
abi: str
2021-11-29 12:53:09 +00:00
2021-10-28 15:48:15 +00:00
class DashboardMeta(BaseModel):
2021-11-14 08:38:57 +00:00
subscription_id: UUID
2021-10-28 15:48:15 +00:00
generic: Optional[List[Dict[str, str]]]
2021-12-02 13:22:16 +00:00
all_methods: bool = True
all_events: bool = True
2021-10-28 15:48:15 +00:00
methods: List[Dict[str, Any]]
events: List[Dict[str, Any]]
class DashboardResource(BaseModel):
type: str
user_id: str
name: str
subscription_settings: List[DashboardMeta]
class DashboardCreate(BaseModel):
name: str
subscription_settings: List[DashboardMeta]
class DashboardUpdate(BaseModel):
2021-11-24 14:22:15 +00:00
name: Optional[str]
subscription_settings: List[DashboardMeta] = Field(default_factory=list)
2022-02-16 16:12:42 +00:00
class UpdateDataRequest(BaseModel):
params: Dict[str, Any] = Field(default_factory=dict)
2022-02-17 10:22:20 +00:00
class UpdateQueryRequest(BaseModel):
query: str
class PreapprovedQuery(BaseModel):
query: str
name: str
2022-02-17 10:22:20 +00:00
public: bool = False
2022-03-07 17:14:56 +00:00
class QueryPresignUrl(BaseModel):
url: str
2023-04-27 14:21:48 +00:00
class QueryInfoResponse(BaseModel):
query: str
query_id: str
public: bool = False
2023-05-03 14:00:20 +00:00
preapprove: bool = False
2023-04-27 14:21:48 +00:00
approved: bool = False
2023-05-04 13:28:37 +00:00
parameters: Dict[str, Any] = Field(default_factory=dict)
2023-05-03 14:21:48 +00:00
created_at: Optional[datetime]
updated_at: Optional[datetime]