Source code for pypergraph.network.models.network
from typing import Optional, List
from pydantic import Field, BaseModel, IPvAnyNetwork, conint, constr
from pypergraph.core.constants import ALIAS_MAX_LEN, PORT_MAX
[docs]
class NetworkInfo:
def __init__(
self,
network_id="mainnet",
block_explorer_url=None,
l0_host=None,
currency_l1_host=None,
data_l1_host=None,
metagraph_id=None,
):
self.data_l1_host = None
self.network_id = network_id.lower()
if self.network_id in ("mainnet", "integrationnet", "testnet"):
self.block_explorer_url = (
block_explorer_url
or f"https://be-{self.network_id}.constellationnetwork.io"
)
else:
self.block_explorer_url = block_explorer_url
self.l0_host = l0_host or f"https://l0-lb-{network_id}.constellationnetwork.io"
self.currency_l1_host = (
currency_l1_host or f"https://l1-lb-{network_id}.constellationnetwork.io"
)
self.data_l1_host = data_l1_host or self.data_l1_host
self.metagraph_id = metagraph_id
def __repr__(self):
return (
f"NetworkInfo(network_id={self.network_id}, block_explorer_url={self.block_explorer_url}, "
f"l0_host={self.l0_host}, cl1_host={self.currency_l1_host}, dl1_host={self.data_l1_host}, "
f"l0_lb_url={f'https://l0-lb-{self.network_id}.constellationnetwork.io'}, l1_lb_url={f'https://l1-lb-{self.network_id}.constellationnetwork.io'}, metagraph_id={self.metagraph_id})"
)
[docs]
class PeerInfo(BaseModel):
alias: Optional[str] = Field(default=None, max_length=ALIAS_MAX_LEN)
id: constr(pattern=r"^[0-9a-f]{128}$")
ip: IPvAnyNetwork
state: str
session: int
public_port: conint(ge=0, le=PORT_MAX) = Field(..., alias="publicPort")
p2p_port: int = Field(..., alias="p2pPort")
reputation: Optional[float] = None
def __repr__(self) -> str:
return (
f"PeerInfo(alias={self.alias!r}, id={self.id!r}, ip={self.ip!r}, "
f"state={self.state!r}, session={self.session!r}, "
f"public_port={self.public_port!r}, p2p_port={self.p2p_port!r}, "
f"reputation={self.reputation!r})"
)
[docs]
@classmethod
def process_cluster_peers(cls, data: List[dict]) -> List["PeerInfo"]:
return [cls.model_validate(item) for item in data]
[docs]
class TotalSupply(BaseModel):
ordinal: int = Field(..., ge=0)
total_supply: int = Field(..., ge=0, alias="total")
def __repr__(self):
return f"TotalSupply(ordinal={self.ordinal}, total_supply={self.total_supply})"
[docs]
class Ordinal(BaseModel):
ordinal: int = Field(ge=0, alias="value")
def __repr__(self):
return f"Ordinal(value={self.value})"