Change model name
This commit is contained in:
parent
660c288f6f
commit
0d64f8fbb6
|
|
@ -83,9 +83,7 @@ function showFileInformation() {
|
|||
<label class="block text-bold" for="upload">
|
||||
{{ $t("circlePage.documents.fileLabel") }}
|
||||
</label>
|
||||
<div
|
||||
class="mb-4 btn-secondary mt-4 text-xl relative cursor-pointer"
|
||||
>
|
||||
<div class="mb-4 btn-secondary mt-4 text-xl relative cursor-pointer">
|
||||
<input @change="fileChange" id="upload" type="file" class="absolute opacity-0" />
|
||||
{{ $t("circlePage.documents.modalAction") }}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -11,6 +11,26 @@ There are buckets for each environment:
|
|||
- myvbv-stage.iterativ.ch
|
||||
- myvbv-prod.iterativ.ch
|
||||
|
||||
Add the following CORS configuration under bucket -> permissions
|
||||
|
||||
```
|
||||
[
|
||||
{
|
||||
"AllowedHeaders": [
|
||||
"*"
|
||||
],
|
||||
"AllowedMethods": [
|
||||
"POST",
|
||||
"GET"
|
||||
],
|
||||
"AllowedOrigins": [
|
||||
"*"
|
||||
],
|
||||
"ExposeHeaders": []
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## IAM Users
|
||||
|
||||
In order to access the buckets a user is required. These users are created in
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("files", "0001_initial"),
|
||||
("learnpath", "0008_alter_learningcontent_contents"),
|
||||
|
|
@ -37,7 +36,7 @@ class Migration(migrations.Migration):
|
|||
(
|
||||
"file",
|
||||
models.OneToOneField(
|
||||
on_delete=django.db.models.deletion.CASCADE, to="files.file"
|
||||
on_delete=django.db.models.deletion.CASCADE, to="files.uploadfile"
|
||||
),
|
||||
),
|
||||
(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from wagtail.models import Page
|
|||
from vbv_lernwelt.core.model_utils import find_available_slug
|
||||
from vbv_lernwelt.core.models import User
|
||||
from vbv_lernwelt.course.serializer_helpers import get_course_serializer_class
|
||||
from vbv_lernwelt.files.models import File
|
||||
from vbv_lernwelt.files.models import UploadFile
|
||||
|
||||
|
||||
class Course(models.Model):
|
||||
|
|
@ -241,7 +241,7 @@ class CourseSessionUser(models.Model):
|
|||
|
||||
class CircleDocument(models.Model):
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
file = models.OneToOneField(File, on_delete=models.CASCADE)
|
||||
file = models.OneToOneField(UploadFile, on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=100)
|
||||
|
||||
course_session = models.ForeignKey("course.CourseSession", on_delete=models.CASCADE)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ from vbv_lernwelt.core.models import User
|
|||
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
||||
from vbv_lernwelt.course.creators.test_course import create_test_course
|
||||
from vbv_lernwelt.course.models import CircleDocument, CourseSession, CourseSessionUser
|
||||
from vbv_lernwelt.files.models import File
|
||||
from vbv_lernwelt.files.models import UploadFile
|
||||
from vbv_lernwelt.learnpath.models import Circle, LearningSequence
|
||||
|
||||
|
||||
|
|
@ -66,7 +66,7 @@ class DocumentUploadApiTestCase(APITestCase):
|
|||
)
|
||||
|
||||
file_id = response.data["file_id"]
|
||||
file = File.objects.get(id=file_id)
|
||||
file = UploadFile.objects.get(id=file_id)
|
||||
|
||||
self.assertIsNone(file.upload_finished_at)
|
||||
|
||||
|
|
@ -109,11 +109,11 @@ class DocumentUploadApiTestCase(APITestCase):
|
|||
self.assertEqual(response.status_code, 200)
|
||||
self.assertNotEqual(response.data["url"], "")
|
||||
|
||||
file = File.objects.get(id=file_id)
|
||||
file = UploadFile.objects.get(id=file_id)
|
||||
self.assertIsNotNone(file.upload_finished_at)
|
||||
|
||||
def test_can_only_finish_own_files(self):
|
||||
file = File(
|
||||
file = UploadFile(
|
||||
original_file_name="test.pdf",
|
||||
file_name="test.pdf",
|
||||
file_type="application/pdf",
|
||||
|
|
@ -131,7 +131,7 @@ class DocumentUploadApiTestCase(APITestCase):
|
|||
ls = LearningSequence.objects.get(
|
||||
slug="test-lehrgang-lp-circle-analyse-ls-beobachten"
|
||||
)
|
||||
file = File(
|
||||
file = UploadFile(
|
||||
original_file_name="test.pdf",
|
||||
file_name="test.pdf",
|
||||
file_type="application/pdf",
|
||||
|
|
@ -157,7 +157,7 @@ class DocumentUploadApiTestCase(APITestCase):
|
|||
except CircleDocument.DoesNotExist:
|
||||
pass
|
||||
|
||||
file = File.objects.get(id=file.id)
|
||||
file = UploadFile.objects.get(id=file.id)
|
||||
self.assertIsNone(file.upload_finished_at)
|
||||
|
||||
def test_student_cannot_delete_document(self):
|
||||
|
|
@ -165,7 +165,7 @@ class DocumentUploadApiTestCase(APITestCase):
|
|||
ls = LearningSequence.objects.get(
|
||||
slug="test-lehrgang-lp-circle-analyse-ls-beobachten"
|
||||
)
|
||||
file = File(
|
||||
file = UploadFile(
|
||||
original_file_name="test.pdf",
|
||||
file_name="test.pdf",
|
||||
file_type="application/pdf",
|
||||
|
|
@ -185,7 +185,6 @@ class DocumentUploadApiTestCase(APITestCase):
|
|||
response = self.client.delete(f"/api/core/document/{document.id}/")
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
|
||||
# expert cannot upload in other course
|
||||
# expert cannot delete other upload
|
||||
# exper cannot change course
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ from vbv_lernwelt.course.serializers import (
|
|||
DocumentUploadStartInputSerializer,
|
||||
)
|
||||
from vbv_lernwelt.course.services import mark_course_completion
|
||||
from vbv_lernwelt.files.models import File
|
||||
from vbv_lernwelt.files.models import UploadFile
|
||||
from vbv_lernwelt.files.services import FileDirectUploadService
|
||||
from vbv_lernwelt.learnpath.utils import get_wagtail_type
|
||||
|
||||
|
|
@ -148,11 +148,11 @@ def get_course_session_users(request, course_slug):
|
|||
|
||||
data = {
|
||||
"cockpit_user": cockpit_user_csu[0].to_dict()
|
||||
| {
|
||||
"circles": cockpit_user_csu[0]
|
||||
.expert.all()
|
||||
.values("id", "title", "slug", "translation_key")
|
||||
},
|
||||
| {
|
||||
"circles": cockpit_user_csu[0]
|
||||
.expert.all()
|
||||
.values("id", "title", "slug", "translation_key")
|
||||
},
|
||||
"users": user_data,
|
||||
}
|
||||
|
||||
|
|
@ -200,7 +200,7 @@ def document_upload_finish(request):
|
|||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
file_id = serializer.validated_data["file_id"]
|
||||
file = get_object_or_404(File, id=file_id)
|
||||
file = get_object_or_404(UploadFile, id=file_id)
|
||||
|
||||
if file.uploaded_by != request.user:
|
||||
raise PermissionDenied()
|
||||
|
|
@ -213,7 +213,7 @@ def document_upload_finish(request):
|
|||
|
||||
@api_view(["POST"])
|
||||
def document_direct_upload(request, file_id):
|
||||
file = get_object_or_404(File, id=file_id)
|
||||
file = get_object_or_404(UploadFile, id=file_id)
|
||||
|
||||
file_obj = request.FILES["file"]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
|
||||
from vbv_lernwelt.files.models import File
|
||||
from vbv_lernwelt.files.models import UploadFile
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
|
@ -20,7 +20,7 @@ class Command(BaseCommand):
|
|||
|
||||
num_deleted = 0
|
||||
|
||||
unreferenced_uploads = File.objects.filter(upload_finished_at__isnull=True)
|
||||
unreferenced_uploads = UploadFile.objects.filter(upload_finished_at__isnull=True)
|
||||
|
||||
if dry_run:
|
||||
print("------ DRY RUN -------")
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class Migration(migrations.Migration):
|
|||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="File",
|
||||
name="UploadFile",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ from vbv_lernwelt.files.utils import file_generate_upload_path
|
|||
# Code https://github.com/HackSoftware/Django-Styleguide-Example/tree/bdadf52b849bb5fa47854a3094f4da6fe9d54d02/styleguide_example/files
|
||||
|
||||
|
||||
class File(models.Model):
|
||||
class UploadFile(models.Model):
|
||||
file = models.FileField(upload_to=file_generate_upload_path, blank=True, null=True)
|
||||
|
||||
original_file_name = models.TextField()
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from django.utils import timezone
|
|||
from vbv_lernwelt.core.models import User
|
||||
from vbv_lernwelt.files.enums import FileUploadStorage
|
||||
from vbv_lernwelt.files.integrations import s3_generate_presigned_post
|
||||
from vbv_lernwelt.files.models import File
|
||||
from vbv_lernwelt.files.models import UploadFile
|
||||
from vbv_lernwelt.files.utils import (
|
||||
bytes_to_mib,
|
||||
file_generate_local_upload_url,
|
||||
|
|
@ -59,12 +59,12 @@ class FileStandardUploadService:
|
|||
return file_name, file_type
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, file_name: str = "", file_type: str = "") -> File:
|
||||
def create(self, file_name: str = "", file_type: str = "") -> UploadFile:
|
||||
_validate_file_size(self.file_obj)
|
||||
|
||||
file_name, file_type = self._infer_file_name_and_type(file_name, file_type)
|
||||
|
||||
obj = File(
|
||||
obj = UploadFile(
|
||||
file=self.file_obj,
|
||||
original_file_name=file_name,
|
||||
file_name=file_generate_name(file_name),
|
||||
|
|
@ -79,7 +79,7 @@ class FileStandardUploadService:
|
|||
return obj
|
||||
|
||||
@transaction.atomic
|
||||
def update(self, file: File, file_name: str = "", file_type: str = "") -> File:
|
||||
def update(self, file: UploadFile, file_name: str = "", file_type: str = "") -> UploadFile:
|
||||
_validate_file_size(self.file_obj)
|
||||
|
||||
file_name, file_type = self._infer_file_name_and_type(file_name, file_type)
|
||||
|
|
@ -111,8 +111,8 @@ class FileDirectUploadService:
|
|||
self.user = user
|
||||
|
||||
@transaction.atomic
|
||||
def start(self, file_name: str, file_type: str) -> Tuple[File, Dict[str, Any]]:
|
||||
file = File(
|
||||
def start(self, file_name: str, file_type: str) -> Tuple[UploadFile, Dict[str, Any]]:
|
||||
file = UploadFile(
|
||||
original_file_name=file_name,
|
||||
file_name=file_generate_name(file_name),
|
||||
file_type=file_type,
|
||||
|
|
@ -145,7 +145,7 @@ class FileDirectUploadService:
|
|||
return file, presigned_data
|
||||
|
||||
@transaction.atomic
|
||||
def finish(self, *, file: File) -> File:
|
||||
def finish(self, *, file: UploadFile) -> UploadFile:
|
||||
# Potentially, check against user
|
||||
file.upload_finished_at = timezone.now()
|
||||
file.full_clean()
|
||||
|
|
@ -154,7 +154,7 @@ class FileDirectUploadService:
|
|||
return file
|
||||
|
||||
@transaction.atomic
|
||||
def upload_local(self, *, file: File, file_obj) -> File:
|
||||
def upload_local(self, *, file: UploadFile, file_obj) -> UploadFile:
|
||||
_validate_file_size(file_obj)
|
||||
|
||||
# Potentially, check against user
|
||||
|
|
|
|||
Loading…
Reference in New Issue