cic-stack/apps/cic-eth/cic_eth/db/models/convert.py

56 lines
1.9 KiB
Python

# third-party imports
from sqlalchemy import Column, Enum, String, Integer
from sqlalchemy.ext.hybrid import hybrid_method
# local imports
from .base import SessionBase
from ..error import UnknownConvertError
class TxConvertTransfer(SessionBase):
"""Table describing a transfer of funds after conversion has been successfully performed.
:param convert_tx_hash: Transaction hash of convert transaction
:type convert_tx_hash: str, 0x-hex
:param recipient_address: Ethereum address of recipient of resulting token balance of conversion
:type recipient_address: str, 0x-hex
:param chain_str: Chain spec string representation
:type chain_str: str
"""
__tablename__ = 'tx_convert_transfer'
#approve_tx_hash = Column(String(66))
convert_tx_hash = Column(String(66))
transfer_tx_hash = Column(String(66))
recipient_address = Column(String(42))
@hybrid_method
def transfer(self, transfer_tx_hash):
"""Persists transaction hash of performed transfer. Setting this ends the lifetime of this record.
"""
self.transfer_tx_hash = transfer_tx_hash
@staticmethod
def get(convert_tx_hash):
"""Retrieves a convert transfer record by conversion transaction hash in a separate session.
:param convert_tx_hash: Transaction hash of convert transaction
:type convert_tx_hash: str, 0x-hex
"""
session = SessionBase.create_session()
q = session.query(TxConvertTransfer)
q = q.filter(TxConvertTransfer.convert_tx_hash==convert_tx_hash)
r = q.first()
session.close()
if r == None:
raise UnknownConvertError(convert_tx_hash)
return r
def __init__(self, convert_tx_hash, recipient_address, chain_str):
self.convert_tx_hash = convert_tx_hash
self.recipient_address = recipient_address
self.chain_str = chain_str