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}.")
Example #6
0
def test_duplicates(case, expected):
    assert _.duplicates(*case) == expected
Example #7
0
 def validate(self):
     if duplicates := pydash.duplicates(self.alignments):
         raise AlignmentError(duplicates)
Example #8
0
def no_duplicate_status(_instance, _attribute, value) -> None:
    if pydash.duplicates(value):
        raise DuplicateStatusError(f'Duplicate status in "{value}".')