From 7584f09b62b86390623c2a2555b10aeb873c4ad5 Mon Sep 17 00:00:00 2001 From: Keannu Bernasol Date: Wed, 4 Dec 2024 02:51:57 +0800 Subject: [PATCH] Add fix for file uploads with . symbols inside the filename --- .../config/management/commands/start_watcher.py | 12 ++++++------ docmanager_backend/documents/models.py | 10 ++-------- docmanager_backend/documents/serializers.py | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/docmanager_backend/config/management/commands/start_watcher.py b/docmanager_backend/config/management/commands/start_watcher.py index 3e60249..656afcb 100644 --- a/docmanager_backend/config/management/commands/start_watcher.py +++ b/docmanager_backend/config/management/commands/start_watcher.py @@ -37,6 +37,7 @@ class PDFHandler(FileSystemEventHandler): def process_pdf(self, file_path): try: filename = os.path.basename(file_path) + filename = str(filename).replace(" ", "") metadata = "" document_type = "" @@ -65,10 +66,7 @@ class PDFHandler(FileSystemEventHandler): if line.strip(): document_type = line.strip().lower() break - if ( - not document_type - or document_type not in Document.DOCUMENT_TYPE_CHOICES - ): + if not document_type: document_type = "other" metadata += text @@ -84,9 +82,11 @@ class PDFHandler(FileSystemEventHandler): ) if created: - DOCUMENT.file.save(name=filename, content=File(open(file_path, "rb"))) + DOCUMENT.file.save( + name=filename, content=File(open(file_path, "rb"))) self.logger.info( - f"Document '{filename}' created successfully with type '{document_type}'." + f"Document '{filename}' created successfully with type '{ + document_type}'." ) else: diff --git a/docmanager_backend/documents/models.py b/docmanager_backend/documents/models.py index 4bd8a3b..0616501 100644 --- a/docmanager_backend/documents/models.py +++ b/docmanager_backend/documents/models.py @@ -6,20 +6,14 @@ import uuid class Document(models.Model): name = models.CharField(max_length=100) - DOCUMENT_TYPE_CHOICES = ( - ("memorandum", "Memorandum"), - ("hoa", "HOA"), - ("documented procedures manual", "Documented Procedures Manual"), - ("other", "Other"), - ) document_type = models.CharField( - max_length=32, choices=DOCUMENT_TYPE_CHOICES, null=False, blank=False + max_length=32, null=False, blank=False ) number_pages = models.IntegerField(null=False, blank=False) ocr_metadata = models.TextField(null=True, blank=True) def upload_to(instance, filename): - _, extension = filename.split(".") + _, extension = filename.rsplit(".", 1) return "documents/%s_%s.%s" % (now(), str(uuid.uuid4()), extension) file = models.FileField(upload_to=upload_to) diff --git a/docmanager_backend/documents/serializers.py b/docmanager_backend/documents/serializers.py index 3a8965a..894d520 100644 --- a/docmanager_backend/documents/serializers.py +++ b/docmanager_backend/documents/serializers.py @@ -2,11 +2,28 @@ from rest_framework import serializers from .models import Document +class DocumentUpdateSerializer(serializers.ModelSerializer): + # For Head to edit document info + file = serializers.FileField(required=False) + + class Meta: + model = Document + fields = [ + "name", + "file", + "document_type", + "number_pages", + "date_uploaded", + ] + read_only_fields = ["id"] + + class DocumentUploadSerializer(serializers.ModelSerializer): # For staff document uploads date_uploaded = serializers.DateTimeField( format="%m-%d-%Y %I:%M %p", read_only=True ) + file = serializers.FileField() class Meta: model = Document