mirror of
https://github.com/pezkuwichain/pezkuwi-wallet-utils.git
synced 2026-04-22 04:28:02 +00:00
Initial commit: Pezkuwi Wallet Utils
- Chain configurations for Polkadot, Kusama and all major parachains - Pezkuwichain ecosystem (Relay Chain, Asset Hub, People Chain) - Staking metadata and validator lists - DApp configurations - XCM cross-chain messaging configs - Governance dApp listings - Promotional banners - Chain migration configurations - Asset metadata and icons Based on Nova Utils with Pezkuwichain extensions
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
from functools import reduce
|
||||
from typing import Callable, List
|
||||
|
||||
import yaml
|
||||
import json
|
||||
from urllib.parse import unquote, urlparse
|
||||
from pathlib import PurePosixPath
|
||||
import os.path
|
||||
import os
|
||||
|
||||
|
||||
class Types:
|
||||
|
||||
def __init__(self, types_config):
|
||||
local_path = Types.__remote_url_to_local(types_config["url"])
|
||||
|
||||
with open(local_path) as fin:
|
||||
self.types_dict = json.load(fin)
|
||||
|
||||
self.is_v14 = Types.__is_v14(self.types_dict)
|
||||
self.overrides_common = types_config.get("overridesCommon", False)
|
||||
|
||||
@staticmethod
|
||||
def __is_v14(types_dict):
|
||||
# ParaId types is only has to be defined for v14 types
|
||||
return "ParaId" in types_dict["types"].keys()
|
||||
|
||||
@staticmethod
|
||||
def __remote_url_to_local(url: str):
|
||||
path_parts = PurePosixPath(unquote(urlparse(url).path)).parts
|
||||
|
||||
after_chains_index = path_parts.index("chains")
|
||||
|
||||
# dirname = os.path.dirname(__file__)
|
||||
|
||||
relative_path_parts = path_parts[(after_chains_index + 1):]
|
||||
local_path = os.path.join("", *relative_path_parts)
|
||||
|
||||
return local_path
|
||||
|
||||
@staticmethod
|
||||
def parse_from(chain_config):
|
||||
types_config = chain_config.get("types")
|
||||
|
||||
return None if types_config is None else Types(types_config)
|
||||
|
||||
|
||||
class Chain:
|
||||
|
||||
def __init__(self, chain_config):
|
||||
self.config = chain_config
|
||||
self.types = Types.parse_from(chain_config)
|
||||
self.name = chain_config["name"]
|
||||
|
||||
|
||||
def v14_types_should_override_common(chain: Chain) -> List[str]:
|
||||
if chain.types is not None and chain.types.is_v14 and not chain.types.overrides_common:
|
||||
return ["v14 types should have overrideCommon set to True"]
|
||||
else:
|
||||
return []
|
||||
|
||||
|
||||
ALL_RULES: List[Callable[[Chain], List[str]]] = [
|
||||
v14_types_should_override_common
|
||||
]
|
||||
|
||||
with open("chains_validator.yaml") as fin:
|
||||
config = yaml.safe_load(fin)
|
||||
|
||||
found_problems = False
|
||||
|
||||
for chain_file in config["chain_files"]:
|
||||
with open(chain_file) as fin:
|
||||
all_chains_config = json.load(fin)
|
||||
|
||||
for chain_config in all_chains_config:
|
||||
try:
|
||||
chain = Chain(chain_config)
|
||||
|
||||
chain_problems = reduce(lambda acc, rule: acc + rule(chain), ALL_RULES, [])
|
||||
except Exception as e:
|
||||
chain_problems = [str(e)]
|
||||
|
||||
for problem in chain_problems:
|
||||
print(f"{chain_file}->{chain_config['name']}: {problem}")
|
||||
|
||||
if len(chain_problems) > 0:
|
||||
found_problems = True
|
||||
|
||||
if found_problems:
|
||||
exit(1)
|
||||
Reference in New Issue
Block a user