106 lines
2.3 KiB
Python
106 lines
2.3 KiB
Python
|
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
|