Esempio n. 1
0
    def __init__(self,
                 projections,
                 projection_labels=None,
                 projection_attributes=None,
                 projection_formatters=None):
        from aiida.orm.calculation import Calculation
        from aiida.orm.mixins import Sealable

        self._valid_projections = projections

        sealed_key = 'attributes.{}'.format(Sealable.SEALED_KEY)
        process_paused_key = 'attributes.{}'.format(
            Calculation.PROCESS_PAUSED_KEY)
        process_label_key = 'attributes.{}'.format(
            Calculation.PROCESS_LABEL_KEY)
        process_state_key = 'attributes.{}'.format(
            Calculation.PROCESS_STATE_KEY)
        process_status_key = 'attributes.{}'.format(
            Calculation.PROCESS_STATUS_KEY)
        exit_status_key = 'attributes.{}'.format(Calculation.EXIT_STATUS_KEY)

        default_labels = {
            'pk': 'PK',
            'uuid': 'UUID',
            'ctime': 'Created',
            'mtime': 'Modified',
        }

        default_attributes = {
            'pk': 'id',
            'sealed': sealed_key,
            'paused': process_paused_key,
            'process_label': process_label_key,
            'process_state': process_state_key,
            'process_status': process_status_key,
            'exit_status': exit_status_key,
        }

        # pylint: disable=line-too-long
        default_formatters = {
            'ctime':
            lambda value: formatting.format_relative_time(value['ctime']),
            'mtime':
            lambda value: formatting.format_relative_time(value['mtime']),
            'state':
            lambda value: formatting.format_state(value[
                process_state_key], value[process_paused_key], value[
                    exit_status_key]),
            'process_state':
            lambda value: formatting.format_process_state(value[
                process_state_key]),
            'sealed':
            lambda value: formatting.format_sealed(value[sealed_key]),
        }

        if projection_labels is not None:
            for projection, label in projection_labels.items():
                if projection not in self.valid_projections:
                    raise ValueError(
                        '{} is not a valid projection'.format(projection))
                else:
                    default_labels[projection] = label

        if projection_attributes is not None:
            for projection, attribute in projection_attributes.items():
                if projection not in self.valid_projections:
                    raise ValueError(
                        '{} is not a valid projection'.format(projection))
                else:
                    default_attributes[projection] = attribute

        if projection_formatters is not None:
            for projection, formatter in projection_formatters.items():
                if projection not in self.valid_projections:
                    raise ValueError(
                        '{} is not a valid projection'.format(projection))
                else:
                    default_formatters[projection] = formatter

        super(CalculationProjectionMapper,
              self).__init__(default_labels, default_attributes,
                             default_formatters)
Esempio n. 2
0
    def __init__(self,
                 projections,
                 projection_labels=None,
                 projection_attributes=None,
                 projection_formatters=None):
        # pylint: disable=too-many-locals
        from aiida.orm import ProcessNode
        from aiida.orm.utils.mixins import Sealable

        self._valid_projections = projections

        sealed_key = f'attributes.{Sealable.SEALED_KEY}'
        job_state_key = 'attributes.state'
        scheduler_state_key = 'attributes.scheduler_state'
        process_paused_key = f'attributes.{ProcessNode.PROCESS_PAUSED_KEY}'
        process_label_key = f'attributes.{ProcessNode.PROCESS_LABEL_KEY}'
        process_state_key = f'attributes.{ProcessNode.PROCESS_STATE_KEY}'
        process_status_key = f'attributes.{ProcessNode.PROCESS_STATUS_KEY}'
        exit_status_key = f'attributes.{ProcessNode.EXIT_STATUS_KEY}'

        default_labels = {
            'pk': 'PK',
            'uuid': 'UUID',
            'ctime': 'Created',
            'mtime': 'Modified',
            'state': 'Process State'
        }

        default_attributes = {
            'pk': 'id',
            'job_state': job_state_key,
            'scheduler_state': scheduler_state_key,
            'sealed': sealed_key,
            'paused': process_paused_key,
            'process_label': process_label_key,
            'process_state': process_state_key,
            'process_status': process_status_key,
            'exit_status': exit_status_key,
        }

        default_formatters = {
            'ctime':
            lambda value: formatting.format_relative_time(value['ctime']),
            'mtime':
            lambda value: formatting.format_relative_time(value['mtime']),
            'state':
            lambda value: formatting.format_state(value[
                process_state_key], value[process_paused_key], value[
                    exit_status_key]),
            'process_state':
            lambda value: formatting.format_process_state(value[
                process_state_key]),
            'sealed':
            lambda value: formatting.format_sealed(value[sealed_key]),
        }

        if projection_labels is not None:
            for projection, label in projection_labels.items():
                if projection not in self.valid_projections:
                    raise ValueError(f'{projection} is not a valid projection')
                else:
                    default_labels[projection] = label

        if projection_attributes is not None:
            for projection, attribute in projection_attributes.items():
                if projection not in self.valid_projections:
                    raise ValueError(f'{projection} is not a valid projection')
                else:
                    default_attributes[projection] = attribute

        if projection_formatters is not None:
            for projection, formatter in projection_formatters.items():
                if projection not in self.valid_projections:
                    raise ValueError(f'{projection} is not a valid projection')
                else:
                    default_formatters[projection] = formatter

        super().__init__(default_labels, default_attributes,
                         default_formatters)