cic-cli/cic/attachment.py

87 lines
2.3 KiB
Python
Raw Normal View History

2021-10-09 19:56:29 +02:00
# standard imports
import logging
2022-02-10 09:22:21 +01:00
import os
2021-10-09 19:56:29 +02:00
# local imports
from .base import *
logg = logging.getLogger(__name__)
class Attachment(Data):
2021-11-29 08:02:12 +01:00
"""Processes, serialized and publishes all attachments found in the "attachments" subdirectory of the settings directory.
2021-10-09 19:56:29 +02:00
2021-11-29 08:02:12 +01:00
:param path: Path to settings directory
:type path: str
:param writer: Writer interface receiving the output of the processor
:type writer: cic.output.OutputWriter
"""
def __init__(self, path='.', writer=None):
2021-10-09 19:56:29 +02:00
super(Attachment, self).__init__()
2021-10-10 21:30:18 +02:00
self.contents = {}
2021-10-09 19:56:29 +02:00
self.path = path
self.writer = writer
2021-10-09 19:56:29 +02:00
self.attachment_path = os.path.join(self.path, 'attachments')
def load(self):
2021-11-29 08:02:12 +01:00
"""Loads attachment data from settings.
"""
2021-10-09 19:56:29 +02:00
for s in os.listdir(self.attachment_path):
fp = os.path.realpath(os.path.join(self.attachment_path, s))
f = open(fp, 'rb')
r = f.read()
f.close()
2021-10-10 21:30:18 +02:00
z = self.hash(r).hex()
self.contents[z] = fp
2021-10-09 19:56:29 +02:00
2021-10-10 21:30:18 +02:00
logg.debug('loaded attachment file {} digest {}'.format(fp, z))
2021-10-09 19:56:29 +02:00
def start(self):
2021-11-29 08:02:12 +01:00
"""Initialize attachment settings from template.
"""
2021-10-09 19:56:29 +02:00
super(Attachment, self).start()
os.makedirs(self.attachment_path)
2021-10-09 20:37:54 +02:00
2021-10-10 21:30:18 +02:00
def get(self, k):
2021-11-29 08:02:12 +01:00
"""Get a single attachment by the sha256 hash of the content.
:param k: Content hash
:type k: str (hex)
"""
2021-10-10 21:30:18 +02:00
return self.contents[k]
def asdict(self):
2021-11-29 08:02:12 +01:00
"""Output attachment state to dict
"""
2021-10-10 21:30:18 +02:00
return self.contents
2021-10-21 15:11:05 +02:00
def process(self, token_address=None, token_symbol=None, writer=None):
2021-11-29 08:02:12 +01:00
"""Serialize and publish attachments.
See cic.processor.Processor.process
"""
if writer == None:
writer = self.writer
for k in self.contents.keys():
2021-10-15 12:48:14 +02:00
fp = os.path.join(self.attachment_path, self.contents[k])
f = open(fp, 'rb')
v = f.read()
f.close()
2021-10-12 14:26:57 +02:00
logg.debug('writing attachment {}'.format(k))
writer.write(k, v)
2021-10-11 19:02:42 +02:00
2021-10-09 20:37:54 +02:00
def __str__(self):
s = ''
for k in self.contents.keys():
s += '{} = {}\n'.format(k, self.contents[k]) #self.digests[i].hex(), self.contents[i])
2021-10-09 20:37:54 +02:00
return s