def __get__(desc, obj, cls):
if obj is None: return desc # no classmethod-style replacement
attrs = vars(obj)
if desc.fn.__name__ in attrs:
return attrs[desc.fn.__name__]
try:
fetcher = obj._get
except AttributeError:
raise TypeError('TOA object %r must declare _get' % obj) from None
meth = desc.fn.__get__(obj)
if inspect.iscoroutinefunction(fetcher):
@functools.wraps(desc.fn)
async def wrapper(self, *args, **kwargs):
url = desc.get_url(args, kwargs)
json = await self._get(url)
return meth(json)
else:
@functools.wraps(desc.fn)
def wrapper(self, *args, **kwargs):
url = desc.get_url(args, kwargs)
json = self._get(url)
return meth(json)
ret = wrapper.__get__(obj)
attrs[desc.fn.__name__] = ret
return ret
评论列表
文章目录