diff --git a/chainqueue/adapters/base.py b/chainqueue/adapters/base.py index 5bb3e00..e78393f 100644 --- a/chainqueue/adapters/base.py +++ b/chainqueue/adapters/base.py @@ -54,6 +54,19 @@ class Adapter: raise NotImplementedError() + def get(self, tx_hash, chain_spec, session=None): + """Retrieve serialized transaction represented by the given transaction hash. + + :param chain_spec: Chain spec to use for transaction decode + :type chain_spec: chainlib.chain.ChainSpec + :param tx_hash: Transaction hash, in hex + :type tx_hash: str + :param session: Backend state integrity session + :type session: varies + """ + raise NotImplementedError() + + def dispatch(self, chain_spec, rpc, tx_hash, signed_tx, session=None): """Send a queued transaction to the network. diff --git a/chainqueue/cli.py b/chainqueue/cli.py index 2ecc5a7..161b42b 100644 --- a/chainqueue/cli.py +++ b/chainqueue/cli.py @@ -1,5 +1,6 @@ # standard imports import logging +import enum # external imports from hexathon import add_0x @@ -16,6 +17,13 @@ from chainqueue.enum import ( logg = logging.getLogger(__name__) +class OutputCol(enum.Enum): + chainspec = 0 + hash = 1 + statustext = 2 + statuscode = 3 + + class Outputter: """Output helper for chainqueue cli listings tools. @@ -31,7 +39,14 @@ class Outputter: :type decode_status: bool """ - def __init__(self, chain_spec, writer, getter, session_method=None, decode_status=True): + all_cols = [ + OutputCol.chainspec, + OutputCol.hash, + OutputCol.statustext, + OutputCol.statuscode, + ] + + def __init__(self, chain_spec, writer, getter, session_method=None, decode_status=True, cols=None): self.decode_status = decode_status self.writer = writer self.getter = getter @@ -47,6 +62,19 @@ class Outputter: 'final': 0, } + debug_col_name = [] + if cols == None: + self.cols = Outputter.all_cols + else: + self.cols = [] + for col in cols: + v = getattr(OutputCol, col) + self.cols.append(v) + + for col in self.cols: + debug_col_name.append(col.name) + logg.debug('outputter initialized with cols: {}'.format(','.join(debug_col_name))) + def __del__(self): if self.session != None: @@ -97,4 +125,21 @@ class Outputter: status = tx['status'] if self.decode_status: status = status_str(tx['status_code'], bits_only=True) - self.writer.write('{}\t{}\t{}\t{}\n'.format(self.chain_spec_str, add_0x(tx_hash), status, tx['status_code'])) + #self.writer.write('{}\t{}\t{}\t{}\n'.format(self.chain_spec_str, add_0x(tx_hash), status, tx['status_code'])) + vals = [ + self.chain_spec_str, + add_0x(tx_hash), + status, + str(tx['status_code']), + ] + + i = 0 + l = len(self.cols) + for col in self.cols: + self.writer.write(vals[col.value]) + i += 1 + if i == l: + self.writer.write('\n') + else: + self.writer.write('\t') + #self.writer.write('{}\t{}\t{}\t{}\n'.format() diff --git a/chainqueue/encode.py b/chainqueue/encode.py index 7275fd6..dac09e2 100644 --- a/chainqueue/encode.py +++ b/chainqueue/encode.py @@ -1,49 +1,2 @@ -# standard imports -import logging - # external imports -from hexathon import ( - add_0x, - strip_0x, - uniform as hex_uniform, - ) - -logg = logging.getLogger() - - -class TxHexNormalizer: - - def tx_hash(self, tx_hash): - return self.__hex_normalize(tx_hash, 'tx hash') - - - def tx_wire(self, tx_wire): - return self.__hex_normalize(tx_wire, 'tx wire') - - - def wallet_address(self, address): - return self.__hex_normalize(address, 'wallet address') - - - def executable_address(self, address): - return self.__hex_normalize(address, 'executable address') - - - def __hex_normalize(self, data, context): - #r = add_0x(hex_uniform(strip_0x(data))) - r = hex_uniform(strip_0x(data)) - logg.debug('normalize {} {} -> {}'.format(context, data, r)) - return r - - -class NoopNormalize: - - def __init__(self): - self.tx_hash = self.__noop - self.tx_wire = self.__noop - self.wallet_address = self.__noop - self.executable_address = self.__noop - - - def __noop(self, data): - return data +from chainlib.encode import TxHexNormalizer diff --git a/requirements.txt b/requirements.txt index 93e2d9c..c8c2c44 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,4 @@ alembic==1.4.2 SQLAlchemy==1.3.20 confini>=0.4.1a1,<0.5.0 pyxdg~=0.27 -chainlib~=0.0.9a3 +chainlib~=0.0.9a5 diff --git a/run_tests.sh b/run_tests.sh index 60cb203..492d4e1 100644 --- a/run_tests.sh +++ b/run_tests.sh @@ -2,7 +2,7 @@ set +e set +x -export PYTHONPATH=. +export PYTHONPATH={$PYTHONPATH:-.} for f in `ls tests/*.py`; do python $f if [ $? -gt 0 ]; then diff --git a/setup.cfg b/setup.cfg index dd72634..bbea7c3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = chainqueue -version = 0.0.5a1 +version = 0.0.5a3 description = Generic blockchain transaction queue control author = Louis Holbrook author_email = dev@holbrook.no