Skip to content

Commit 65d5c25

Browse files
committed
fix: Fixes problems in dataset routes
1 parent 7dbe52a commit 65d5c25

10 files changed

Lines changed: 99 additions & 25 deletions

File tree

app/modules/dataset/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def get_uvlhub_doi(self) -> str:
139139
from app.modules.dataset.services import DataSetService
140140

141141
return DataSetService().get_uvlhub_doi(self)
142-
142+
143143
def get_uvlhub_doi_path(self) -> str:
144144
doi = self.get_uvlhub_doi()
145145
# Si encuentra "/doi", devolver desde ahí

app/modules/dataset/routes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ def download_all_dataset():
279279
shutil.rmtree(temp_dir)
280280

281281

282+
@dataset_bp.route("/doi/<path:doi>", methods=["GET"])
282283
@dataset_bp.route("/doi/<path:doi>/", methods=["GET"])
283284
def subdomain_index(doi):
284285
# Redirección si el DOI es antiguo

app/modules/dataset/templates/dataset/view_dataset.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
target="_blank"
9292
class="px-3 py-1 text-white fw-semibold text-decoration-none rounded-end me-2"
9393
style="background: linear-gradient(90deg, #2176bd 0%, #2980b9 100%); font-family: monospace;">
94-
{{ dataset.get_uvlhub_doi() }}
94+
{{ dataset.get_uvlhub_doi_path() }}
9595
</a>
9696

9797
<!-- Copiar DOI -->
@@ -150,7 +150,7 @@
150150
{% for file in hubfiles %}
151151
<tr>
152152
<td class="font-monospace">
153-
<a href="{{ url_for('hubfile.view_uvl', file_id=file.id) }}" class="text-primary text-hover-dark fw-semibold">
153+
<a href="{{ file.get_url()}}" class="text-primary text-hover-dark fw-semibold">
154154
{{ file.name }}
155155
</a>
156156
</td>
@@ -187,7 +187,7 @@
187187
</ul>
188188

189189
<!-- View page link -->
190-
<a href="{{ url_for('hubfile.view_uvl', file_id=file.id) }}"
190+
<a href="{{ file.get_url()}}"
191191
class="btn btn-sm btn-light btn-active-light-secondary me-1">
192192
<i class="ki-duotone ki-eye fs-5"></i> View
193193
</a>

app/modules/elasticsearch/utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ def index_hubfile(hubfile):
8989
"dataset_doi": dataset.get_uvlhub_doi(),
9090
"dataset_title": dataset.ds_meta_data.title,
9191
"checksum": hubfile.checksum,
92+
"url": hubfile.get_url(),
9293
"size_in_bytes": hubfile.size,
9394
"size_in_human_format": hubfile.get_formatted_size(),
9495
}

app/modules/explore/templates/explore/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ <h2 class="mb-0">
214214
<!-- Nombre del archivo + badge -->
215215
<div class="d-flex align-items-center justify-content-between">
216216
<h2 class="mb-0" style="word-break: break-all;">
217-
<a href="/hubfiles/[[id]]">
217+
<a href="[[url]]">
218218
[[filename]]
219219
</a>
220220
</h2>

app/modules/hubfile/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ def get_path(self) -> str:
4949

5050
return HubfileService().get_path_by_hubfile(self)
5151

52+
def get_url(self) -> str:
53+
from app.modules.hubfile.services import HubfileService
54+
55+
return HubfileService().get_hubfile_url(self)
56+
5257
def get_full_path(self) -> str:
5358
return os.path.join(
5459
os.getenv("WORKING_DIR", ""),

app/modules/hubfile/routes.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
import os
2+
from app.modules.dataset.services import DOIMappingService, DSMetaDataService
23
from app.modules.flamapy.services import FlamapyService
34
from flask import current_app, jsonify, make_response, request, send_from_directory
45
from flask_login import current_user, login_required
56
from app.modules.hubfile import hubfile_bp
67
from app.modules.hubfile.services import HubfileDownloadRecordService, HubfileService
78
from flask import render_template
9+
from flask import abort, redirect, url_for
810

911
hubfile_download_record_service = HubfileDownloadRecordService()
1012

1113
flamapy_service = FlamapyService()
14+
doi_mapping_service = DOIMappingService()
15+
dsmetadata_service = DSMetaDataService()
1216

1317

1418
@hubfile_bp.route("/hubfile/upload", methods=["POST"])
@@ -144,6 +148,59 @@ def view_uvl(file_id):
144148
)
145149

146150

