Source code for aiida_phonopy.parsers.base
# -*- coding: utf-8 -*-
"""Defines a `Parser` base class for `aiida-phonopy`."""
# All `Parser` implementations in `aiida-phonopy` must use this base class, not `aiida.parsers.Parser`.
from aiida.parsers import Parser as _BaseParser
__all__ = ('Parser',)
[docs]class Parser(_BaseParser): # pylint: disable=abstract-method
"""Custom `Parser` class for `aiida-phonopy` parser implementations."""
[docs] def emit_logs(self, logging_dictionaries, ignore=None):
"""Emit the messages in one or multiple "log dictionaries" through the logger of the parser.
A log dictionary is expected to have the following structure: each key must correspond to a log level of the
python logging module, e.g. `error` or `warning` and its values must be a list of string messages. The method
will loop over all log dictionaries and emit the messages it contains with the log level indicated by the key.
Example log dictionary structure::
logs = {
'warning': ['Could not parse the `etot_threshold` variable from the stdout.'],
'error': ['Self-consistency was not achieved']
}
:param logging_dictionaries: log dictionaries
:param ignore: list of log messages to ignore
"""
ignore = ignore or []
if not isinstance(logging_dictionaries, (list, tuple)):
logging_dictionaries = [logging_dictionaries]
for logs in logging_dictionaries:
for level, messages in logs.items():
for message in messages:
if message is None:
continue
stripped = message.strip()
if not stripped or stripped in ignore:
continue
try:
getattr(self.logger, level)(stripped)
except AttributeError:
pass
[docs] def exit(self, exit_code):
"""Log the exit message of the give exit code with level `ERROR` and return the exit code.
This is a utility function if one wants to return from the parse method and automically add the exit message
associated to the exit code as a log message to the node: e.g. `return self.exit(self.exit_codes.LABEL))`
:param exit_code: an `ExitCode`
:return: the exit code
"""
self.logger.error(exit_code.message)
return exit_code