def pytest_pycollect_makeitem(collector, name, obj): if collector.istestfunction(obj, name) and asyncio.iscoroutinefunction(obj): module = collector.getparent(pytest.Module).obj clscol = collector.getparent(pytest.Class) cls = clscol and clscol.obj or None fm = collector.session._fixturemanager definition = py.FunctionDefinition(name=name, parent=collector, callobj=obj) fixinfo = fm.getfixtureinfo(definition, obj, cls) metafunc = py.Metafunc(definition, fixinfo, collector.config, cls=cls, module=module) if not metafunc._calls: return AsyncFunction(name, parent=collector, fixtureinfo=fixinfo) else: output = [] for callspec in metafunc._calls: subname = f"{name}[{callspec.id}]" output.append( AsyncFunction(name=subname, parent=collector, callspec=callspec, callobj=obj, fixtureinfo=fixinfo, keywords={callspec.id: True}, originalname=name)) return output
def Metafunc(self, func): # the unit tests of this class check if things work correctly # on the funcarg level, so we don't need a full blown # initiliazation class FixtureInfo: name2fixturedefs = None def __init__(self, names): self.names_closure = names names = fixtures.getfuncargnames(func) fixtureinfo = FixtureInfo(names) return python.Metafunc(func, fixtureinfo, None)