Downloaded file names keep the URL query string, invalid on Windows
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 85/100
Rechercherichtung
Lies climada/util/files_handler.py etwa bei Zeile 81 und climada/util/api_client.py etwa bei Zeile 567. Dort weist das Issue auf die Extraktion von Dateinamen anhand von URLs hin. Prüfe die bestehenden Tests für diese Downloadpfade und ergänze Tests für URLs mit Query-Strings. Das Ziel ist erreicht, wenn beide Pfade lokale Dateinamen ohne Query-String erzeugen und die Reproduktion unter Windows keinen Fehler wegen eines ungültigen Dateinamens mehr auslöst.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Describe the bug
download_file derives the local filename from the URL using url.split("/")[-1], which keeps the query string (climada/util/files_handler.py:81). The configured distance-to-coast URL ends in ?download=1, so the filename becomes GMT_intermediate_coast_distance_01d.zip?download=1. Since ? is not a valid character in Windows filenames, Centroids.get_dist_coast raises OSError: [Errno 22].
The same pattern is at climada/util/api_client.py:567.
To Reproduce
Steps to reproduce the behavior/error:
- On Windows, with no
GMT_intermediate_coast_distance_01d.tifin~/climada/data - Run the code below
Code example:
from climada.util.coordinates import dist_to_coast_nasa
dist_to_coast_nasa([46.0], [8.0])
# OSError: [Errno 22] Invalid argument:
# '...\\climada\\data\\GMT_intermediate_coast_distance_01d.zip?download=1'
Expected behavior
The query string is not part of the file name. Proposed fix at both sites:
from pathlib import PurePosixPath
from urllib.parse import urlsplit
file_name = PurePosixPath(urlsplit(url).path).name
# api_client.py: path /= unquote(PurePosixPath(urlsplit(url).path).name)
Happy to open a PR.
Screenshots
n/a
Climada Version: 6.1.1-dev (develop)
System Information (please complete the following information):
- Operating system and version: Windows 11 (10.0.26200)
- Python version: 3.12.13
Additional context
n/a
- Vorherrschende Sprache
- Jupyter Notebook
- Sterne
- 478
- Forks
- 166
- Ø Merge
- 1 T. 20 Std.
- Gemergte PRs (30 T.)
- 2
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus CLIMADA-project/climada_python
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
CLIMADA-project/climada_python#1337 ·
-
CartoDB basemaps now need an API key (somewhat urgent)Evtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offenbug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
CLIMADA-project/climada_python#1332 · 4 Kommentare · 1 Reaktion ·
-
warnings
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
CLIMADA-project/climada_python#1241 ·
-
ResourceWarningOffenwarnings
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
CLIMADA-project/climada_python#1239 ·
-
implicit `set_geometry`Offenwarnings
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
CLIMADA-project/climada_python#1226 ·
Alle Issues in CLIMADA-project/climada_python
Ähnliche Issues
-
compress: block buffers get re-zeroed on every call, and the zeroing is immediately overwrittenOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
ClickHouse/ch-go#1218 ·
Maintainer antworten meist innerhalb von 13 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
abhigyanpatwari/GitNexus#3704 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Automattic/blocks-engine#3369 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement good first issue priority: low
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
a-lex-s/mealie-telegram-bot#53 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
nearai/compose-manager#73 ·