def test_fossey_schema(): data = { "page": 405, "number": 25728, "suffix": "B", "reference": "Mai: MDP, VI, 11.I, 11", "newEdition": "Paulus AOAT 50, 981", "secondaryLiterature": "NABU 1997/1", "cdliNumber": "P123456", "museumNumber": MuseumNumberSchema().dump(MuseumNumber.of("K.4562")), "externalProject": "dcclt", "notes": "Das Zeichen ist eigentlich ZA₇", "date": "Marduk-apla-iddina I, 1171-1159 BC", "transliteration": "me-luḫ-ḫa", "sign": "M15,21.7c-0.1-0.1-0.2-0.4-0.2-0.8c-0.1-1-0.1-1.2-0.5-1.3c-0.2", } fossey = Fossey( 405, 25728, "B", "Mai: MDP, VI, 11.I, 11", "Paulus AOAT 50, 981", "NABU 1997/1", "P123456", MuseumNumber.of("K.4562"), "dcclt", "Das Zeichen ist eigentlich ZA₇", "Marduk-apla-iddina I, 1171-1159 BC", "me-luḫ-ḫa", "M15,21.7c-0.1-0.1-0.2-0.4-0.2-0.8c-0.1-1-0.1-1.2-0.5-1.3c-0.2", ) assert FosseySchema().load(data) == fossey assert FosseySchema().dump(fossey) == data
def query_transliterated_numbers(self): cursor = self._fragments.find_many( HAS_TRANSLITERATION, projection=["museumNumber"] ).sort("_id", pymongo.ASCENDING) return MuseumNumberSchema(many=True).load( fragment["museumNumber"] for fragment in cursor )
def test_number_deserialization(): number = MuseumNumber.of("Z.1.b") fragment = FragmentSchema().load({ **FragmentSchema().dump(LemmatizedFragmentFactory.build()), "museumNumber": MuseumNumberSchema().dump(number), }) assert fragment.number == number
def query_transliterated_line_to_vec(self) -> List[LineToVecEntry]: cursor = self._fragments.find_many(HAS_TRANSLITERATION, {"text": False}) return [ LineToVecEntry( MuseumNumberSchema().load(fragment["museumNumber"]), fragment["script"], tuple( LineToVecEncoding.from_list(line_to_vec) for line_to_vec in fragment["lineToVec"] ), ) for fragment in cursor ]
def test_number_serialization(): fragment = LemmatizedFragmentFactory.build() data = FragmentSchema().dump(fragment) assert data["museumNumber"] == MuseumNumberSchema().dump(fragment.number)
def test_dump(): assert MuseumNumberSchema().dump(MUSEUM_NUMBER) == SERIALIZED
def test_missing(property_): data = {**SERIALIZED} data.pop(property_) assert MuseumNumberSchema().validate(data)
def test_invalid(property_, value): assert MuseumNumberSchema().validate({**SERIALIZED, property_: value})
def test_load(): assert MuseumNumberSchema().load(SERIALIZED) == MUSEUM_NUMBER
def mongo_sign_si_2(): return { "_id": "SI_2", "lists": [{ "name": "HZL", "number": "13a" }], "unicode": [], "notes": [], "internalNotes": [], "literature": [], "values": [ { "value": "ši-2", "subIndex": 2, "questionable": False, "deprecated": False, "notes": [], "internalNotes": [], }, { "value": "hu-2", "questionable": False, "deprecated": False, "notes": [], "internalNotes": [], }, ], "forms": [], "mesZl": """<div align="center">1 **AŠ** 𒀸</div>""", "LaBaSi": "12", "logograms": [ { "logogram": "AŠ-IKU", "atf": "AŠ-IKU", "wordId": ["ikû I"], "schrammLogogramme": "AŠ-IKU; *ikû* (ein Flächenmaß); ME 43 CD 126b ZL " "290", }, { "logogram": "<sup>mul</sup>AŠ-IKU", "atf": "{mul}AŠ-IKU", "wordId": ["ikû I"], "schrammLogogramme": "<sup>mul</sup>AŠ-IKU; *ikû* (Sternbild Pegasus); " "ME 43 CD 126b ZL 290", }, ], "fossey": [{ "page": 405, "number": 25728, "suffix": "B", "reference": "Mai: MDP, VI, 11.I, 11", "newEdition": "Paulus AOAT 50, 981", "secondaryLiterature": "NABU 1997/1", "cdliNumber": "P123456", "museumNumber": MuseumNumberSchema().dump(MuseumNumber.of("K.4562")), "externalProject": "dcclt", "notes": "Das Zeichen ist eigentlich ZA₇", "date": "Marduk-apla-iddina I, 1171-1159 BC", "transliteration": "me-luḫ-ḫa", "sign": "M15,21.7c-0.1-0.1-0.2-0.4-0.2-0.8c-0.1-1-0.1-1.2-0.5-1.3c-0.2", }], }
True, Labels( surface=SurfaceLabel.from_label( atf.Surface.OBVERSE, [atf.Status.CORRECTION] ) ), LineNumber(1), True, ), { "type": "ParallelFragment", "prefix": "//", "content": [OneOfTokenSchema().dump(ValueToken.of("cf. F K.1 &d o! 1"))], "displayValue": "cf. F K.1 &d o! 1", "hasCf": True, "museumNumber": MuseumNumberSchema().dump(MuseumNumber.of("K.1")), "hasDuplicates": True, "surface": { "status": ["CORRECTION"], "surface": "OBVERSE", "abbreviation": "o", "text": "", }, "labels": { "object": None, "surface": { "status": ["CORRECTION"], "surface": "OBVERSE", "abbreviation": "o", "text": "", },
def to_dict(chapter: Chapter, include_documents=False): return { "textId": { "genre": chapter.text_id.genre.value, "category": chapter.text_id.category, "index": chapter.text_id.index, }, "classification": chapter.classification.value, "stage": chapter.stage.value, "version": chapter.version, "name": chapter.name, "order": chapter.order, "signs": list(chapter.signs), "record": RecordSchema().dump(chapter.record), "parserVersion": chapter.parser_version, "manuscripts": [{ "id": manuscript.id, "siglumDisambiguator": manuscript.siglum_disambiguator, "museumNumber": ((str(manuscript.museum_number) if manuscript.museum_number else "") if include_documents else manuscript.museum_number and MuseumNumberSchema().dump(manuscript.museum_number)), "accession": manuscript.accession, "periodModifier": manuscript.period_modifier.value, "period": manuscript.period.long_name, "provenance": manuscript.provenance.long_name, "type": manuscript.type.long_name, "notes": manuscript.notes, "colophon": TextSchema().dump(manuscript.colophon), "unplacedLines": TextSchema().dump(manuscript.unplaced_lines), "references": (ApiReferenceSchema if include_documents else ReferenceSchema)().dump(manuscript.references, many=True), } for manuscript in chapter.manuscripts], "uncertainFragments": MuseumNumberSchema().dump(UNCERTAIN_FRAGMENTS, many=True), "lines": [{ "number": OneOfLineNumberSchema().dump(line.number), "variants": [{ "reconstruction": OneOfTokenSchema().dump(variant.reconstruction, many=True), "note": variant.note and NoteLineSchema().dump(variant.note), "parallelLines": ParallelLineSchema().dump(variant.parallel_lines, many=True), "intertext": OneOfNoteLinePartSchema().dump(variant.intertext, many=True), "manuscripts": [{ "manuscriptId": manuscript_line.manuscript_id, "labels": [label.to_value() for label in manuscript_line.labels], "line": OneOfLineSchema().dump(manuscript_line.line), "paratext": OneOfLineSchema().dump(manuscript_line.paratext, many=True), "omittedWords": list(manuscript_line.omitted_words), } for manuscript_line in variant.manuscripts], } for variant in line.variants], "isSecondLineOfParallelism": line.is_second_line_of_parallelism, "isBeginningOfSection": line.is_beginning_of_section, "translation": TranslationLineSchema().dump(line.translation, many=True), } for line in chapter.lines], }
def museum_number_is(number: MuseumNumber) -> dict: serialized = MuseumNumberSchema().dump(number) return {f"museumNumber.{key}": value for key, value in serialized.items()}