aboutsummaryrefslogtreecommitdiffstats
path: root/library/python/pytest/plugins/conftests.py
blob: dfae771ef862854a00571a29fc594d48e61b58ad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import os
import importlib 
import sys
import inspect 

from pytest import hookimpl

from .fixtures import metrics, links  # noqa
 
orig_getfile = inspect.getfile 
 
 
def getfile(object): 
    res = orig_getfile(object) 
    if inspect.ismodule(object): 
        if not res and getattr(object, '__orig_file__'): 
            res = object.__orig_file__ 
    return res 
 
inspect.getfile = getfile 
conftest_modules = []
 
 
@hookimpl(trylast=True)
def pytest_load_initial_conftests(early_config, parser, args):
    conftests = filter(lambda name: name.endswith(".conftest"), sys.extra_modules)

    def conftest_key(name):
        if not name.startswith("__tests__."):
            # Make __tests__ come last
            return "_." + name
        return name

    for name in sorted(conftests, key=conftest_key):
        mod = importlib.import_module(name)
        if os.getenv("CONFTEST_LOAD_POLICY") != "LOCAL":
            mod.__orig_file__ = mod.__file__
            mod.__file__ = ""
        conftest_modules.append(mod)
        early_config.pluginmanager.consider_conftest(mod)


def getconftestmodules(*args, **kwargs):
    return conftest_modules


def pytest_sessionstart(session):
    # Override filesystem based relevant conftest discovery on the call path 
    assert session.config.pluginmanager 
    session.config.pluginmanager._getconftestmodules = getconftestmodules