Source code for pymavryk.michelson.sections.storage

from typing import List
from typing import Type

from pymavryk.context.abstract import AbstractContext
from pymavryk.michelson.micheline import Micheline
from pymavryk.michelson.micheline import MichelsonRuntimeError
from pymavryk.michelson.types import *


[docs]class StorageSection(Micheline, prim='storage', args_len=1): args: List[Type[MichelsonType]] # type: ignore def __init__(self, item: MichelsonType): super().__init__() self.item = item def __repr__(self): return repr(self.item)
[docs] @staticmethod def match(type_expr) -> Type['StorageSection']: try: cls = Micheline.match(type_expr) if not issubclass(cls, StorageSection): cls = StorageSection.create_type(args=[cls]) assert cls.args[0].field_name is None, f'argument type cannot be annotated: %{cls.args[0].field_name}' # type: ignore except Exception as e: raise MichelsonRuntimeError('storage', *e.args) from e return cls # type: ignore
[docs] @classmethod def execute(cls, stack, stdout: List[str], context: AbstractContext): context.set_storage_expr(cls.as_micheline_expr()) stdout.append('storage: updated')
[docs] @classmethod def generate_pydoc(cls) -> str: definitions = [] # type: ignore res = cls.args[0].generate_pydoc(definitions, cls.prim) if res != f'${cls.prim}': definitions.insert(0, (cls.prim, res)) return '\n'.join(f'${var}:\n\t{doc}\n' for var, doc in definitions)
[docs] @classmethod def dummy(cls, context: AbstractContext): return cls(cls.args[0].dummy(context))
[docs] @classmethod def from_micheline_value(cls, val_expr) -> 'StorageSection': item = cls.args[0].from_micheline_value(val_expr) return cls(item)
[docs] @classmethod def from_python_object(cls, py_obj) -> 'StorageSection': item = cls.args[0].from_python_object(py_obj) return cls(item)
[docs] def to_micheline_value(self, mode='readable', lazy_diff=False): return self.item.to_micheline_value(mode=mode, lazy_diff=lazy_diff)
[docs] def to_python_object(self, try_unpack=False, lazy_diff=False): return self.item.to_python_object( try_unpack=try_unpack, lazy_diff=lazy_diff, )
[docs] def attach_context(self, context: AbstractContext): self.item.attach_context(context)
[docs] def merge_lazy_diff(self, lazy_diff: List[dict]) -> 'StorageSection': item = self.item.merge_lazy_diff(lazy_diff) return type(self)(item)
[docs] def aggregate_lazy_diff(self, mode='readable') -> List[dict]: lazy_diff = [] # type: ignore self.item.aggregate_lazy_diff(lazy_diff, mode=mode) return lazy_diff