def _ensure_only_one_capture_fixture(request: FixtureRequest, name): fixtures = sorted(set(request.fixturenames) & capture_fixtures - {name}) if fixtures: arg = fixtures[0] if len(fixtures) == 1 else fixtures raise request.raiseerror( "cannot use {} and {} at the same time".format(arg, name) )
def _capturing_for_request( self, request: FixtureRequest ) -> Generator["CaptureFixture", None, None]: """ Context manager that creates a ``CaptureFixture`` instance for the given ``request``, ensuring there is only a single one being requested at the same time. This is used as a helper with ``capsys``, ``capfd`` etc. """ if self._capture_fixture: other_name = next( k for k, v in map_fixname_class.items() if v is self._capture_fixture.captureclass ) raise request.raiseerror( "cannot use {} and {} at the same time".format( request.fixturename, other_name ) ) capture_class = map_fixname_class[request.fixturename] self._capture_fixture = CaptureFixture(capture_class, request) self.activate_fixture() yield self._capture_fixture self._capture_fixture.close() self._capture_fixture = None