reponse.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # -*- coding: utf-8 -*-
  2. from typing import Any
  3. from pydantic import BaseModel
  4. from digitalHuman.protocol import RESPONSE_CODE, BaseResponse, eventStreamError, eventStreamDone
  5. from digitalHuman.utils import logger
  6. class Response(object):
  7. def __init__(self):
  8. self._response_dict = {}
  9. self.code = RESPONSE_CODE.OK
  10. self.message = "SUCCESS"
  11. def __setattr__(self, name: str, value: Any):
  12. if name.startswith('_'):
  13. self.__dict__[name] = value
  14. else:
  15. self._response_dict[name] = value
  16. def __getattr__(self, name: str):
  17. if name.startswith('_'):
  18. return self.__dict__[name]
  19. else:
  20. return self._response_dict[name]
  21. def _message_log_summary(self, message: str, isError: bool):
  22. self.message = message
  23. if isError:
  24. logger.error(message, exc_info=True)
  25. else:
  26. logger.debug(message)
  27. def ok(self, message: str):
  28. self.code = RESPONSE_CODE.OK
  29. self._message_log_summary(message, False)
  30. def error(self, message: str, code: RESPONSE_CODE = RESPONSE_CODE.ERROR):
  31. self.code = code
  32. self._message_log_summary(message, True)
  33. def validate(self, outItem: BaseModel):
  34. resp_json = outItem.model_validate(self._response_dict)
  35. # return json
  36. return resp_json.model_dump()
  37. async def streamInteralError(error: str = "Interal Error"):
  38. yield eventStreamError(error)
  39. yield eventStreamDone()