Source code for mpesa.drc.callback_parser

"""Callback Parser Module.

To parse the callbacks of b2c and c2b.
    rootKey="soapenv:Envelope"
    bodyKey="soapenv:Body"
    resKey="gen:getGenericResult"
    reqKey="Request"#>>dataItem
"""
import xmltodict
import json


def data_items_to_map(data):
    """Convert Data Items to map."""
    if isinstance(data, dict):
        return {data.get("name"): data.get("value")}
    elif isinstance(data, list):
        out = {}
        for d in data:
            out.update({d.get("name"): d.get("value")})
        return out


[docs]def prepare_callback(content: bytes) -> dict: """Prepare callback as dict.""" rootKey = "soapenv:Envelope" bodyKey = "soapenv:Body" resKey = "gen:getGenericResult" reqKey = "Request" # >>dataItem if not isinstance(content, bytes): content = content.encode() payload = json.loads(json.dumps(xmltodict.parse(content))) request = payload.get(rootKey).get(bodyKey).get( resKey).get(reqKey).get("dataItem") return data_items_to_map(request)