This file is indexed.

/usr/lib/python2.7/dist-packages/pytest_bdd/parsers.py is in python-pytest-bdd 2.18.2-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
"""Step parsers."""

from __future__ import absolute_import
import re as base_re
import warnings

import parse as base_parse
from parse_type import cfparse as base_cfparse

import six

from .exceptions import InvalidStepParserError


RE_TYPE = type(base_re.compile(''))


class StepParser(object):

    """Parser of the individual step."""

    def __init__(self, name):
        self.name = name

    def parse_arguments(self, name):
        """Get step arguments from the given step name.

        :return: `dict` of step arguments
        """
        raise NotImplementedError()

    def is_matching(self, name):
        """Match given name with the step name."""
        raise NotImplementedError()


class re(StepParser):

    """Regex step parser."""

    def __init__(self, name, *args, **kwargs):
        """Compile regex."""
        super(re, self).__init__(name)
        self.regex = base_re.compile(self.name, *args, **kwargs)

    def parse_arguments(self, name):
        """Get step arguments.

        :return: `dict` of step arguments
        """
        return self.regex.match(name).groupdict()

    def is_matching(self, name):
        """Match given name with the step name."""
        return bool(self.regex.match(name))


class parse(StepParser):

    """parse step parser."""

    def __init__(self, name, *args, **kwargs):
        """Compile parse expression."""
        super(parse, self).__init__(name)
        self.parser = base_parse.compile(self.name, *args, **kwargs)

    def parse_arguments(self, name):
        """Get step arguments.

        :return: `dict` of step arguments
        """
        return self.parser.parse(name).named

    def is_matching(self, name):
        """Match given name with the step name."""
        try:
            return bool(self.parser.parse(name))
        except ValueError:
            return False


class cfparse(parse):

    """cfparse step parser."""

    def __init__(self, name, *args, **kwargs):
        """Compile parse expression."""
        super(parse, self).__init__(name)
        self.parser = base_cfparse.Parser(self.name, *args, **kwargs)


class string(StepParser):

    """Exact string step parser."""

    def parse_arguments(self, name):
        """No parameters are available for simple string step.

        :return: `dict` of step arguments
        """
        return {}

    def is_matching(self, name):
        """Match given name with the step name."""
        return self.name == name


def get_parser(step_name):
    """Get parser by given name.

    :param step_name: name of the step to parse

    :return: step parser object
    :rtype: StepArgumentParser
    """
    if isinstance(step_name, RE_TYPE):
        # backwards compartibility
        warn = (
            'pytest-bdd [{0}]: Direct usage of regex is deprecated. Please use pytest_bdd.parsers.re instead.'.format(
                step_name.pattern)
        )
        warnings.warn(warn)
        print(warn)
        return re(step_name.pattern, flags=step_name.flags)
    elif isinstance(step_name, six.string_types):
        return string(step_name)
    elif not hasattr(step_name, 'is_matching') or not hasattr(step_name, 'parse_arguments'):
        raise InvalidStepParserError(step_name)
    else:
        return step_name