2021-10-09 20:37:54 +02:00
|
|
|
|
# standard imports
|
|
|
|
|
import os
|
|
|
|
|
import json
|
2021-10-18 10:47:48 +02:00
|
|
|
|
import logging
|
2021-10-09 20:37:54 +02:00
|
|
|
|
|
2021-10-11 17:39:01 +02:00
|
|
|
|
# external imports
|
|
|
|
|
from chainlib.chain import ChainSpec
|
|
|
|
|
|
2021-10-09 20:37:54 +02:00
|
|
|
|
# local imports
|
2021-10-10 11:33:30 +02:00
|
|
|
|
from .base import (
|
|
|
|
|
Data,
|
|
|
|
|
data_dir,
|
|
|
|
|
)
|
2021-10-09 20:37:54 +02:00
|
|
|
|
|
2021-10-18 10:47:48 +02:00
|
|
|
|
logg = logging.getLogger(__name__)
|
|
|
|
|
|
2021-10-09 20:37:54 +02:00
|
|
|
|
|
|
|
|
|
class Network(Data):
|
|
|
|
|
|
2021-10-09 21:45:07 +02:00
|
|
|
|
def __init__(self, path='.', targets=[]):
|
2021-10-09 20:37:54 +02:00
|
|
|
|
super(Network, self).__init__()
|
2021-10-18 10:47:48 +02:00
|
|
|
|
self.resources = None
|
2021-10-09 20:37:54 +02:00
|
|
|
|
self.path = path
|
2021-10-09 21:45:07 +02:00
|
|
|
|
self.targets = targets
|
2021-10-09 20:37:54 +02:00
|
|
|
|
self.network_path = os.path.join(self.path, 'network.json')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def load(self):
|
|
|
|
|
super(Network, self).load()
|
|
|
|
|
|
|
|
|
|
f = open(self.network_path, 'r')
|
|
|
|
|
o = json.load(f)
|
|
|
|
|
f.close()
|
|
|
|
|
|
2021-10-10 14:49:22 +02:00
|
|
|
|
self.resources = o['resources']
|
2021-10-09 20:37:54 +02:00
|
|
|
|
|
|
|
|
|
self.inited = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def start(self):
|
|
|
|
|
super(Network, self).load()
|
|
|
|
|
|
2021-10-10 11:33:30 +02:00
|
|
|
|
network_template_file_path = os.path.join(data_dir, 'network_template_v{}.json'.format(self.version()))
|
2021-10-09 21:45:07 +02:00
|
|
|
|
|
2021-10-10 11:33:30 +02:00
|
|
|
|
f = open(network_template_file_path)
|
|
|
|
|
o_part = json.load(f)
|
|
|
|
|
f.close()
|
2021-10-11 17:39:01 +02:00
|
|
|
|
|
2021-10-18 10:47:48 +02:00
|
|
|
|
self.resources = {}
|
2021-10-09 21:45:07 +02:00
|
|
|
|
for v in self.targets:
|
2021-10-18 10:47:48 +02:00
|
|
|
|
self.resources[v] = o_part
|
|
|
|
|
|
|
|
|
|
self.save()
|
2021-10-11 17:39:01 +02:00
|
|
|
|
|
2021-10-18 10:47:48 +02:00
|
|
|
|
|
|
|
|
|
def save(self):
|
|
|
|
|
f = open(self.network_path, 'w')
|
|
|
|
|
json.dump({
|
|
|
|
|
'resources': self.resources,
|
|
|
|
|
}, f, sort_keys=True, indent="\t")
|
2021-10-09 20:37:54 +02:00
|
|
|
|
f.close()
|
|
|
|
|
|
|
|
|
|
|
2021-10-11 17:39:01 +02:00
|
|
|
|
def resource(self, k):
|
|
|
|
|
v = self.resources.get(k)
|
2021-10-09 21:04:11 +02:00
|
|
|
|
if v == None:
|
|
|
|
|
raise AttributeError('no defined reference for {}'.format(k))
|
|
|
|
|
return v
|
|
|
|
|
|
|
|
|
|
|
2021-10-18 10:47:48 +02:00
|
|
|
|
def resource_set(self, resource_key, content_key, reference, key_account=None):
|
|
|
|
|
self.resources[resource_key]['contents'][content_key]['reference'] = reference
|
|
|
|
|
self.resources[resource_key]['contents'][content_key]['key_account'] = key_account
|
|
|
|
|
|
|
|
|
|
|
2021-10-11 17:39:01 +02:00
|
|
|
|
def chain_spec(self, k):
|
|
|
|
|
v = self.resource(k)
|
|
|
|
|
return ChainSpec.from_dict(v['chain_spec'])
|
|
|
|
|
|
|
|
|
|
|
2021-10-18 10:47:48 +02:00
|
|
|
|
def set(self, resource_key, chain_spec):
|
|
|
|
|
chain_spec_dict = chain_spec.asdict()
|
|
|
|
|
for k in chain_spec_dict.keys():
|
|
|
|
|
logg.debug('resources {}'.format(self.resources))
|
|
|
|
|
self.resources[resource_key]['chain_spec'][k] = chain_spec_dict[k]
|
|
|
|
|
|
|
|
|
|
|
2021-10-09 20:37:54 +02:00
|
|
|
|
def __str__(self):
|
|
|
|
|
s = ''
|
2021-10-10 14:49:22 +02:00
|
|
|
|
for k in self.resources.keys():
|
2021-10-11 17:39:01 +02:00
|
|
|
|
for kk in self.resources[k]['contents'].keys():
|
|
|
|
|
v = self.resources[k]['contents'][kk]
|
2021-10-10 14:49:22 +02:00
|
|
|
|
if v == None:
|
|
|
|
|
v = ''
|
|
|
|
|
s += '{}.{} = {}\n'.format(k, kk, v)
|
2021-10-09 20:37:54 +02:00
|
|
|
|
|
|
|
|
|
return s
|