В Python Я пытаюсь создать API для подключенного устройства. Я хочу быть доступным как для потоков (с использованием запроса), так и для асинхронных приложений (с использованием aiohttp). То, что я придумал, это обернуть метод получения как requests
, так и aiohttp
в декораторе. Этот декоратор передается при вызове init, и API-вызовы явно завертываются с использованием прошедшего декоратора.API-интерфейс с резьбой и асинхронным API
Это работает, но я хотел бы знать, как другие думают об этом подходе? Есть ли лучшие способы или я буду сталкиваться с проблемами позже?
Любая помощь оценена!
def threaded_gett(function):
# The threaded decorator
def wrapper(*args, **kwargs):
url, params = function(*args)
response = requests.get(url, params)
_json = response.json()
return function.__self__.process_response(_json)
return wrapper
def async_gett(function):
# The async decorator
def wrapper(*args, **kwargs):
url, params = function(*args)
try:
resp = yield from function.__self__.session.get(url, params=params)
except Exception as ex:
lgr.exception(ex)
else:
_json = yield from resp.json()
yield from resp.release()
return function.__self__.process_response(_json)
# wrapping the decorator in the async coroutine decorator.
wrapper = asyncio.coroutine(wrapper)
return wrapper
class ThreadedApi(BaseApi):
def __init__(self,threaded_gett):
Base.__init(self,threaded_gett)
class AsyncApi(BaseApi):
def __init__(self,async_gett):
Base.__init(self,async_gett)
class BaseApi():
def __init__(self,get_wrapper):
self.status = get_wrapper(self.status)
def status(self):
return <status path>
Я голосующий, чтобы закрыть этот вопрос не по теме, потому что вопрос с запросом на проверку кода должен быть задан по адресу http://codereview.stackexchange.com –
@KlausD. Этот вопрос был [перекрестно размещен в обзоре кода] (http://codereview.stackexchange.com/q/147586/9357), но он в настоящее время приостановлен, потому что код слишком ручно-волнистый, чтобы считаться рабочим кодом , –
@ 200_success Спасибо за информацию, но здесь это не имеет никакого значения. –