Example #1
0
class TestMMIFVersionCompatibility(unittest.TestCase):
    def setUp(self) -> None:
        self.major = 0
        self.minor = 4
        self.patch = 3
        self.specver = self.version(self.major, self.minor, self.patch)
        self.mmif_cur = Mmif(
            Template(EVERYTHING_JSON).substitute(VERSION=self.specver))
        self.mmif_pat_past = Mmif(
            Template(EVERYTHING_JSON).substitute(
                VERSION=self.version(self.major, self.minor, self.patch - 1)))
        self.mmif_pat_futr = Mmif(
            Template(EVERYTHING_JSON).substitute(
                VERSION=self.version(self.major, self.minor, self.patch + 1)))
        self.mmif_min_past = Mmif(
            Template(EVERYTHING_JSON).substitute(
                VERSION=self.version(self.major, self.minor - 1, self.patch)))
        self.mmif_min_futr = Mmif(
            Template(EVERYTHING_JSON).substitute(
                VERSION=self.version(self.major, self.minor + 1, self.patch)))
        self.mmif_maj_past = Mmif(
            Template(EVERYTHING_JSON).substitute(
                VERSION=self.version(self.major - 1, self.minor, self.patch)))
        self.mmif_maj_futr = Mmif(
            Template(EVERYTHING_JSON).substitute(
                VERSION=self.version(self.major + 1, self.minor, self.patch)))

    @staticmethod
    def version(*major_minor_patch):
        return '.'.join(map(str, major_minor_patch))

    def test_compatibility(self):
        """
        Simply tests searching by @type queries that do not match MMIF file version works at only patch level
        """
        DocumentTypes.TextDocument.version = self.specver
        td_url_prefix = f'{DocumentTypes.TextDocument.base_uri}/{DocumentTypes.TextDocument.version}'
        text_documents = self.mmif_cur.get_documents_by_type(
            DocumentTypes.TextDocument)
        views_with_text_documents = self.mmif_cur.get_views_contain(
            DocumentTypes.TextDocument)
        self.assertEqual(td_url_prefix, self.mmif_cur.metadata['mmif'])
        self.assertNotEqual(td_url_prefix, self.mmif_pat_past.metadata['mmif'])
        self.assertEqual(
            len(
                self.mmif_pat_past.get_documents_by_type(
                    DocumentTypes.TextDocument)), len(text_documents))
        self.assertNotEqual(td_url_prefix, self.mmif_pat_futr.metadata['mmif'])
        self.assertEqual(
            len(
                self.mmif_pat_futr.get_views_contain(
                    DocumentTypes.TextDocument)),
            len(views_with_text_documents))
        self.assertNotEqual(td_url_prefix, self.mmif_min_past.metadata['mmif'])
        self.assertEqual(
            len(
                self.mmif_min_past.get_documents_by_type(
                    DocumentTypes.TextDocument)), 0)
        self.assertNotEqual(td_url_prefix, self.mmif_min_futr.metadata['mmif'])
        self.assertEqual(
            len(
                self.mmif_min_futr.get_documents_by_type(
                    DocumentTypes.TextDocument)), 0)
def add_structure_from_timeframe(in_mmif: Mmif, iiif_json: Dict):
    # # get all views with timeframe annotations from mmif obj
    tf_views = in_mmif.get_views_contain(AnnotationTypes.TimeFrame)
    for range_id, view in enumerate(tf_views, start=1):
        view_range = tf_view_to_iiif_range(range_id, view)
        iiif_json["structures"].append(view_range)