def parse_atf_lark(atf_): def parse_line_(line: str, line_number: int): try: parsed_line = parse_line(line) if line else EmptyLine() validate_line(parsed_line) return parsed_line, None except PARSE_ERRORS as ex: return (None, create_transliteration_error_data(ex, line, line_number)) def check_errors(pairs): errors = [error for line, error in pairs if error is not None] if any(errors): raise TransliterationError(errors) lines = atf_.split("\n") lines = list(dropwhile(lambda line: line == "", reversed(lines))) lines.reverse() lines = [parse_line_(line, number) for number, line in enumerate(lines)] check_errors(lines) lines = tuple(pair[0] for pair in lines) text = Text(lines, f"{atf.ATF_PARSER_VERSION}") if pydash.duplicates(text.labels): raise DataError("Duplicate labels.") else: return text
def validate_manuscript_line_labels( instance: "ebl.corpus.domain.chapter.Chapter", _, value: Sequence[Line]) -> None: duplicates = pydash.duplicates(instance.manuscript_line_labels) if duplicates: readable_labels = _make_labels_readable(instance, duplicates) raise ValueError( f"Duplicate manuscript line labels: {readable_labels}.")
def validate_line_numbers(_instance, _attribute, value: Sequence[Line]) -> None: duplicates = pydash.duplicates([line.number for line in value]) if any(duplicates): raise ValueError(f"Duplicate line numbers: {duplicates}.")
def validate_manuscript_sigla(_instance, _attribute, value: Sequence[Manuscript]) -> None: duplicate_sigla = pydash.duplicates( [manuscript.siglum for manuscript in value]) if duplicate_sigla: raise ValueError(f"Duplicate sigla: {duplicate_sigla}.")
def validate_manuscript_ids(_instance, _attribute, value: Sequence[Manuscript]) -> None: duplicate_ids = pydash.duplicates([manuscript.id for manuscript in value]) if duplicate_ids: raise ValueError(f"Duplicate manuscript IDs: {duplicate_ids}.")
def test_duplicates(case, expected): assert _.duplicates(*case) == expected
def validate(self): if duplicates := pydash.duplicates(self.alignments): raise AlignmentError(duplicates)
def no_duplicate_status(_instance, _attribute, value) -> None: if pydash.duplicates(value): raise DuplicateStatusError(f'Duplicate status in "{value}".')