浏览代码

some fixes in file creation

Dimitri Korsch 3 年之前
父节点
当前提交
8555bc6287

+ 5 - 3
backend/pycs_api/models/file.py

@@ -1,8 +1,9 @@
-import uuid
 import enum
 import enum
+import uuid
 
 
-from django.db import models
+from django.conf import settings
 from django.core.files.uploadedfile import UploadedFile
 from django.core.files.uploadedfile import UploadedFile
+from django.db import models
 from pathlib import Path
 from pathlib import Path
 from pycs_api.models import base
 from pycs_api.models import base
 from pycs_api.models.project import Project
 from pycs_api.models.project import Project
@@ -15,7 +16,8 @@ class Extensions(enum.Enum):
 
 
 
 
 def project_directory(instance: "File", filename: str):
 def project_directory(instance: "File", filename: str):
-    return f"{instance.project.data_folder}/{filename}"
+    project_dir = Path(instance.project.data_folder).relative_to(settings.MEDIA_ROOT)
+    return f"{project_dir}/{filename}"
 
 
 class File(base.BaseModel):
 class File(base.BaseModel):
 
 

+ 7 - 1
backend/pycs_api/models/project.py

@@ -1,5 +1,6 @@
-import uuid
 import logging
 import logging
+import os
+import uuid
 
 
 from django.conf import settings
 from django.conf import settings
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
@@ -71,10 +72,15 @@ def project_pre_save(sender, instance, **kwargs):
     logging.info(f"Using external folder: {'yes' if is_external else 'no'}")
     logging.info(f"Using external folder: {'yes' if is_external else 'no'}")
     instance.external_data = is_external
     instance.external_data = is_external
 
 
+    os.makedirs(instance.root_folder, exist_ok=True)
     if not is_external:
     if not is_external:
         logging.info("Setting data folder")
         logging.info("Setting data folder")
         instance.data_folder = instance.root_folder + "/data"
         instance.data_folder = instance.root_folder + "/data"
 
 
+    if not os.path.exists(instance.data_folder):
+        os.makedirs(instance.data_folder, exist_ok=True)
+
+
 
 
 
 
     # TODO: copy model to root_folder / "model"
     # TODO: copy model to root_folder / "model"

+ 6 - 2
backend/pycs_api/views/project.py

@@ -33,11 +33,15 @@ class ProjectViewSet(BaseViewSet):
             file = File.create(request.FILES['file'], project)
             file = File.create(request.FILES['file'], project)
 
 
         except Exception as e:
         except Exception as e:
-            return Response({"status": str(e)},
+            print(e)
+            return Response({
+                "status": str(e)},
                 status=status.HTTP_400_BAD_REQUEST)
                 status=status.HTTP_400_BAD_REQUEST)
 
 
         else:
         else:
-            return Response({'status': 'File uploaded'})
+            return Response({
+                'status': 'File uploaded',
+                'file_id': file.id})
 
 
     @action(detail=True)
     @action(detail=True)
     def files(self, request, pk=None):
     def files(self, request, pk=None):

+ 5 - 0
backend/pycs_backend/settings/media.py

@@ -1,4 +1,5 @@
 import os
 import os
+import logging
 from pathlib import Path
 from pathlib import Path
 
 
 from .base import BASE_DIR
 from .base import BASE_DIR
@@ -34,3 +35,7 @@ STATICFILES_DIRS = [
 
 
 
 
 PROJECTS_DIR = Path(os.environ.get("PYCS_PROJECTS_DIR", MEDIA_ROOT / "projects"))
 PROJECTS_DIR = Path(os.environ.get("PYCS_PROJECTS_DIR", MEDIA_ROOT / "projects"))
+
+if not PROJECTS_DIR.exists():
+    logging.info(f"Creating directory for projects: {PROJECTS_DIR}")
+    PROJECTS_DIR.mkdir(parents=True, exist_ok=True)