In Python versuche ich eine API für ein verbundenes Gerät zu erstellen. Ich möchte sowohl für Threaded (mit Anfrage) als auch für Async-Anwendungen (mit aiohttp) verfügbar sein. Was ich mir ausgedacht habe, ist das Wrapping der Get-Methode von requests
und aiohttp
in einem Decorator. Dieser Decorator wird bei init übergeben und API-Aufrufe werden explizit mit dem übergebenen Decorator umbrochen.Threaded und Asyncio API-Bibliothek
Es funktioniert, aber ich würde gerne wissen, wie andere über diesen Ansatz denken? Gibt es bessere Wege oder werde ich später auf Probleme stoßen?
Jede Hilfe wird geschätzt!
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>
Ich stimme für das Schließen dieser Frage als Off-Topic ab, da die Frage nach einem Code-Review unter http://codereview.stackexchange.com –
@KlausD gefragt werden sollte. Diese Frage wurde [cross-posted in Code Review] (http://codereview.stackexchange.com/q/147586/9357) gestellt, aber sie wird derzeit nicht gelesen, da der Code zu hand-wellig ist, um als funktionierender Code betrachtet zu werden . –
@ 200_success Danke für die Info, aber das macht hier keinen Unterschied. –