Exemplo n.º 1
0
def search_results(request, query_string: str):  # pragma: no cover
    """
    returns rendered boxes of search results according to user query
    """
    dict_source = get_dict_source(request)  # type: ignore
    include_auto_definitions = should_include_auto_definitions(request)
    inflect_english_phrases = should_inflect_phrases(request)
    results = search_with_affixes(
        query_string,
        include_auto_definitions=include_auto_definitions,
        inflect_english_phrases=inflect_english_phrases,
    ).serialized_presentation_results(
        # mypy cannot infer this property, but it exists!
        display_mode=DisplayMode.current_value_from_request(
            request),  # type: ignore
        animate_emoji=AnimateEmoji.current_value_from_request(
            request),  # type: ignore
        show_emoji=ShowEmoji.current_value_from_request(
            request),  # type: ignore
        dict_source=dict_source,
    )

    return render(
        request,
        "CreeDictionary/search-results.html",
        {
            "query_string": query_string,
            "search_results": results,
            "show_morphemes": request.COOKIES.get("show_morphemes"),
            "show_ic": request.COOKIES.get("show_inflectional_category"),
        },
    )
Exemplo n.º 2
0
def index(request):  # pragma: no cover
    """
    homepage with optional initial search results to display

    :param request:
    :param query_string: optional initial search results to display
    :return:
    """

    user_query = request.GET.get("q", None)
    dict_source = get_dict_source(request)
    search_run = None

    if user_query:
        include_auto_definitions = should_include_auto_definitions(request)
        inflect_english_phrases = should_inflect_phrases(request)
        search_run = search_with_affixes(
            user_query,
            include_auto_definitions=include_auto_definitions,
            inflect_english_phrases=inflect_english_phrases,
        )
        search_results = search_run.serialized_presentation_results(
            display_mode=DisplayMode.current_value_from_request(request),
            animate_emoji=AnimateEmoji.current_value_from_request(request),
            show_emoji=ShowEmoji.current_value_from_request(request),
            dict_source=dict_source,
        )
        did_search = True

    else:
        search_results = []
        did_search = False

    if did_search:
        mode = "search-page"
    else:
        mode = "home-page"

    context = create_context_for_index_template(
        mode,
        word_search_form=WordSearchForm(),
        # when we have initial query word to search and display
        query_string=user_query,
        search_results=search_results,
        did_search=did_search,
    )
    context["show_dict_source_setting"] = settings.SHOW_DICT_SOURCE_SETTING
    context["show_morphemes"] = request.COOKIES.get("show_morphemes")
    context["show_ic"] = request.COOKIES.get("show_inflectional_category")
    if search_run and search_run.verbose_messages and search_run.query.verbose:
        context["verbose_messages"] = json.dumps(search_run.verbose_messages,
                                                 indent=2,
                                                 ensure_ascii=False)
    return render(request, "CreeDictionary/index.html", context)
def gen_run_sample(
    sample_file: PathLike = DEFAULT_SAMPLE_FILE,
    *,
    out_file: PathLike,
    max: Optional[int] = None,
    shuffle=False,
    append_to_query=None,
):
    "Run the sample, yielding status messages"

    combined_results: SampleSearchResultsJson = {}

    samples = load_sample_definition(sample_file)
    if shuffle:
        random.shuffle(samples)
    if max is not None:
        samples = samples[:max]

    for entry in samples:
        query = entry["Query"]

        # If we were being rigorous about timing, we’d run all the queries
        # multiple times in randomized orders to spread out the effects of
        # warmup and caching
        start_time = time.time()
        results = search_with_affixes(
            query + (" " + append_to_query if append_to_query else ""))
        time_taken = time.time() - start_time

        combined_results[query] = {
            "time_taken_seconds": time_taken,
            "results": results,
        }

        count = count_results(results)
        yield f"{count:,} results for ‘{query}’ in {time_taken:0.3}s"

    # "wt" because although gzip is a binary file format, json.dump is going to
    # want to write a string inside it
    with gzip.open(out_file, "wt") as out:
        json.dump(combined_results, out, ensure_ascii=False, indent=2)
    print(f"Output written to {out_file}")