def evaluate_metadata_statement(self, metadata, keyjar=None):
<EOL>res = dict([(k, v) for k, v in metadata.items() if k not in IgnoreKeys])<EOL>les = []<EOL>if '<STR_LIT>' in metadata:<EOL><INDENT>for fo, ms in metadata['<STR_LIT>'].items():<EOL><INDENT>if isinstance(ms, str):<EOL><INDENT>ms = json.loads(ms)<EOL><DEDENT>for _le in self.evaluate_metadata_statement(ms):<EOL><INDENT>if isinstance(ms, Message):<EOL><INDENT>le = LessOrEqual(sup=_le, **ms.to_dict())<EOL><DEDENT>else:  <EOL><INDENT>le = LessOrEqual(sup=_le, **ms)<EOL><DEDENT>if le.is_expired():<EOL><INDENT>logger.error(<EOL>'<STR_LIT>'.format(ms)<EOL>)<EOL>logger.info('<STR_LIT>'.format(utc_time_sans_frac()))<EOL>continue<EOL><DEDENT>le.eval(res)<EOL>les.append(le)<EOL><DEDENT><DEDENT>return les<EOL><DEDENT>else:  <EOL><INDENT>try:<EOL><INDENT>_iss = metadata['<STR_LIT>']<EOL><DEDENT>except:<EOL><INDENT>le = LessOrEqual()<EOL>le.eval(res)<EOL><DEDENT>else:<EOL><INDENT>le = LessOrEqual(iss=_iss, exp=metadata['<STR_LIT>'])<EOL>le.eval(res)<EOL><DEDENT>les.append(le)<EOL>return les<EOL><DEDENT>
Computes the resulting metadata statement from a compounded metadata
statement.
If something goes wrong during the evaluation an exception is raised

:param metadata: The compounded metadata statement as a dictionary
:return: A list of :py:class:`fedoidc.operator.LessOrEqual` 
    instances, one per FO.