This file is indexed.

/usr/lib/python3/dist-packages/xdist/plugin.py is in python3-pytest-xdist 1.22.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import py
import pytest


def parse_numprocesses(s):
    if s == 'auto':
        try:
            from os import cpu_count
        except ImportError:
            from multiprocessing import cpu_count
        try:
            n = cpu_count()
        except NotImplementedError:
            return 1
        return n if n else 1
    else:
        return int(s)


def pytest_addoption(parser):
    group = parser.getgroup("xdist", "distributed and subprocess testing")
    group._addoption(
        '-n', '--numprocesses', dest="numprocesses", metavar="numprocesses",
        action="store",
        type=parse_numprocesses,
        help="shortcut for '--dist=load --tx=NUM*popen', "
             "you can use 'auto' here for auto detection CPUs number on "
             "host system")
    group.addoption('--max-worker-restart', '--max-slave-restart', action="store", default=None,
                    dest="maxworkerrestart",
                    help="maximum number of workers that can be restarted "
                         "when crashed (set to zero to disable this feature)\n"
                         "'--max-slave-restart' option is deprecated and will be removed in "
                         "a future release")
    group.addoption(
        '--dist', metavar="distmode",
        action="store", choices=['each', 'load', 'loadscope', 'loadfile', 'no'],
        dest="dist", default="no",
        help=("set mode for distributing tests to exec environments.\n\n"
              "each: send each test to all available environments.\n\n"
              "load: load balance by sending any pending test to any"
              " available environment.\n\n"
              "loadscope: load balance by sending pending groups of tests in"
              " the same scope to any available environment.\n\n"
              "loadfile: load balance by sending test grouped by file"
              " to any available environment.\n\n"
              "(default) no: run tests inprocess, don't distribute."))
    group.addoption(
        '--tx', dest="tx", action="append", default=[],
        metavar="xspec",
        help=("add a test execution environment. some examples: "
              "--tx popen//python=python2.5 --tx socket=192.168.1.102:8888 "
              "--tx ssh=user@codespeak.net//chdir=testcache"))
    group._addoption(
        '-d',
        action="store_true", dest="distload", default=False,
        help="load-balance tests.  shortcut for '--dist=load'")
    group.addoption(
        '--rsyncdir', action="append", default=[], metavar="DIR",
        help="add directory for rsyncing to remote tx nodes.")
    group.addoption(
        '--rsyncignore', action="append", default=[], metavar="GLOB",
        help="add expression for ignores when rsyncing to remote tx nodes.")

    group.addoption(
        "--boxed", action="store_true",
        help="backward compatibility alias for pytest-forked --forked")
    parser.addini(
        'rsyncdirs', 'list of (relative) paths to be rsynced for'
        ' remote distributed testing.', type="pathlist")
    parser.addini(
        'rsyncignore', 'list of (relative) glob-style paths to be ignored '
        'for rsyncing.', type="pathlist")
    parser.addini(
        "looponfailroots", type="pathlist",
        help="directories to check for changes", default=[py.path.local()])


# -------------------------------------------------------------------------
# distributed testing hooks
# -------------------------------------------------------------------------


def pytest_addhooks(pluginmanager):
    from xdist import newhooks
    # avoid warnings with pytest-2.8
    method = getattr(pluginmanager, "add_hookspecs", None)
    if method is None:
        method = pluginmanager.addhooks
    method(newhooks)

# -------------------------------------------------------------------------
# distributed testing initialization
# -------------------------------------------------------------------------


@pytest.mark.trylast
def pytest_configure(config):
    if config.getoption("dist") != "no" and not config.getvalue("collectonly"):
        from xdist.dsession import DSession
        session = DSession(config)
        config.pluginmanager.register(session, "dsession")
        tr = config.pluginmanager.getplugin("terminalreporter")
        tr.showfspath = False
    if config.getoption("boxed"):
        config.option.forked = True


@pytest.mark.tryfirst
def pytest_cmdline_main(config):
    if config.option.numprocesses:
        if config.option.dist == 'no':
            config.option.dist = "load"
        config.option.tx = ['popen'] * config.option.numprocesses
    if config.option.distload:
        config.option.dist = "load"
    val = config.getvalue
    if not val("collectonly"):
        usepdb = config.getoption('usepdb')  # a core option
        if val("dist") != "no":
            if usepdb:
                raise pytest.UsageError(
                    "--pdb is incompatible with distributing tests; try using -n0.")  # noqa: E501

# -------------------------------------------------------------------------
# fixtures
# -------------------------------------------------------------------------


@pytest.fixture(scope="session")
def worker_id(request):
    """Return the id of the current worker ('gw0', 'gw1', etc) or 'master'
    if running on the master node.
    """
    if hasattr(request.config, 'workerinput'):
        return request.config.workerinput['workerid']
    else:
        return 'master'