cic-cli/cic/meta.py

97 lines
2.2 KiB
Python
Raw Normal View History

2021-10-09 19:56:29 +02:00
# standard imports
import os
import json
# external imports
from cic_types import MetadataPointer
from cic_types.processor import generate_metadata_pointer
2021-10-14 15:43:23 +02:00
from cic_types.ext.metadata import MetadataRequestsHandler
from hexathon import strip_0x
2021-10-09 19:56:29 +02:00
# local imports
2021-10-10 11:33:30 +02:00
from .base import (
Data,
data_dir,
)
2021-10-14 15:43:23 +02:00
from cic.output import OutputWriter
2021-10-09 19:56:29 +02:00
class Meta(Data):
def __init__(self, path='.', writer=None):
2021-10-09 19:56:29 +02:00
super(Meta, self).__init__()
self.name = None
2021-10-09 20:37:54 +02:00
self.contact = {}
2021-10-09 19:56:29 +02:00
self.path = path
self.writer = writer
2021-10-09 19:56:29 +02:00
self.meta_path = os.path.join(self.path, 'meta.json')
def load(self):
super(Meta, self).load()
2021-10-09 20:37:54 +02:00
f = open(self.meta_path, 'r')
o = json.load(f)
2021-10-09 19:56:29 +02:00
f.close()
2021-10-09 20:37:54 +02:00
self.name = o['name']
self.contact = o['contact']
2021-10-09 19:56:29 +02:00
self.inited = True
def start(self):
super(Meta, self).start()
meta_template_file_path = os.path.join(data_dir, 'meta_template_v{}.json'.format(self.version()))
f = open(meta_template_file_path)
o = json.load(f)
f.close()
f = open(self.meta_path, 'w')
json.dump(o, f)
f.close()
2021-10-09 20:37:54 +02:00
def reference(self, token_address):
token_address_bytes = bytes.fromhex(strip_0x(token_address))
return generate_metadata_pointer(token_address_bytes, MetadataPointer.TOKEN)
def asdict(self):
return {
'name': self.name,
'contact': self.contact,
}
def process(self, token_address=None, writer=None):
if writer == None:
writer = self.writer
k = self.reference(token_address)
v = json.dumps(self.asdict())
writer.write(k, v.encode('utf-8'))
return (k, v)
2021-10-09 20:37:54 +02:00
def __str__(self):
2021-10-10 14:49:22 +02:00
s = "contact.name = {}\n".format(self.name)
2021-10-09 20:37:54 +02:00
for k in self.contact.keys():
if self.contact[k] == '':
continue
2021-10-10 14:49:22 +02:00
s += "contact.{} = {}\n".format(k.lower(), self.contact[k])
2021-10-09 20:37:54 +02:00
return s
2021-10-14 15:43:23 +02:00
class MetadataWriter(OutputWriter):
def write(self, k, v):
rq = MetadataRequestsHandler(MetadataPointer.TOKEN, bytes.fromhex(k))
return rq.create(json.loads(v.decode('utf-8')))