from typing import List
from lxml import objectify
from q2_sdk.models.cores.mappers.base_mapper import BaseMapper
from q2_sdk.models.cores.queries.base_query import BaseQuery
from q2_cores.Symitar.queries import GetSharesQuery
from ...Symitar.models import parser
SYMITAR_MAPPINGS = {"share_id": "ID", "amount": "AMOUNT"}
[docs]
class GetSharesMapper(BaseMapper):
[docs]
@staticmethod
def parse_returned_queries(list_of_queries: List[BaseQuery]) -> dict:
assert len(list_of_queries) == 1
assert isinstance(list_of_queries[0], GetSharesQuery), (
"Query must be an instance of Symitar.queries.GetSharesQuery"
)
response = list_of_queries[0].raw_core_response
symitar_response = parser.parse(response)
root = objectify.fromstring(symitar_response.payload)
try:
shares = root.FUNDINGSHARES.SHARE
except AttributeError:
shares = []
eligible_shares = []
for share in shares:
eligible_shares.append({
"share_id": share.findtext(SYMITAR_MAPPINGS["share_id"]),
"amount": share.findtext(SYMITAR_MAPPINGS["amount"]),
})
return {"eligible_shares": eligible_shares}