151+
@hubfile_bp.route("/doi/<path:doi>/files/<string:filename>", methods=["GET"])
152+
def view_uvl_with_doi(doi, filename):
153+
# 1. Comprobar si el DOI está redirigido a otro
154+
new_doi = doi_mapping_service.get_new_doi(doi)
155+
if new_doi:
156+
return redirect(
157+
url_for("hubfile.view_uvl_with_doi", doi=new_doi, filename=filename),
158+
code=302,
159+
)
160+
161+
# 2. Buscar dataset por DOI
162+
ds_meta_data = dsmetadata_service.filter_by_doi(doi)
163+
if not ds_meta_data:
164+
abort(404)
165+
166+
dataset = ds_meta_data.dataset
167+
168+
# 3. Buscar hubfile por nombre dentro del dataset
169+
selected_file = next(
170+
(
171+
hf
172+
for fm in dataset.feature_models
173+
for hf in fm.hubfiles
174+
if hf.name == filename
175+
),
176+
None,
177+
)
178+
if not selected_file:
179+
abort(404)
180+
181+
# 4. Construir ruta al archivo en disco
182+
directory_path = os.path.join(
183+
"uploads", f"user_{dataset.user_id}", f"dataset_{dataset.id}", "uvl"
184+
)
185+
file_path = os.path.join(
186+
current_app.root_path, "..", directory_path, selected_file.name
187+
)
188+
189+
try:
190+
with open(file_path, "r") as f:
191+
content = f.read()
192+
except Exception as e:
193+
content = f"[Error reading file: {e}]"
194+
195+
return render_template(
196+
"hubfile/view_file.html",
197+
selected_file=selected_file,
198+
hubfiles=dataset.files(),
199+
dataset=dataset,
200+
uvl_content=content,
201+
)
202+
203+
147204
@hubfile_bp.route("/hubfiles/raw/<int:file_id>", methods=["GET"])
148205
def raw_uvl(file_id):
149206
selected_file = HubfileService().get_or_404(file_id)

app/modules/hubfile/services.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,16 @@ def _calculate_checksum(self, filepath: str) -> str:
8282
sha256.update(chunk)
8383
return sha256.hexdigest()
8484

85+
def get_hubfile_url(self, hubfile: Hubfile) -> str:
86+
dataset = self.get_dataset_by_hubfile(hubfile)
87+
ds_meta = dataset.ds_meta_data
88+
if not ds_meta or not ds_meta.dataset_doi:
89+
return None
90+
91+
path = f"/doi/{ds_meta.dataset_doi}/files/{hubfile.name}"
92+
93+
return path
94+
8595

8696
class HubfileDownloadRecordService(BaseService):
8797
def __init__(self):

app/modules/hubfile/templates/hubfile/view_file.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
target="_blank"
5353
class="px-3 py-1 text-white fw-semibold text-decoration-none rounded-end me-2"
5454
style="background: linear-gradient(90deg, #2176bd 0%, #2980b9 100%); font-family: monospace;">
55-
{{ dataset.get_uvlhub_doi() }}
55+
{{ dataset.get_uvlhub_doi_path() }}
5656
</a>
5757

5858
<!-- Copiar DOI -->
@@ -111,7 +111,7 @@
111111
{% for f in hubfiles %}
112112
<tr>
113113
<td class="font-monospace">
114-
<a href="{{ url_for('hubfile.view_uvl', file_id=f.id) }}"
114+
<a href="{{ f.get_url() }}"
115115
class="{% if f.id == selected_file.id %}fw-bold text-primary{% else %}text-muted{% endif %}">
116116
{{ f.name }}
117117
</a>

app/static/js/search.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
document.addEventListener('DOMContentLoaded', function () {
2-
const menu = document.querySelector('[data-kt-search-element="content"]');
3-
const toggle = document.getElementById('kt_header_search_toggle');
4-
5-
if (menu && toggle) {
6-
// Escucha el evento de clic en el toggle
7-
toggle.addEventListener('click', function () {
8-
// Obtén las coordenadas del toggle
9-
const toggleRect = toggle.getBoundingClientRect();
10-
11-
// Ajusta el menú para que esté justo debajo del icono de búsqueda
12-
menu.style.position = 'fixed';
13-
menu.style.top = `${toggleRect.bottom}px`; // Posición justo debajo
14-
menu.style.left = `${toggleRect.left}px`; // Alineado con el icono
15-
menu.style.transform = 'none'; // Elimina cualquier transformación previa
16-
});
17-
}
18-
});
2+
const menu = document.querySelector('[data-kt-search-element="content"]');
3+
const toggle = document.getElementById('kt_header_search_toggle');
4+
5+
if (menu && toggle) {
6+
// Escucha el evento de clic en el toggle
7+
toggle.addEventListener('click', function () {
8+
// Obtén las coordenadas del toggle
9+
const toggleRect = toggle.getBoundingClientRect();
10+
11+
// Ajusta el menú para que esté justo debajo del icono de búsqueda
12+
menu.style.position = 'fixed';
13+
menu.style.top = `${toggleRect.bottom}px`; // Posición justo debajo
14+
menu.style.left = `${toggleRect.left}px`; // Alineado con el icono
15+
menu.style.transform = 'none'; // Elimina cualquier transformación previa
16+
});
17+
}
18+
});
1919

2020
document.addEventListener("DOMContentLoaded", function () {
2121
const input = document.querySelector('[data-kt-search-element="input"]');
@@ -68,7 +68,7 @@ document.addEventListener("DOMContentLoaded", function () {
6868

6969
const href = item.type === "dataset"
7070
? `/doi/${item.dataset_doi}`
71-
: `/hubfiles/${item.feature_model_id}`;
71+
: `${item.url}`;
7272

7373
const subtitle = item.type === "dataset"
7474
? (`doi/${item.dataset_doi}` || `Dataset ID: ${item.dataset_id}`)

0 commit comments

Comments
 (0)