• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

iplweb / bpp / 18634744198

19 Oct 2025 07:00PM UTC coverage: 31.618% (-29.9%) from 61.514%
18634744198

push

github

mpasternak
Merge branch 'release/v202510.1270'

657 of 9430 branches covered (6.97%)

Branch coverage included in aggregate %.

229 of 523 new or added lines in 42 files covered. (43.79%)

11303 existing lines in 316 files now uncovered.

14765 of 39346 relevant lines covered (37.53%)

0.38 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.09
src/crossref_bpp/utils.py
1
from __future__ import annotations
1✔
2

3
import json
1✔
4
import textwrap
1✔
5

6
from django.contrib.postgres.search import TrigramSimilarity
1✔
7
from django.db import models
1✔
8

9

10
def json_format_with_wrap(item: [] | {} | str | None, width: int = 70) -> str:
1✔
11
    """Formatuje 'ładnie' dane JSON, w sytuacji, gdyby jakas linia
12
    przekraczała szerokośc ``width``, zawija.
13
    """
14
    s = json.dumps(item, indent=2).split("\n")
1✔
15
    news = []
1✔
16
    for elem in s:
1✔
17
        if len(elem) > width:
1✔
18
            elem = textwrap.fill(elem, width=width)
1✔
19
        news.append(elem)
1✔
20
    return "\n".join(news)
1✔
21

22

23
def perform_trigram_search(
1✔
24
    queryset,
25
    trigram_db_field,
26
    trigram_db_value,
27
    max_number_records=5,
28
    minimum_acceptable_similarity=0.6,
29
    db_trigram_target="podobienstwo",
30
    similarity_step_down=0.05,
31
    similarity_step_up=0.01,
32
    max_steps=20,
33
    initial_similarity=None,
34
) -> list[models.Model] | None:
35
    """Performs a TrigramSimilarity search, starting from similarity value and
36
    descending/ascending to find the optimal number of records.
37

38
    :param queryset: Django queryset, can be anything.
39
    :param trigram_db_field: trigram database field, can be Lower('db_column') etc,
40
    :param trigram_db_value: value you're looking for in trigram_db_field, will be used
41
    to compare similarity.
42
    :param initial_similarity: Starting similarity value. If None, uses minimum_acceptable_similarity + 0.2
43
    """
44

45
    kwargs_annotate = {
1✔
46
        db_trigram_target: TrigramSimilarity(trigram_db_field, trigram_db_value)
47
    }
48

49
    # Start from a more reasonable similarity value for better performance
50
    if initial_similarity is None:
1!
51
        current_similarity = min(minimum_acceptable_similarity + 0.2, 0.8)
1✔
52
    else:
53
        current_similarity = initial_similarity
×
54
    current_step = 0
1✔
55
    while (
1✔
56
        current_similarity > minimum_acceptable_similarity and current_step < max_steps
57
    ):
58
        current_step += 1
1✔
59
        kwargs_filter = {db_trigram_target + "__gte": current_similarity}
1✔
60
        my_queryset = (
1✔
61
            queryset.annotate(**kwargs_annotate)
62
            .filter(**kwargs_filter)
63
            .order_by(f"-{db_trigram_target}")
64
        )
65

66
        # Use list slicing instead of count() for better performance
67
        results_list = list(my_queryset[: max_number_records + 1])
1✔
68
        cnt = len(results_list)
1✔
69

70
        if cnt == max_number_records + 1:
1!
71
            # Za dużo rekordów. Zwiększ nieznacznie pożądane podobieństwo i szukaj dalej.
72
            current_similarity += similarity_step_up
×
73
            continue
×
74

75
        if cnt == 0:
1!
76
            # Za mało rekordów. Zmniejsz poszukiwane prawdopodobieństwo:
77
            current_similarity -= similarity_step_down
1✔
78
            continue
1✔
79

80
        # Return queryset, not the list
UNCOV
81
        return my_queryset[:max_number_records]
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc