Skip to content

Commit fe3a543

Browse files
authored
Merge pull request #60 from skni-kod/fix/filenames-handling
fix: polish char file names handling
2 parents b409c44 + e54be75 commit fe3a543

File tree

2 files changed

+26
-13
lines changed

2 files changed

+26
-13
lines changed

papers/models.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
import os
2+
import re
13
from django.contrib.auth.models import User
24
from django.db import models
35
from django.db.models.signals import pre_delete
46
from django.utils import timezone
57
import textwrap
6-
import unicodedata
7-
import os
8-
import re
8+
9+
from django.utils.text import slugify
910

1011

1112
class NotificationPeriod(models.Model):
@@ -66,11 +67,15 @@ class CoAuthor(models.Model):
6667

6768
def paper_directory_path(instance, filename):
6869
name, ext = os.path.splitext(filename)
69-
name = unicodedata.normalize('NFD', name)
70-
name = re.sub(r'[^\w\s-]', '', name, flags=re.ASCII)
71-
name = re.sub(r'\s+', '_', name).strip('_')
72-
name = textwrap.shorten(name, width=100, placeholder='') or 'file'
73-
return f'paper_files/paperNo.{instance.paper.pk}/{name}{ext}'
70+
safe_name = slugify(name)
71+
safe_name = textwrap.shorten(safe_name, width=100, placeholder='')
72+
# _filename = filename.split('.')
73+
# filename = re.sub(r'\W+', '', _filename[0])
74+
# filename = filename.replace(' ','_')
75+
# filename = textwrap.shorten(filename,width=100,placeholder='')
76+
# filename += f'.{_filename[-1]}'
77+
return f'paper_files/paperNo.{instance.paper.pk}/{safe_name}{ext.lower()}'
78+
7479

7580
class UploadedFile(models.Model):
7681
paper = models.ForeignKey(Paper, on_delete=models.CASCADE)
@@ -183,4 +188,4 @@ def delete_file_with_object(instance, **kwargs):
183188
instance.file.delete()
184189

185190

186-
pre_delete.connect(delete_file_with_object, sender=UploadedFile)
191+
pre_delete.connect(delete_file_with_object, sender=UploadedFile)

papers/views.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from email.utils import unquote
2+
13
from braces.views import CsrfExemptMixin
24
from django.contrib import messages
35
from django.contrib.auth.decorators import login_required
@@ -14,7 +16,6 @@
1416
from django.views.decorators.csrf import csrf_exempt
1517
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView, TemplateView
1618
from django.views.static import serve
17-
from urllib.parse import unquote
1819
from StronaProjektyKol.settings import SITE_NAME, BASE_DIR, SITE_ADMIN_MAIL
1920
from .filters import PaperFilter
2021
from .forms import *
@@ -126,8 +127,15 @@ def paper_file_download(request, pk, item):
126127
if request.user == paper.author or request.user.groups.filter(
127128
name='reviewer').exists() or request.user.is_staff:
128129
document = UploadedFile.objects.get(pk=item)
129-
filepath = document.file.path
130-
return serve(request, os.path.basename(filepath), os.path.dirname(filepath))
130+
131+
file_path = document.file.name
132+
133+
if not os.path.exists(file_path):
134+
unquoted_path = unquote(file_path)
135+
if os.path.exists(unquoted_path):
136+
file_path = unquoted_path
137+
138+
return serve(request, os.path.basename(file_path), os.path.dirname(file_path))
131139
else:
132140
return redirect('paper-list')
133141

@@ -529,4 +537,4 @@ def userReviewShow(request, **kwargs):
529537
else:
530538
return render(request, template_name='papers/review_not_found.html')
531539
else:
532-
return redirect('reviewDetail', review.pk)
540+
return redirect('reviewDetail', review.pk)

0 commit comments

Comments
 (0)