Вот мое решение.
class Session:
def __init__(self, headers):
self._headers = headers
self._session = requests.Session()
self._async_session = None
async def _init(self):
self._session = aiohttp.ClientSession(headers=headers)
async def async_request(self, url):
while True:
try:
async with self._async_session.get(url) as resp:
resp.raise_for_status()
return await resp.text()
except aiohttp.client_exceptions.ClientError:
#retry or raise
except AttributeError:
if isinstance(self._async_session, aiohttp.ClientSession):
raise
await self._init()
def request(self, url):
return self._session.get(url).text
async def close(self):
if isinstance(self._async_session, aiohttp.ClientSession):
await self._session.close()
async def main():
session = Session({})
print(await session.async_request('https://httpstat.us/200')
await session.close()
asyncio.run(main())
Я могу инициализировать класс Session
и делать как синхронные, так и асинхронные запросы. Мне не нужно явно вызывать await session._init()
для инициализации self._async_session
, как, когда вызывается session._async_request
и self._async_session
- Нет, тогда будет вызван await session._init()
и запрос будет повторен.
Найденный им.. (с некоторой справкой от Tim Walker)
Before do |scenario|
puts "Before Scenario: #{scenario.to_sexp[2]}"
.
.
.
end
Ваш SExpression может отличаться, таким образом, стоит сделать a scenario.to_sexp.inspect
видеть, каково то дерево.
Aslak стремится постараться не выставлять свойства на его классах (который является решением, с которым я, оказывается, соглашаюсь, таким образом, я рад сделать эту работу вокруг).
Более серьезный ответ (или по крайней мере, предложение): используйте отражение рубина, чтобы попытаться найти то, что Вы ищете. Захватите, вероятно, объекты, узнайте, какие методы они имеют и видят, можно ли найти его. Например:
File.open('happy_hunting.log','a') { |f|
f.print "Scenario supports: #{(scenario.methods - Object.methods).inspect}\n"
}
и затем повторите его для выяснения то, что то, где.
Другое предложение, посмотрите на источник.