Skip to content

Commit c104418

Browse files
Merge pull request #686 from pitangainnovare/adequa-search-ao-silver-2
Adequa search ao silver 2
2 parents 000b5f8 + 3fdf29f commit c104418

18 files changed

Lines changed: 473 additions & 223 deletions

File tree

search/models.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,9 @@ def get_search_request_state(cls, request, *, data_source=None):
107107

108108
@classmethod
109109
def _resolve_search_sort(cls, data_source, current_sort):
110-
if current_sort == "cited_by_count":
110+
if current_sort == "most_cited":
111111
return (
112-
data_source.get_index_field_name("cited_by_count")
113-
if data_source
114-
else "metrics.received_citations.total",
112+
"metrics.received_citations.total",
115113
"desc",
116114
)
117115
return (

search/templates/search/include/result_items/document/book.html

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@
1717
{% if doc.source.publication_year %}
1818
<span class="result-card__source-meta">{{ doc.source.publication_year }}</span>
1919
{% endif %}
20+
{% if doc.source.biblio.pages %}
21+
<span class="result-card__source-meta">{% trans "Pages" %} {{ doc.source.biblio.pages }}</span>
22+
{% endif %}
23+
{% if doc.source.biblio.city or doc.source.biblio.country %}
24+
<span class="result-card__source-meta">
25+
{% if doc.source.biblio.city %}{{ doc.source.biblio.city }}{% endif %}
26+
{% if doc.source.biblio.city and doc.source.biblio.country %} - {% endif %}
27+
{% if doc.source.biblio.country %}{{ doc.source.biblio.country }}{% endif %}
28+
</span>
29+
{% endif %}
2030
{% if doc.source.metrics.received_citations.total %}
2131
<span class="result-card__source-meta result-card__source-meta--accent">{% trans "Citations" %}: {{ doc.source.metrics.received_citations.total }}</span>
2232
{% endif %}
@@ -26,7 +36,13 @@
2636
<p class="result-card__source-line">
2737
{% include "search/include/result_items/partials/publishers.html" with publishers=doc.source.publishers only %}
2838
{% if doc.source.ids.isbn %}
29-
<span class="result-card__source-meta">ISBN {{ doc.source.ids.isbn }}</span>
39+
<span class="result-card__source-meta">ISBN {{ doc.source.ids.isbn }}</span>
40+
{% endif %}
41+
{% if doc.source.ids.eisbn %}
42+
<span class="result-card__source-meta">eISBN {{ doc.source.ids.eisbn }}</span>
43+
{% endif %}
44+
{% if doc.source.ids.bisac_code %}
45+
<span class="result-card__source-meta">BISAC {% for code in doc.source.ids.bisac_code %}{{ code }}{% if not forloop.last %}, {% endif %}{% endfor %}</span>
3046
{% endif %}
3147
</p>
3248
{% endif %}

search/templates/search/include/result_items/document/dataset.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@
6868
<div class="result-card__footer">
6969
<div class="result-card__actions">
7070
{% block item_footer_actions %}
71+
{% if doc.source.files %}
72+
{% for file in doc.source.files %}
73+
<a href="{{ file.pid_url }}" target="_blank" rel="noopener noreferrer" class="result-card__action">{{ file.label }}</a>
74+
{% endfor %}
75+
{% endif %}
7176
{{ block.super }}
7277
{% endblock %}
7378
</div>

search/templates/search/include/results_controls/sort.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<select id="results-sort-select" class="results-controls__select" aria-label="{% trans 'Ordenar resultados' %}">
77
<option value="desc" {% if results_data.current_sort == "desc" %}selected{% endif %}>{% trans "Mais recentes" %}</option>
88
<option value="asc" {% if results_data.current_sort == "asc" %}selected{% endif %}>{% trans "Mais antigos" %}</option>
9-
<option value="cited_by_count" {% if results_data.current_sort == "cited_by_count" %}selected{% endif %}>{% trans "Mais citados" %}</option>
9+
<option value="most_cited" {% if results_data.current_sort == "most_cited" %}selected{% endif %}>{% trans "Mais citados" %}</option>
1010
</select>
1111
</div>
1212
</div>

search_gateway/filter_mapping.py

Lines changed: 96 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,87 @@
22
from .option_normalization import normalize_boolean
33

44

5-
def _build_year_range_values(start_value, end_value):
5+
DEFAULT_YEAR_MIN = 1800
6+
DEFAULT_YEAR_MAX = 2100
7+
8+
9+
def _parse_number_bound(value):
10+
try:
11+
return int(value) if value not in (None, "") else None
12+
except (TypeError, ValueError):
13+
return None
14+
15+
16+
def _parse_numeric_value(value, *, min_value=None, max_value=None):
617
try:
7-
start_year = int(start_value) if start_value not in (None, "") else None
18+
numeric_value = int(value) if value not in (None, "") else None
819
except (TypeError, ValueError):
9-
start_year = None
20+
return None
21+
22+
if numeric_value is None:
23+
return None
24+
if min_value is not None and numeric_value < min_value:
25+
return None
26+
if max_value is not None and numeric_value > max_value:
27+
return None
28+
return numeric_value
29+
30+
31+
def _build_numeric_range_value(start_value, end_value, *, min_value=None, max_value=None):
32+
start_number = _parse_numeric_value(
33+
start_value,
34+
min_value=min_value,
35+
max_value=max_value,
36+
)
37+
end_number = _parse_numeric_value(
38+
end_value,
39+
min_value=min_value,
40+
max_value=max_value,
41+
)
42+
43+
if start_number is None and end_number is None:
44+
return {}
1045

46+
if start_number is not None and end_number is not None and start_number > end_number:
47+
start_number, end_number = end_number, start_number
48+
49+
range_value = {}
50+
if start_number is not None:
51+
range_value["gte"] = start_number
52+
if end_number is not None:
53+
range_value["lte"] = end_number
54+
return range_value
55+
56+
57+
def _parse_year_value(value, *, min_year=None, max_year=None):
58+
try:
59+
year = int(value) if value not in (None, "") else None
60+
except (TypeError, ValueError):
61+
return None
62+
63+
if year is None:
64+
return None
65+
min_year = DEFAULT_YEAR_MIN if min_year is None else min_year
66+
max_year = DEFAULT_YEAR_MAX if max_year is None else max_year
67+
if len(str(abs(year))) != 4:
68+
return None
69+
if min_year is not None and year < min_year:
70+
return None
71+
if max_year is not None and year > max_year:
72+
return None
73+
return year
74+
75+
76+
def _parse_year_bound(value):
1177
try:
12-
end_year = int(end_value) if end_value not in (None, "") else None
78+
return int(value) if value not in (None, "") else None
1379
except (TypeError, ValueError):
14-
end_year = None
80+
return None
81+
82+
83+
def _build_year_range_values(start_value, end_value, *, min_year=None, max_year=None):
84+
start_year = _parse_year_value(start_value, min_year=min_year, max_year=max_year)
85+
end_year = _parse_year_value(end_value, min_year=min_year, max_year=max_year)
1586

1687
if start_year is None and end_year is None:
1788
return []
@@ -49,7 +120,7 @@ def _map_transformed_filter(field_name, field_info, filters):
49120
return (real_field_name, normalized_value), handled_fields
50121
return None, handled_fields
51122

52-
if transform_type != "year_range":
123+
if transform_type not in {"year_range", "numeric_range"}:
53124
return None, set()
54125

55126
source_names = list(transform.get("sources") or [])
@@ -59,9 +130,28 @@ def _map_transformed_filter(field_name, field_info, filters):
59130
if len(source_names) != 2:
60131
return None, handled_fields
61132

133+
settings = field_info.get("settings") or {}
134+
if transform_type == "numeric_range":
135+
min_value = _parse_number_bound(settings.get("min"))
136+
max_value = _parse_number_bound(settings.get("max"))
137+
numeric_range = _build_numeric_range_value(
138+
filters.get(source_names[0]),
139+
filters.get(source_names[1]),
140+
min_value=min_value,
141+
max_value=max_value,
142+
)
143+
if numeric_range:
144+
return (real_field_name, numeric_range), handled_fields
145+
return None, handled_fields
146+
147+
min_year = _parse_year_bound(settings.get("min"))
148+
max_year = _parse_year_bound(settings.get("max"))
149+
62150
year_values = _build_year_range_values(
63151
filters.get(source_names[0]),
64152
filters.get(source_names[1]),
153+
min_year=min_year,
154+
max_year=max_year,
65155
)
66156
if year_values:
67157
return (real_field_name, year_values), handled_fields

search_gateway/filter_ui.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,12 @@ def build_form_field_definition(field, applied_filters=None, options_by_field=No
371371
"min_value": field.min_value,
372372
"max_value": field.max_value,
373373
"step": field.step,
374+
"range_start_placeholder": field.ui_settings.get("range_start_placeholder", ""),
375+
"range_end_placeholder": field.ui_settings.get("range_end_placeholder", ""),
374376
"allow_clear": field.allow_clear,
377+
"include_all_option": field.include_all_option,
378+
"all_option_label": gettext(field.all_option_label),
379+
"search_threshold": field.search_threshold,
375380
}
376381

377382

@@ -441,6 +446,7 @@ def render_filter_sidebar(
441446
reset_id="search-gateway-filter-reset",
442447
reset_type="button",
443448
filters_error="",
449+
hidden_fields=None,
444450
):
445451
payload = build_data_source_form_payload(
446452
data_source,
@@ -460,6 +466,7 @@ def render_filter_sidebar(
460466
"reset_id": reset_id,
461467
"reset_type": reset_type,
462468
"filters_error": filters_error or " ".join(payload["errors"]).strip(),
469+
"hidden_fields": hidden_fields or {},
463470
}
464471
html = render_to_string(
465472
"search_gateway/includes/filter_sidebar.html",

0 commit comments

Comments
 (0)