MCPcopy Create free account
hub / github.com/pytest-dev/pytest / wrap_session

Function wrap_session

src/_pytest/main.py:255–311  ·  view source on GitHub ↗

Skeleton command line program.

(
    config: Config, doit: Callable[[Config, "Session"], Optional[Union[int, ExitCode]]]
)

Source from the content-addressed store, hash-verified

253
254
255def wrap_session(
256 config: Config, doit: Callable[[Config, "Session"], Optional[Union[int, ExitCode]]]
257) -> Union[int, ExitCode]:
258 """Skeleton command line program."""
259 session = Session.from_config(config)
260 session.exitstatus = ExitCode.OK
261 initstate = 0
262 try:
263 try:
264 config._do_configure()
265 initstate = 1
266 config.hook.pytest_sessionstart(session=session)
267 initstate = 2
268 session.exitstatus = doit(config, session) or 0
269 except UsageError:
270 session.exitstatus = ExitCode.USAGE_ERROR
271 raise
272 except Failed:
273 session.exitstatus = ExitCode.TESTS_FAILED
274 except (KeyboardInterrupt, exit.Exception):
275 excinfo = _pytest._code.ExceptionInfo.from_current()
276 exitstatus: Union[int, ExitCode] = ExitCode.INTERRUPTED
277 if isinstance(excinfo.value, exit.Exception):
278 if excinfo.value.returncode is not None:
279 exitstatus = excinfo.value.returncode
280 if initstate < 2:
281 sys.stderr.write(f"{excinfo.typename}: {excinfo.value.msg}\n")
282 config.hook.pytest_keyboard_interrupt(excinfo=excinfo)
283 session.exitstatus = exitstatus
284 except BaseException:
285 session.exitstatus = ExitCode.INTERNAL_ERROR
286 excinfo = _pytest._code.ExceptionInfo.from_current()
287 try:
288 config.notify_exception(excinfo, config.option)
289 except exit.Exception as exc:
290 if exc.returncode is not None:
291 session.exitstatus = exc.returncode
292 sys.stderr.write(f"{type(exc).__name__}: {exc}\n")
293 else:
294 if isinstance(excinfo.value, SystemExit):
295 sys.stderr.write("mainloop: caught unexpected SystemExit!\n")
296
297 finally:
298 # Explicitly break reference cycle.
299 excinfo = None # type: ignore
300 os.chdir(session.startpath)
301 if initstate >= 2:
302 try:
303 config.hook.pytest_sessionfinish(
304 session=session, exitstatus=session.exitstatus
305 )
306 except exit.Exception as exc:
307 if exc.returncode is not None:
308 session.exitstatus = exc.returncode
309 sys.stderr.write(f"{type(exc).__name__}: {exc}\n")
310 config._ensure_unconfigure()
311 return session.exitstatus
312

Callers 4

pytest_cmdline_mainFunction · 0.90
show_fixtures_per_testFunction · 0.90
showfixturesFunction · 0.90
pytest_cmdline_mainFunction · 0.85

Calls 10

_do_configureMethod · 0.80
from_currentMethod · 0.80
notify_exceptionMethod · 0.80
_ensure_unconfigureMethod · 0.80
from_configMethod · 0.45
pytest_sessionstartMethod · 0.45
writeMethod · 0.45
chdirMethod · 0.45
pytest_sessionfinishMethod · 0.45

Tested by

no test coverage detected