commit 84fa27ddf8982413228c879015129361907ebd43
parent b1cd745116d46f27406ff6c309530ea73757ad71
Author: lash <dev@holbrook.no>
Date: Fri, 16 Dec 2022 09:07:13 +0000
Add missing files
Diffstat:
3 files changed, 212 insertions(+), 0 deletions(-)
diff --git a/chainlib/dialect.py b/chainlib/dialect.py
@@ -0,0 +1,20 @@
+class DialectFilter:
+
+ def apply_block(self, block):
+ return block
+
+
+ def apply_tx(self, tx):
+ return tx
+
+
+ def apply_result(self, result):
+ return result
+
+
+ def apply_src(self, src):
+ return src
+
+
+ def validate_src(self, src):
+ return src
diff --git a/chainlib/src.py b/chainlib/src.py
@@ -0,0 +1,96 @@
+# standard imports
+import enum
+
+
+class SrcItem(enum.Enum):
+ AUTO = 0
+ SRC = 1
+ HASH = 2
+ ADDRESS = 3
+ PAYLOAD = 4
+
+
+class Src:
+
+ def __init__(self, src=None, dialect_filter=None):
+ self.__src = None
+ self.__hash = None
+ self.__wire = None
+ if src != None:
+ self.apply_src(src, dialect_filter=dialect_filter)
+
+
+ @classmethod
+ def src_normalize(self, v):
+ return v
+
+
+ def src_validate(self, v):
+ return v
+
+
+ def apply_src(self, src, dialect_filter=None):
+ src = self.src_normalize(src)
+ if dialect_filter != None:
+ src = dialect_filter.apply_src(src)
+ self.__src = self.src_validate(src)
+ return self.__src
+
+
+ @property
+ def src(self):
+ return self.__src
+
+
+ def set_hash(self, hsh):
+ self.__hash = hsh
+
+
+ @property
+ def hash(self):
+ return self.__hash
+
+
+ def set_wire(self, v):
+ self.__wire = v
+
+
+ @property
+ def wire(self):
+ return self.__wire
+
+
+ def normal(self, v, typ=SrcItem.AUTO):
+ if typ == SrcItem.SRC:
+ return self.src_normalize(v)
+ return v
+
+
+ def safe(self, v, typ=SrcItem.AUTO):
+ return v
+
+
+ def display(self, v, typ=SrcItem.AUTO):
+ return v
+
+
+ @classmethod
+ def from_src(cls, src):
+ """Instantiate an implementation specific block object from the given block representation.
+
+ :param src: Block representation
+ :type src: dict
+ :rtype: chainlib.block.Block
+ :returns: Block object
+ """
+ return cls(src)
+
+
+ def __repr__(self):
+ return self.__src
+
+
+ def load_src(self, dialect_filter=None):
+ raise NotImplementedError()
+
+
diff --git a/tests/test_src.py b/tests/test_src.py
@@ -0,0 +1,96 @@
+# standard imports
+import unittest
+
+# local imports
+from chainlib.src import Src
+from chainlib.tx import (
+ Tx,
+ TxResult,
+ )
+from chainlib.block import Block
+from chainlib.status import Status
+
+class TestBlock(Block):
+
+ def load_src(self, dialect_filter=None):
+ self.number = self.src['number']
+
+
+class TestTx(Tx):
+
+ def load_src(self, dialect_filter=None):
+ self.foo = self.src['foo']
+
+
+class TestTxResult(TxResult):
+
+ def load_src(self, dialect_filter=None):
+ self.bar = self.src['bar']
+
+
+class TestSrc(unittest.TestCase):
+
+ def test_basic(self):
+ v = {'foo': 'bar'}
+ src = Src(v)
+ self.assertEqual(src.src, v)
+
+
+ def test_block_basic(self):
+ v = {'number': 42}
+ block = TestBlock(v)
+ self.assertEqual(block.src, v)
+ self.assertEqual(block.number, 42)
+
+
+ def test_tx_basic(self):
+ v = {'foo': 'bar'}
+ tx = TestTx(v)
+ self.assertEqual(tx.src, v)
+ self.assertEqual(tx.foo, 'bar')
+
+ v = {'bar': 'baz'}
+ result = TestTxResult(v)
+ self.assertEqual(result.src, v)
+ self.assertEqual(result.status, Status.UNKNOWN)
+ self.assertEqual(result.bar, 'baz')
+
+
+ def test_apply(self):
+ vt = {'foo': 'bar'}
+ tx = TestTx(vt)
+
+ vb = {'number': 42}
+ block = TestBlock(vb)
+
+ vr = {'bar': 'baz'}
+ result = TestTxResult(vr)
+
+ tx.apply_block(block)
+
+ tx.apply_result(result)
+
+ self.assertEqual(tx.src, vt)
+ self.assertEqual(tx.status, Status.UNKNOWN)
+ self.assertEqual(tx.status_name, Status.UNKNOWN.name)
+ self.assertEqual(tx.foo, 'bar')
+ self.assertEqual(tx.result.bar, 'baz')
+
+ tx = TestTx(vt, block=block, result=result)
+
+ self.assertEqual(tx.src, vt)
+ self.assertEqual(tx.status, Status.UNKNOWN)
+ self.assertEqual(tx.status_name, Status.UNKNOWN.name)
+ self.assertEqual(tx.foo, 'bar')
+ self.assertEqual(tx.result.bar, 'baz')
+
+
+ def test_from(self):
+ v = {'foo': 'bar'}
+ tx = TestTx.from_src(v)
+ self.assertEqual(tx.src, v)
+ self.assertEqual(tx.foo, 'bar')
+
+
+if __name__ == '__main__':
+ unittest.main()