/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
|