コード例 #1
0
 def record_fail_if_changed(cookie: Cookie) -> bool:
     nonlocal change_detected_in_next_rule
     if source in cookie.get_enrichment_sources():
         change_detected_in_next_rule = True
コード例 #2
0
class TestCookie(unittest.TestCase):
    """
    Tests for `Cookie`.
    """
    _IDENTIFIER = "id"

    def setUp(self):
        self._cookie = Cookie(TestCookie._IDENTIFIER)

    def test_enrich_with_no_previous(self):
        enrichment = Enrichment("source", datetime(1, 2, 3), Metadata())
        self._cookie.enrich(enrichment)
        self.assertEqual(self._cookie.enrichments, [enrichment])

    def test_enrich_with_older_previous(self):
        older_enrichment = Enrichment("source", datetime(1, 1, 1), Metadata())
        self._cookie.enrich(older_enrichment)
        enrichment = Enrichment("source", datetime(2, 2, 2), Metadata())
        self._cookie.enrich(enrichment)
        self.assertEqual(self._cookie.enrichments, [older_enrichment, enrichment])

    def test_enrich_with_newer_previous(self):
        newer_enrichment = Enrichment("source", datetime(3, 3, 3), Metadata())
        self._cookie.enrich(newer_enrichment)
        enrichment = Enrichment("source", datetime(2, 2, 2), Metadata())
        self._cookie.enrich(enrichment)
        self.assertEqual(self._cookie.enrichments, [enrichment, newer_enrichment])

    def test_enrich_with_older_and_newer_previous(self):
        older_enrichment = Enrichment("source", datetime(1, 1, 1), Metadata())
        self._cookie.enrich(older_enrichment)
        newer_enrichment = Enrichment("source", datetime(3, 3, 3), Metadata())
        self._cookie.enrich(newer_enrichment)
        enrichment = Enrichment("source", datetime(2, 2, 2), Metadata())
        self._cookie.enrich(enrichment)
        self.assertEqual(self._cookie.enrichments, [older_enrichment, enrichment, newer_enrichment])

    def test_get_most_recent_enrichment_from_source_when_none_from_source(self):
        self.assertIsNone(self._cookie.get_most_recent_enrichment_from_source("source"))

    def test_get_most_recent_enrichment_from_source_when_multiple_from_source(self):
        older_enrichment = Enrichment("source", datetime(1, 1, 1), Metadata())
        self._cookie.enrich(older_enrichment)
        newer_enrichment = Enrichment("source", datetime(2, 2, 2), Metadata())
        self._cookie.enrich(newer_enrichment)
        other_enrichment = Enrichment("other", datetime(3, 3, 3), Metadata())
        self._cookie.enrich(other_enrichment)
        self.assertEqual(self._cookie.get_most_recent_enrichment_from_source("source"), newer_enrichment)

    def test_get_enrichment_sources_when_no_enrichments(self):
        self.assertEqual(len(self._cookie.get_enrichment_sources()), 0)

    def test_get_enrichment_sources_when_enrichments(self):
        self._cookie.enrich(Enrichment("source_1", datetime(1, 1, 1), Metadata()))
        self._cookie.enrich(Enrichment("source_1", datetime(2, 1, 1), Metadata()))
        self._cookie.enrich(Enrichment("source_2", datetime(1, 1, 1), Metadata()))
        self.assertCountEqual(self._cookie.get_enrichment_sources(), ["source_1", "source_2"])

    def test_enrichment_no_diff(self):
        self._cookie.enrich(Enrichment('source', datetime(1, 1, 1), Metadata()))
        self._cookie.enrich(Enrichment('source', datetime(2, 2, 2), Metadata()))

        diffs = self._cookie.get_enrichment_changes_from_source('source')
        self.assertEqual(len(diffs), 0)

    def test_enrichment_diff(self):
        self._cookie.enrich(Enrichment('source', datetime(1, 1, 1), Metadata({'foo': 123, 'bar': 456, 'quux': 789})))
        self._cookie.enrich(Enrichment('source', datetime(2, 2, 2), Metadata({'xyz': 123, 'bar': 456, 'quux': 999})))

        diffs = self._cookie.get_enrichment_changes_from_source('source')
        self.assertEqual(len(diffs), 1)

        diff = diffs[0]
        self.assertIsInstance(diff, EnrichmentDiff)
        self.assertEqual(diff.source, 'source')
        self.assertEqual(diff.timestamp, datetime(2, 2, 2))
        self.assertTrue(diff.is_different())
        self.assertEqual(diff.additions, Metadata({'xyz': 123, 'quux': 999}))
        self.assertEqual(diff.deletions, Metadata({'foo': 123, 'quux': 789}))

    def test_enrichment_diff_by_key(self):
        self._cookie.enrich(Enrichment('source', datetime(1, 1, 1), Metadata({'foo': 123, 'bar': 456, 'quux': 789})))
        self._cookie.enrich(Enrichment('source', datetime(2, 2, 2), Metadata({'xyz': 123, 'bar': 456, 'quux': 999})))

        diffs = self._cookie.get_enrichment_changes_from_source('source', 'foo')
        self.assertEqual(len(diffs), 1)

        diff = diffs[0]
        self.assertEqual(diff.additions, Metadata())
        self.assertEqual(diff.deletions, Metadata({'foo': 123}))

    def test_enrichment_diff_by_keys(self):
        self._cookie.enrich(Enrichment('source', datetime(1, 1, 1), Metadata({'foo': 123, 'bar': 456, 'quux': 789})))
        self._cookie.enrich(Enrichment('source', datetime(2, 2, 2), Metadata({'xyz': 123, 'bar': 456, 'quux': 999})))

        diffs = self._cookie.get_enrichment_changes_from_source('source', ['bar', 'quux'])
        self.assertEqual(len(diffs), 1)

        diff = diffs[0]
        self.assertEqual(diff.additions, Metadata({'quux': 999}))
        self.assertEqual(diff.deletions, Metadata({'quux': 789}))

    def test_enrichment_diff_from_timestamp(self):
        self._cookie.enrich(Enrichment('source', datetime(1, 1, 1), Metadata()))
        self._cookie.enrich(Enrichment('source', datetime(2, 2, 2), Metadata({'foo': 123})))
        self._cookie.enrich(Enrichment('source', datetime(3, 3, 3), Metadata({'bar': 123})))

        all_diffs = self._cookie.get_enrichment_changes_from_source('source')
        self.assertEqual(len(all_diffs), 2)

        since_diffs = self._cookie.get_enrichment_changes_from_source('source', since=datetime(3, 3, 3))
        self.assertEqual(len(since_diffs), 1)

        diff = since_diffs[0]
        self.assertEqual(diff.timestamp, datetime(3, 3, 3))
        self.assertEqual(diff.additions, Metadata({'bar': 123}))
        self.assertEqual(diff.deletions, Metadata({'foo': 123}))
コード例 #3
0
def _matches(cookie: Cookie, context: HgiContext) -> bool:
    if IRODS_SOURCE not in cookie.get_enrichment_sources():
        return False
    return "not_interesting" in cookie.identifier