소스 검색

some fixes in file creation

Dimitri Korsch 3 년 전
부모
커밋
8555bc6287
4개의 변경된 파일23개의 추가작업 그리고 6개의 파일을 삭제
  1. 5 3
      backend/pycs_api/models/file.py
  2. 7 1
      backend/pycs_api/models/project.py
  3. 6 2
      backend/pycs_api/views/project.py
  4. 5 0
      backend/pycs_backend/settings/media.py

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

@@ -1,8 +1,9 @@
-import uuid
 import enum
+import uuid
 
-from django.db import models
+from django.conf import settings
 from django.core.files.uploadedfile import UploadedFile
+from django.db import models
 from pathlib import Path
 from pycs_api.models import base
 from pycs_api.models.project import Project
@@ -15,7 +16,8 @@ class Extensions(enum.Enum):
 
 
 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):
 

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

@@ -1,5 +1,6 @@
-import uuid
 import logging
+import os
+import uuid
 
 from django.conf import settings
 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'}")
     instance.external_data = is_external
 
+    os.makedirs(instance.root_folder, exist_ok=True)
     if not is_external:
         logging.info("Setting data folder")
         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"

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

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

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

@@ -1,4 +1,5 @@
 import os
+import logging
 from pathlib import Path
 
 from .base import BASE_DIR
@@ -34,3 +35,7 @@ STATICFILES_DIRS = [
 
 
 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)