forked from chumschat/eversite-uploader
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.py
More file actions
49 lines (41 loc) · 1.66 KB
/
config.py
File metadata and controls
49 lines (41 loc) · 1.66 KB
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
import os
from dotenv import load_dotenv
from pydantic import BaseModel, Field, model_validator
from typing_extensions import Self
import nekoton as nt
class Configuration(BaseModel):
seed_phrase: str = Field(..., min_length=1)
site_address: str = Field(..., min_length=1)
domain_address: str = Field(..., min_length=1)
gql_transport: str
jrpc_transport: str
@model_validator(mode="after")
def check_model(self) -> Self:
if not nt.Address.validate(self.site_address):
raise ValueError("Invalid site address is provided in environment!")
if not nt.Address.validate(self.domain_address):
raise ValueError("Invalid domain address is provided in environment!")
return self
async def get_transport(self) -> nt.Transport:
if self.gql_transport:
transport = nt.GqlTransport([self.gql_transport])
await transport.check_connection()
return transport
elif self.jrpc_transport:
transport = nt.JrpcTransport(endpoint=self.jrpc_transport)
await transport.check_connection()
return transport
else:
raise ValueError("No valid transport is provided in environment!")
def get_keypair(self) -> nt.KeyPair:
seed = nt.Bip39Seed(self.seed_phrase)
return seed.derive()
def load_config() -> Configuration:
load_dotenv()
return Configuration(
seed_phrase=os.getenv("SEED_PHRASE"),
site_address=os.getenv("SITE_ADDRESS"),
domain_address=os.getenv("DOMAIN_ADDRESS"),
gql_transport=os.getenv("GQL_TRANSPORT", ""),
jrpc_transport=os.getenv("JRPC_TRANSPORT", "")
)