eaapi/eaapi/server/context.py

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