Skip to content

Commit 9b1e147

Browse files
[Fixes #12951] CSV file preview fails (#12999)
* [Fixes #12951] CSV file preview fails * [Fixes #12951] CSV file preview fails
1 parent 8be1760 commit 9b1e147

File tree

5 files changed

+33
-4
lines changed

5 files changed

+33
-4
lines changed

geonode/documents/forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def clean(self):
163163
raise forms.ValidationError(_("A document cannot have both a file and a url."))
164164

165165
if extension:
166-
cleaned_data["extension"] = extension.replace(".", "")
166+
cleaned_data["extension"] = extension.replace(".", "").lower()
167167

168168
return cleaned_data
169169

geonode/documents/tests.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
from unittest.mock import patch
3434
from urllib.parse import urlparse
35+
from pathlib import Path
3536

3637
from django.urls import reverse
3738
from django.conf import settings
@@ -42,7 +43,7 @@
4243

4344
from guardian.shortcuts import get_anonymous_user
4445

45-
from geonode.assets.utils import create_asset_and_link
46+
from geonode.assets.utils import create_asset_and_link, get_default_asset
4647
from geonode.base.forms import LinkedResourceForm
4748
from geonode.maps.models import Map
4849
from geonode.layers.models import Dataset
@@ -194,6 +195,25 @@ def test_create_document_url_view(self):
194195
d = Document.objects.get(title="GeoNode Map")
195196
self.assertEqual(d.doc_url, "http://www.geonode.org/map.pdf")
196197

198+
def test_uploaded_csv_with_uppercase_extension(self):
199+
"""
200+
The extension of the file should always be lowercase
201+
"""
202+
203+
self.client.login(username="admin", password="admin")
204+
try:
205+
with open(os.path.join(os.path.dirname(__file__), "tests/data/test.CSV"), "rb") as f:
206+
data = {"title": "CSV with uppercase extension", "doc_file": f, "extension": "CSV"}
207+
self.client.post(reverse("document_upload"), data=data)
208+
d = Document.objects.get(title="CSV with uppercase extension")
209+
# verify that the extension is not lowercase
210+
self.assertEqual(d.extension, "csv")
211+
# be sure that also the file extension is not lowercase
212+
asset = get_default_asset(d)
213+
self.assertEqual(Path(asset.location[0]).suffix, ".csv")
214+
finally:
215+
Document.objects.filter(title="CSV with uppercase extension").delete()
216+
197217
def test_upload_document_form(self):
198218
"""
199219
Tests the Upload form.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Username; Identifier;First name;Last name
2+
booker12;9012;Rachel;Booker
3+
grey07;2070;Laura;Grey
4+
johnson81;4081;Craig;Johnson
5+
jenkins46;9346;Mary;Jenkins
6+
smith79;5079;Jamie;Smith

geonode/documents/views.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@
5353
from geonode.base.models import Thesaurus, TopicCategory
5454
from geonode.base import enumerations
5555

56+
from pathlib import Path
57+
5658
from .utils import get_download_response
5759

5860
from .models import Document
@@ -162,7 +164,8 @@ def form_valid(self, form):
162164
if file:
163165
tempdir = mkdtemp()
164166
dirname = os.path.basename(tempdir)
165-
filepath = storage_manager.save(f"{dirname}/{file.name}", file)
167+
name = Path(file.name)
168+
filepath = storage_manager.save(f"{dirname}/{name.stem}{name.suffix.lower()}", file)
166169
storage_path = storage_manager.path(filepath)
167170
self.object = resource_manager.create(
168171
None,

geonode/resource/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ def document_post_save(instance, *args, **kwargs):
333333
asset = get_default_asset(instance)
334334
if asset:
335335
_, extension = os.path.splitext(os.path.basename(asset.location[0]))
336-
instance.extension = extension[1:]
336+
instance.extension = extension[1:].lower()
337337
doc_type_map = DOCUMENT_TYPE_MAP
338338
doc_type_map.update(getattr(settings, "DOCUMENT_TYPE_MAP", {}))
339339
if doc_type_map is None:

0 commit comments

Comments
 (0)