MCPcopy
hub / github.com/pytest-dev/pytest / wrap_session

Function wrap_session

src/_pytest/main.py:317–373  ·  src/_pytest/main.py::wrap_session

Skeleton command line program.

(
    config: Config, doit: Callable[[Config, Session], int | ExitCode | None]
)

Source from the content-addressed store, hash-verified

315
316
317def wrap_session(
318 config: Config, doit: Callable[[Config, Session], int | ExitCode | None]
319) -> int | ExitCode:
320 class="st">""class="st">"Skeleton command line program."class="st">""
321 session = Session.from_config(config)
322 session.exitstatus = ExitCode.OK
323 initstate = 0
324 try:
325 try:
326 config._do_configure()
327 initstate = 1
328 config.hook.pytest_sessionstart(session=session)
329 initstate = 2
330 session.exitstatus = doit(config, session) or 0
331 except UsageError:
332 session.exitstatus = ExitCode.USAGE_ERROR
333 raise
334 except Failed:
335 session.exitstatus = ExitCode.TESTS_FAILED
336 except (KeyboardInterrupt, exit.Exception):
337 excinfo = _pytest._code.ExceptionInfo.from_current()
338 exitstatus: int | ExitCode = ExitCode.INTERRUPTED
339 if isinstance(excinfo.value, exit.Exception):
340 if excinfo.value.returncode is not None:
341 exitstatus = excinfo.value.returncode
342 if initstate < 2:
343 sys.stderr.write(fclass="st">"{excinfo.typename}: {excinfo.value.msg}\n")
344 config.hook.pytest_keyboard_interrupt(excinfo=excinfo)
345 session.exitstatus = exitstatus
346 except BaseException:
347 session.exitstatus = ExitCode.INTERNAL_ERROR
348 excinfo = _pytest._code.ExceptionInfo.from_current()
349 try:
350 config.notify_exception(excinfo, config.option)
351 except exit.Exception as exc:
352 if exc.returncode is not None:
353 session.exitstatus = exc.returncode
354 sys.stderr.write(fclass="st">"{type(exc).__name__}: {exc}\n")
355 else:
356 if isinstance(excinfo.value, SystemExit):
357 sys.stderr.write(class="st">"mainloop: caught unexpected SystemExit!\n")
358
359 finally:
360 class="cm"># Explicitly break reference cycle.
361 excinfo = None class="cm"># type: ignore
362 os.chdir(session.startpath)
363 if initstate >= 2:
364 try:
365 config.hook.pytest_sessionfinish(
366 session=session, exitstatus=session.exitstatus
367 )
368 except exit.Exception as exc:
369 if exc.returncode is not None:
370 session.exitstatus = exc.returncode
371 sys.stderr.write(fclass="st">"{type(exc).__name__}: {exc}\n")
372 config._ensure_unconfigure()
373 return session.exitstatus
374

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