コード例 #1
0
    def make_tests_delta(self):
        """Add tests delta between two latest test rounds to json_stats."""
        logger.info(f'Generating tests delta for {self.model_name}.')
        date = self.latest_round.date_str[:10]
        test_name = None
        test_data = self.latest_round.json_results[0].get('test_data')
        if test_data:
            test_name = test_data.get('name')
        if not self.previous_round:
            tests_delta = {
                'applied_hashes_delta': {
                    'added': [],
                    'removed': []
                }
            }
        else:
            applied_delta = self.latest_round.find_delta_hashes(
                self.previous_round, 'applied_tests')
            tests_delta = {'applied_hashes_delta': applied_delta}
            msg = _make_delta_msg(self.model_name,
                                  'applied_tests',
                                  applied_delta,
                                  date,
                                  test_corpus=self.test_corpus,
                                  test_name=test_name)
            if msg:
                logger.info(msg['message'])

        for mc_type in self.latest_round.mc_types_results:
            if not self.previous_round or mc_type not in \
                    self.previous_round.mc_types_results:
                tests_delta[mc_type] = {
                    'passed_hashes_delta': {
                        'added': [],
                        'removed': []
                    }
                }
            else:
                passed_delta = self.latest_round.find_delta_hashes(
                    self.previous_round, 'passed_tests', mc_type=mc_type)
                tests_delta[mc_type] = {'passed_hashes_delta': passed_delta}
                msg = _make_delta_msg(self.model_name,
                                      'passed_tests',
                                      passed_delta,
                                      date,
                                      mc_type,
                                      test_corpus=self.test_corpus,
                                      test_name=test_name)
                if msg:
                    logger.info(msg['message'])
        self.json_stats['tests_delta'] = tests_delta
コード例 #2
0
ファイル: test_notifications.py プロジェクト: kkaris/emmaa
def test_delta_msg():
    # No message when no delta
    msg = _make_delta_msg('test', 'stmts', {'added': []}, '2020-01-01',
                          new_papers=2)
    assert not msg
    # No message with no new papers
    msg = _make_delta_msg('test', 'stmts', {'added': [1234, 2345]},
                          '2020-01-01', new_papers=None)
    assert not msg, msg
    # New statements with new papers message
    msg = _make_delta_msg('test', 'stmts', {'added': [1234, 2345]},
                          '2020-01-01', new_papers=5)
    assert set(msg.keys()) == {
        'message', 'start', 'middle', 'delta_part', 'url'}
    assert msg['message'] == (
        'Today I read 5 new publications and learned 2 new mechanisms. See '
        'https://emmaa.indra.bio/dashboard/test?tab=model&date='
        '2020-01-01#addedStmts for more details.'), msg['message']
    # New applied tests message
    msg = _make_delta_msg('test', 'applied_tests', {'added': [1234, 2345]},
                          '2020-01-01', test_corpus='simple_tests',
                          test_name='Simple tests corpus')
    assert set(msg.keys()) == {
        'message', 'start', 'middle', 'delta_part', 'url'}
    assert msg['message'] == (
        'Today I applied 2 new tests in the Simple tests corpus. '
        'See https://emmaa.indra.bio/dashboard/test?'
        'tab=tests&test_corpus=simple_tests&date=2020-01-01'
        '#newAppliedTests for more details.'), msg['message']
    # New passed tests message
    msg = _make_delta_msg('test', 'passed_tests', {'added': [1234, 2345]},
                          '2020-01-01', 'pysb', test_corpus='simple_tests',
                          test_name='Simple tests corpus', is_tweet=True)
    assert set(msg.keys()) == {
        'message', 'start', 'middle', 'delta_part', 'url'}
    assert msg['message'] == (
        'Today I explained 2 new observations in the Simple tests '
        'corpus with my @PySysBio model. See '
        'https://emmaa.indra.bio/dashboard/test?tab=tests'
        '&test_corpus=simple_tests&date=2020-01-01#newPassedTests '
        'for more details.'), msg['message']
コード例 #3
0
 def make_model_delta(self):
     """Add model delta between two latest model states to json_stats."""
     logger.info(f'Generating model delta for {self.model_name}.')
     if not self.previous_round:
         self.json_stats['model_delta'] = {
             'statements_hashes_delta': {
                 'added': [],
                 'removed': []
             }
         }
     else:
         stmts_delta = self.latest_round.find_delta_hashes(
             self.previous_round, 'statements')
         self.json_stats['model_delta'] = {
             'statements_hashes_delta': stmts_delta
         }
         msg = _make_delta_msg(self.model_name, 'stmts', stmts_delta,
                               self.latest_round.date_str[:10])
         if msg:
             logger.info(msg['message'])
コード例 #4
0
def get_all_update_messages(deltas, is_tweet=False):
    """Get all messages for model deltas that can be further used in tweets and
    email notifications.

    Parameters
    ----------
    deltas : dict
        A dictionary containing deltas for a model and its test results
        returned by get_model_deltas function.

    is_tweet : bool
        Whether messages are generated for Twitter (used to determine the
        formatting of model types).

    Returns
    -------
    msg_dicts : list[dict]
        A list of individual message dictionaries that can be used for tweets
        or email notifications.
    """
    msg_dicts = []
    model_name = deltas['model_name']
    date = deltas['date']
    # Model message
    stmts_delta = deltas.get('stmts_delta')
    new_papers = deltas.get('new_papers')
    stmts_msg = _make_delta_msg(model_name,
                                'stmts',
                                stmts_delta,
                                date,
                                new_papers=new_papers,
                                is_tweet=is_tweet)
    if stmts_msg:
        logger.info(stmts_msg['message'])
        msg_dicts.append(stmts_msg)
    # Tests messages
    for test_corpus, test_delta in deltas['tests'].items():
        applied_delta = test_delta.get('applied_tests')
        test_name = test_delta.get('name')
        applied_msg = _make_delta_msg(model_name,
                                      'applied_tests',
                                      applied_delta,
                                      date,
                                      test_corpus=test_corpus,
                                      test_name=test_name,
                                      is_tweet=is_tweet)
        if applied_msg:
            logger.info(applied_msg['message'])
            msg_dicts.append(applied_msg)
        for mc_type in test_delta.get('passed', {}):
            passed_delta = test_delta['passed'][mc_type]
            passed_msg = _make_delta_msg(model_name,
                                         'passed_tests',
                                         passed_delta,
                                         date,
                                         mc_type,
                                         test_corpus=test_corpus,
                                         test_name=test_name,
                                         is_tweet=is_tweet)
            if passed_msg:
                logger.info(passed_msg['message'])
                msg_dicts.append(passed_msg)
    return msg_dicts