Source code for q2_sdk.models.adapters.check_image

from __future__ import annotations
from base64 import b64encode
from dataclasses import dataclass
from decimal import Decimal
from enum import Enum
from typing import Optional
from pathlib import Path
from q2_sdk.core.exceptions import BadParameterError
from datetime import datetime

HERE = Path(__file__).absolute().parent


[docs] @dataclass class CheckImageRequest: internal_account_number: str amount: Decimal transaction_id: int raw_request: dict external_account_number: Optional[str] = None cif_internal: Optional[str] = None cif_external: Optional[str] = None user_data: Optional[str] = None description: Optional[str] = None post_date: Optional[datetime] = None host_account_id: Optional[int] = None d_or_c: Optional[str] = None check_number: Optional[str] = None routing_number: Optional[str] = None
[docs] @staticmethod def from_hq_request(inp: dict) -> CheckImageRequest: host_account = inp["HostAccount_Req"][0] transaction_image = inp["TransactionImage_Req"][0] internal_account_number = host_account["AccountNumberInternal"] external_account_number = host_account["AccountNumberExternal"] cif_internal = host_account["CifInternal"] cif_external = host_account["CifExternal"] transaction_id = host_account["TransactionID"] check_number = transaction_image["CheckNumber"] amount = transaction_image["TxnAmount"] user_data = inp["RequestorData"][0]["UserData"] description = transaction_image["TxnDescription"] post_date = transaction_image["PostDate"] host_account_id = host_account["HostAccountID"] d_or_c = transaction_image["DorC"] routing_number = host_account["RoutingNumber"] if not internal_account_number: raise BadParameterError("AccountNumberInternal must be provided") elif not transaction_id: raise BadParameterError("TransactionID must be provided") elif not amount: raise BadParameterError("TxnAmount must be provided") return CheckImageRequest( internal_account_number, amount, transaction_id, inp, external_account_number, cif_internal, cif_external, user_data, description, post_date, host_account_id, d_or_c, check_number, routing_number, )
[docs] class ImageType(Enum): GIF = 0 JPG = 1 BMP = 2 PNG = 3 PDF = 4 TIFF = 5
[docs] @dataclass class CheckImage: raw: bytes image_type: ImageType
[docs] def as_base64(self) -> str: return b64encode(self.raw).decode()
[docs] def as_adapter_response(self, transaction_id) -> dict[str, str]: return { "ImageData": self.as_base64(), "ImageType": self.image_type.value, "TransactionID": transaction_id, }
[docs] class MockImage:
[docs] @staticmethod def get_front() -> bytes: return Path.read_bytes(HERE / "check_front.png")
[docs] @staticmethod def get_back() -> bytes: return Path.read_bytes(HERE / "check_back.png")