Utility classes and functions

class mtrchk.org.momotor.check.files.matcher.BaseMatcher

Matcher class for use with BaseCheckFilesMixin._check_file_rules.

This contains the main implementation for matching files to rules.

abstract _get_file(obj, file_class)

Convert objects in input_files argument of check() method to an object usable as a file with CheckletResult.

Abstract method that must be implemented in subclasses.

Parameters:
  • obj (TypeVar(TO)) – object to convert

  • file_class (str) – file class to use

Return type:

Union[File, ResultFile, Path, bytes]

check(input_files, match_rules, default_class)

Do the processing of files in input_files according to the match rules

Parameters:
Return type:

tuple[Outcome, Sequence[str], Sequence[str], dict[str, Union[str, bool, None, NewType(NoContentType, object), bytes, int, float, Decimal, Sequence[str], set[str]]], dict[Union[str, PurePath, NameClass], Union[File, ResultFile, Path, bytes]]]

Returns:

a tuple of the outcome, report messages, error messages, result properties and result files

ACTION_MAP: ClassVar[dict[str, tuple[Outcome, dict[str, Any]]]] = {'': (Outcome.PASS, {}), 'fail': (Outcome.FAIL, {}), 'pass': (Outcome.PASS, {}), 'pass-hidden': (Outcome.PASS, {'hidden': True, 'secret': True}), 'pass-secret': (Outcome.PASS, {'secret': True})}

Mapping of rule actions to an outcome and properties

class mtrchk.org.momotor.check.files.matcher.FileMatcher

Concrete implementation of BaseMatcher for an input list containing File objects.

mtrchk.org.momotor.check.files.matcher.match_files(objects, rules)

Match files according to the rules. Invalid rules generate a warning and are ignored.

Parameters:
Return type:

Generator[tuple[FilterableTuple[TypeVar(TO)], str | None, str | None, str | None], None, None]

Returns:

Generator of (matched_objects, action, file_class, message)

mtrchk.org.momotor.check.files.matcher.parse_rule(rule)

Parse a file match rule.

Parameters:

rule (str) – Rule to parse

Return type:

tuple[str, bool, bool, bool, tuple[int, int] | None, str, str, str]

Returns:

Tuple of (glob, negate, case_insensitive, consume, count, action, file_class, message)

Raises:

ValueError – If the rule is invalid

>>> parse_rule('')
('', False, False, True, None, '', '', '')
>>> parse_rule('*.py')
('*.py', False, False, True, None, '', '', '')
>>> parse_rule('-*.py')
('*.py', False, False, True, None, '', '', '')
>>> parse_rule('+*.py')
('*.py', False, False, False, None, '', '', '')
>>> parse_rule('!*.py')
('*.py', True, False, True, None, '', '', '')
>>> parse_rule('^*.py')
('*.py', False, True, True, None, '', '', '')
>>> parse_rule('!^*.py')
('*.py', True, True, True, None, '', '', '')
>>> parse_rule('+!^*.py')
('*.py', True, True, False, None, '', '', '')
>>> parse_rule('*.py{1}')
('*.py', False, False, True, (1, 1), '', '', '')
>>> parse_rule('*.py{1,}')
('*.py', False, False, True, (1, None), '', '', '')
>>> parse_rule('*.py{1,2}')
('*.py', False, False, True, (1, 2), '', '', '')
>>> parse_rule('*.py{,2}')
('*.py', False, False, True, (1, 2), '', '', '')
>>> parse_rule('*.py => ')
('*.py', False, False, True, None, '', '', '')
>>> parse_rule('*.py [class]')
('*.py', False, False, True, None, '', 'class', '')
>>> parse_rule('*.py [class#name]')
('*.py', False, False, True, None, '', 'class#name', '')
>>> parse_rule('*.py => action')
('*.py', False, False, True, None, 'action', '', '')
>>> parse_rule('*.py [class] =>')
('*.py', False, False, True, None, '', 'class', '')
>>> parse_rule('*.py [class] => action')
('*.py', False, False, True, None, 'action', 'class', '')
>>> parse_rule('*.py [class] => action message')
('*.py', False, False, True, None, 'action', 'class', 'message')
>>> parse_rule('path/*.py [class] => action message')
('path/*.py', False, False, True, None, 'action', 'class', 'message')
>>> parse_rule('**/*.py [class] => action message')
('**/*.py', False, False, True, None, 'action', 'class', 'message')
>>> parse_rule('!**/*.py [class] => action message')
('**/*.py', True, False, True, None, 'action', 'class', 'message')
>>> parse_rule('! ^ *.py { 1 , 2}  [ class ]   =>    action   message   with {#} placeholders   ')
('*.py', True, True, True, (1, 2), 'action', 'class', 'message   with {#} placeholders')
>>> parse_rule('*.py{0}')
Traceback (most recent call last):
...
ValueError: Invalid count in rule '*.py{0}': Minimum count must be at least 1
>>> parse_rule('*.py{1,0}')
Traceback (most recent call last):
...
ValueError: Invalid count in rule '*.py{1,0}': Maximum count must be greater than or equal to minimum count
mtrchk.org.momotor.check.files.matcher.replace_message_placeholders(msg, objects)

Replace message placeholders {#}, {=x|y}, {*} and {0} etc. in msg.

Parameters:
Return type:

str

Returns:

Message with placeholders replaced