def inject_fixture(request, arg, value): """Inject fixture into pytest fixture request. :param request: pytest fixture request :param arg: argument name :param value: argument value """ fd_kwargs = { 'fixturemanager': request._fixturemanager, 'baseid': None, 'argname': arg, 'func': lambda: value, 'scope': "function", 'params': None, } if 'yieldctx' in get_args(pytest_fixtures.FixtureDef.__init__): fd_kwargs['yieldctx'] = False fd = pytest_fixtures.FixtureDef(**fd_kwargs) fd.cached_result = (value, 0, None) old_fd = get_request_fixture_defs(request).get(arg) add_fixturename = arg not in request.fixturenames old_value = get_fixture_value_raw(request, arg) # Compatibility with pytest < 3.3.2 def fin(): request._fixturemanager._arg2fixturedefs[arg].remove(fd) get_request_fixture_defs(request)[arg] = old_fd if add_fixturename: get_request_fixture_names(request).remove(arg) set_fixture_value(request, arg, old_value) # Compatibility with pytest < 3.3.2 request.addfinalizer(fin) # inject fixture definition request._fixturemanager._arg2fixturedefs.setdefault(arg, []).insert(0, fd) # inject fixture value in request cache get_request_fixture_defs(request)[arg] = fd set_fixture_value(request, arg, value) if add_fixturename: get_request_fixture_names(request).append(arg)
def inject_fixture(request, arg, value): """Inject fixture into pytest fixture request. :param request: pytest fixture request :param arg: argument name :param value: argument value """ fd_kwargs = { 'fixturemanager': request._fixturemanager, 'baseid': None, 'argname': arg, 'func': lambda: value, 'scope': "function", 'params': None, } if 'yieldctx' in get_args(pytest_fixtures.FixtureDef.__init__): fd_kwargs['yieldctx'] = False fd = pytest_fixtures.FixtureDef(**fd_kwargs) fd.cached_result = (value, 0, None) old_fd = getattr(request, "_fixturedefs", {}).get(arg) old_value = request._funcargs.get(arg) add_fixturename = arg not in request.fixturenames def fin(): request._fixturemanager._arg2fixturedefs[arg].remove(fd) getattr(request, "_fixturedefs", {})[arg] = old_fd request._funcargs[arg] = old_value if add_fixturename: request.fixturenames.remove(arg) request.addfinalizer(fin) # inject fixture definition request._fixturemanager._arg2fixturedefs.setdefault(arg, []).insert(0, fd) # inject fixture value in request cache getattr(request, "_fixturedefs", {})[arg] = fd request._funcargs[arg] = value if add_fixturename: request.fixturenames.append(arg)
def inject_fixture(request, arg, value): """Inject fixture into pytest fixture request. :param request: pytest fixture request :param arg: argument name :param value: argument value """ fd_kwargs = { "fixturemanager": request._fixturemanager, "baseid": None, "argname": arg, "func": lambda: value, "scope": "function", "params": None, } if "yieldctx" in get_args(pytest_fixtures.FixtureDef.__init__): fd_kwargs["yieldctx"] = False fd = pytest_fixtures.FixtureDef(**fd_kwargs) fd.cached_result = (value, 0, None) old_fd = request._fixture_defs.get(arg) add_fixturename = arg not in request.fixturenames def fin(): request._fixturemanager._arg2fixturedefs[arg].remove(fd) request._fixture_defs[arg] = old_fd if add_fixturename: request._pyfuncitem._fixtureinfo.names_closure.remove(arg) request.addfinalizer(fin) # inject fixture definition request._fixturemanager._arg2fixturedefs.setdefault(arg, []).insert(0, fd) # inject fixture value in request cache request._fixture_defs[arg] = fd if add_fixturename: request._pyfuncitem._fixtureinfo.names_closure.append(arg)