1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import uuid
- import enum
- from django.db import models
- from django.core.files.uploadedfile import UploadedFile
- from pathlib import Path
- from pycs_api.models import base
- from pycs_api.models.project import Project
- class Extensions(enum.Enum):
- JPG = ".jpg"
- JPEG = ".jpeg"
- PNG = ".png"
- def project_directory(instance: "File", filename: str):
- return f"{instance.project.data_folder}/{filename}"
- class File(base.BaseModel):
- EXTENSIONS = [
- (Extensions.JPG, "JPG Image"),
- (Extensions.JPEG, "JPEG Image"),
- (Extensions.PNG, "PNG Image"),
- ]
- uuid = models.UUIDField(
- default=uuid.uuid4
- )
- project = models.ForeignKey(
- Project,
- on_delete=models.CASCADE,
- related_name="files",
- related_query_name="file",
- )
- extension = models.CharField(
- max_length=16,
- choices=EXTENSIONS
- )
- size = models.PositiveIntegerField()
- created = models.DateTimeField(auto_now_add=True)
- path = models.ImageField(upload_to=project_directory)
- serializer_fields = base.BaseModel.serializer_fields + [
- "project",
- "created",
- "url",
- "uuid",
- ]
- @property
- def url(self):
- return self.path.url
- @classmethod
- def create(cls, uploaded_file: UploadedFile, project: Project):
- filename = Path(uploaded_file.name)
- file = cls.objects.create(
- project=project,
- size=uploaded_file.size,
- name=filename.stem,
- extension=filename.suffix.lower(),
- path=uploaded_file
- )
- return file
- class Meta:
- unique_together = [
- "project",
- "path"
- ]
|