def get_expected_messages(stream): """Parses a file and get expected messages. :param stream: File-like input stream. :type stream: enumerable :returns: A dict mapping line,msg-symbol tuples to the count on this line. :rtype: dict """ messages = Counter() for i, line in enumerate(stream): match = _EXPECTED_RE.search(line) if match is None: continue line = match.group("line") if line is None: line = i + 1 elif line.startswith("+") or line.startswith("-"): line = i + 1 + int(line) else: line = int(line) version = match.group("version") op = match.group("op") if version: required = parse_python_version(version) if not _OPERATORS[op](sys.version_info, required): continue for msg_id in match.group("msgs").split(","): messages[line, msg_id.strip()] += 1 return messages
def get_expected_messages(stream: TextIO) -> MessageCounter: """Parse a file and get expected messages.""" messages: MessageCounter = Counter() for i, line in enumerate(stream): match = _EXPECTED_RE.search(line) if match is None: continue line = match.group("line") if line is None: lineno = i + 1 else: lineno = int(line) for msg_id in match.group("msgs").split(","): messages[lineno, msg_id.strip()] += 1 return messages