From d7ebc459157c516e51c3115eb96276d4280113a5 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 5 Feb 2022 13:32:53 +0000 Subject: [PATCH] Completed: implement ext_to_type(), use in initializer --- mmgen/tool/file.py | 2 +- mmgen/tx/__init__.py | 22 ++++++++-------------- mmgen/tx/completed.py | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/mmgen/tool/file.py b/mmgen/tool/file.py index e797f880..6baa1fc0 100755 --- a/mmgen/tool/file.py +++ b/mmgen/tool/file.py @@ -92,7 +92,7 @@ class tool_cmd(tool_cmd_base): from ..filename import MMGenFileList from ..tx import completed,CompletedTX - flist = MMGenFileList( infiles, ftype=completed.Completed ) + flist = MMGenFileList( infiles, base_class=completed.Completed, proto=self.proto ) flist.sort_by_age( key=file_sort ) # in-place sort async def process_file(f): diff --git a/mmgen/tx/__init__.py b/mmgen/tx/__init__.py index cb6c8ffc..6cfbd7b7 100755 --- a/mmgen/tx/__init__.py +++ b/mmgen/tx/__init__.py @@ -41,20 +41,14 @@ def _get_cls_info(clsname,modname,args,kwargs): f"{clsname} must be instantiated with 'proto','data' or 'filename' keyword" ) if clsname == 'Completed': - from ..util import get_extension,fmt_list - from .unsigned import Unsigned - from .signed import Signed - - ext = get_extension(kwargs['filename']) - cls_data = { - Unsigned.ext: ('Unsigned','unsigned'), - Signed.ext: ('OnlineSigned','online') if proto.tokensym else ('Signed','signed') - } - - if ext not in cls_data: - die(1,f'{ext!r}: unrecognized file extension for CompletedTX (not in {fmt_list(cls_data)})') - - clsname,modname = cls_data[ext] + from ..util import get_extension + from .completed import Completed + ext = get_extension( kwargs['filename'] ) + cls = Completed.ext_to_type( ext, proto ) + if not cls: + die(1,f'{ext!r}: unrecognized file extension for CompletedTX') + clsname = cls.__name__ + modname = cls.__module__.split('.')[-1] kwargs['proto'] = proto diff --git a/mmgen/tx/completed.py b/mmgen/tx/completed.py index 71d6a83e..31e8dd2a 100755 --- a/mmgen/tx/completed.py +++ b/mmgen/tx/completed.py @@ -51,3 +51,19 @@ class Completed(Base): def file(self): from ..txfile import MMGenTxFile return MMGenTxFile(self) + + @classmethod + def ext_to_type(cls,ext,proto): + """ + see twctl:import_token() + """ + from .unsigned import Unsigned + if ext == Unsigned.ext: + return Unsigned + + if proto.tokensym: + from .online import OnlineSigned as Signed + else: + from .signed import Signed + if ext == Signed.ext: + return Signed