import eaapi from . import exceptions as exc from .model import Model NODE_CALL = "call" NODE_RESP = "response" class CallContext: def __init__(self, request, decoder, call, eainfo, compressed): if call.name != NODE_CALL: raise exc.CallNodeMissing self._request = request self._decoder = decoder self._call: eaapi.XMLNode = call self._eainfo: str | None = eainfo self._compressed: bool = compressed self._resp: eaapi.XMLNode = eaapi.XMLNode.void(NODE_RESP) self._module: str | None = None self._method: str | None = None self._url_slash: bool | None = None self._model: Model = Model.from_model_str(call.get("model")) @property def module(self): return self._module @property def method(self): return self._method @property def url_slash(self): return self._url_slash @property def request(self): return self._request @property def was_xml_string(self): return self._decoder.is_xml_string @property def was_compressed(self): return self._compressed @property def call(self): return self._call @property def resp(self): return self._resp @property def model(self): return self._model @property def srcid(self): return self._call.get("srcid") @property def tag(self): return self._call.get("tag") def get_root(self): return self.call.xpath(self.module) def abort(self, status="1"): return self.resp.append(self.module, status=status) def ok(self): return self.abort("0") class ResponseContext: def __init__(self, resp, decoder, response, compressed): if response.name != NODE_RESP: raise exc.CallNodeMissing self._resp = resp self._decoder = decoder self._response = response self._compressed = compressed @property def resp(self): return self._resp @property def decoder(self): return self._decoder @property def response(self): return self._response @property def compressed(self): return self._compressed