1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- # -*- coding: utf-8 -*-
- from functools import wraps
- from typing import Dict, Optional
- from fastapi import HTTPException
- from httpx import AsyncClient, URL
- from loguru import logger
- def api_exception(func):
- @wraps(func)
- async def wrapper(*args, **kwargs):
- try:
- r = await func(*args, **kwargs)
- except Exception:
- raise HTTPException(
- status_code=500,
- detail='The server did not receive a correct response from the upstream server.'
- )
- else:
- return r
- return wrapper
- class Service:
- def __init__(self, client: AsyncClient) -> None:
- self._client = client
- @api_exception
- async def _get(self, url: URL, params: Optional[Dict] = None, headers: Optional[Dict] = None) -> Dict:
- raw_response = await self._client.get(url, params=params, headers=headers)
- # logger.debug(f'{url} - elapsed: {raw_response.elapsed.total_seconds()}')
- return raw_response.json()
- @api_exception
- async def _post(
- self,
- url: URL,
- params: Optional[Dict] = None,
- payload: Optional[Dict] = None,
- headers: Optional[Dict] = None
- ) -> Dict:
- raw_response = await self._client.post(url, params=params, json=payload, headers=headers)
- # logger.debug(f'{url} - elapsed: {raw_response.elapsed.total_seconds()}')
- return raw_response.json()
|