service.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # -*- coding: utf-8 -*-
  2. from functools import wraps
  3. from typing import Dict, Optional
  4. from fastapi import HTTPException
  5. from httpx import AsyncClient, URL
  6. from loguru import logger
  7. def api_exception(func):
  8. @wraps(func)
  9. async def wrapper(*args, **kwargs):
  10. try:
  11. r = await func(*args, **kwargs)
  12. except Exception:
  13. raise HTTPException(
  14. status_code=500,
  15. detail='The server did not receive a correct response from the upstream server.'
  16. )
  17. else:
  18. return r
  19. return wrapper
  20. class Service:
  21. def __init__(self, client: AsyncClient) -> None:
  22. self._client = client
  23. @api_exception
  24. async def _get(self, url: URL, params: Optional[Dict] = None, headers: Optional[Dict] = None) -> Dict:
  25. raw_response = await self._client.get(url, params=params, headers=headers)
  26. # logger.debug(f'{url} - elapsed: {raw_response.elapsed.total_seconds()}')
  27. return raw_response.json()
  28. @api_exception
  29. async def _post(
  30. self,
  31. url: URL,
  32. params: Optional[Dict] = None,
  33. payload: Optional[Dict] = None,
  34. headers: Optional[Dict] = None
  35. ) -> Dict:
  36. raw_response = await self._client.post(url, params=params, json=payload, headers=headers)
  37. # logger.debug(f'{url} - elapsed: {raw_response.elapsed.total_seconds()}')
  38. return raw_response.json()