Esempio n. 1
0
def entry_details(request, slug: str):
    """
    Head word detail page. Will render a paradigm, if applicable. Fallback to search
    page if no slug is not found.

    :param slug: the stable unique ID of the lemma
    """

    lemma = Wordform.objects.filter(slug=slug, is_lemma=True)

    if lemma.count() != 1:
        # The result is either empty or ambiguous; either way, do a search!
        return redirect(url_for_query(slug.split("@")[0] or ""))

    lemma = lemma.get()

    paradigm_context: dict[str, Any] = {}

    paradigm = lemma.paradigm
    if paradigm is not None:
        paradigm_manager = default_paradigm_manager()
        sizes = list(paradigm_manager.sizes_of(paradigm))
        if "basic" in sizes:
            default_size = "basic"
        else:
            default_size = sizes[0]

        if len(sizes) <= 1:
            size = default_size
        else:
            size = request.GET.get("paradigm-size")
            if size:
                size = size.lower()
            if size not in sizes:
                size = default_size

        paradigm = paradigm_for(lemma, size)
        paradigm = get_recordings_from_paradigm(paradigm, request)

        paradigm_context.update(paradigm=paradigm,
                                paradigm_size=size,
                                paradigm_sizes=sizes)

    animate_emoji = AnimateEmoji.current_value_from_request(
        request)  # type: ignore
    dict_source = get_dict_source(request)  # type: ignore
    context = create_context_for_index_template(
        "word-detail",
        # TODO: rename this to wordform ID
        lemma_id=lemma.id,
        # TODO: remove this parameter in favour of...
        lemma=lemma,
        # ...this parameter
        wordform=presentation.serialize_wordform(lemma,
                                                 animate_emoji=animate_emoji,
                                                 dict_source=dict_source),
        **paradigm_context,
    )
    return render(request, "CreeDictionary/index.html", context)
    def __init__(
        self,
        importjson: list,
        translate_wordforms: bool,
        purge: bool,
        incremental: bool,
        atomic=True,
        skip_building_vectors_because_testing=False,
    ):
        """
        Create an Import process.

        If atomic is False, this will use batch processing that still works when
        not in a transaction.
        """
        self.dictionary_source_cache = DictionarySourceCache()
        self.data = importjson
        self.translate_wordforms = translate_wordforms
        self.incremental = incremental
        self.purge = purge
        self.skip_building_vectors_because_testing = (
            skip_building_vectors_because_testing)

        self._has_run = False

        self.paradigm_manager = default_paradigm_manager()
        self.translation_stats = TranslationStats()

        trigger_deps = not atomic

        self.wordform_buffer = InsertBuffer(Wordform.objects, assign_id=True)
        self.definition_buffer = InsertBuffer(
            Definition.objects,
            assign_id=True,
            trigger_deps=trigger_deps,
            deps=[self.wordform_buffer],
        )
        self.citation_buffer = InsertBuffer(
            Definition.citations.through.objects,
            trigger_deps=trigger_deps,
            deps=[self.definition_buffer],
        )
        self.source_language_keyword_buffer = InsertBuffer(
            SourceLanguageKeyword.objects,
            trigger_deps=trigger_deps,
            deps=[self.wordform_buffer],
        )
        self.target_language_keyword_buffer = InsertBuffer(
            TargetLanguageKeyword.objects,
            trigger_deps=trigger_deps,
            deps=[self.wordform_buffer],
        )
Esempio n. 3
0
def paradigm_for(wordform: Wordform, paradigm_size: str) -> Optional[Paradigm]:
    """
    Returns a paradigm for the given wordform at the desired size.

    If a paradigm cannot be found, None is returned
    """

    manager = default_paradigm_manager()

    if name := wordform.paradigm:
        fst_lemma = wordform.lemma.text

        if settings.MORPHODICT_ENABLE_FST_LEMMA_SUPPORT:
            fst_lemma = wordform.lemma.fst_lemma

        if paradigm := manager.paradigm_for(name, fst_lemma, paradigm_size):
            return paradigm
Esempio n. 4
0
    if lemma.count() != 1:
        # The result is either empty or ambiguous; either way, do a search!
        return redirect(url_for_query(slug.split("@")[0] or ""))

    lemma = lemma.get()

    if rich_analysis := lemma.analysis:
        morphemes = rich_analysis.generate_with_morphemes(lemma.text)
    else:
        morphemes = None

    paradigm_context: dict[str, Any] = {}

    paradigm = lemma.paradigm
    if paradigm is not None:
        paradigm_manager = default_paradigm_manager()
        sizes = list(paradigm_manager.sizes_of(paradigm))
        if "basic" in sizes:
            default_size = "basic"
        else:
            default_size = sizes[0]

        if len(sizes) <= 1:
            size = default_size
        else:
            size = request.GET.get("paradigm-size")
            if size:
                size = size.lower()
            if size not in sizes:
                size = default_size
Esempio n. 5
0
def paradigm_manager() -> ParadigmManager:
    return default_paradigm_manager()