123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import logging
- import os
- import uuid
- from django.conf import settings
- from django.contrib.auth.models import User
- from django.db import models
- from django.dispatch import receiver
- from pycs_api.models import base
- from pycs_api.models.label_provider import LabelProvider
- from pycs_api.models.model import Model
- def new_root_folder():
- return f"{settings.PROJECTS_DIR}/{uuid.uuid4()}"
- class Project(base.BaseModel):
- user = models.ForeignKey(
- User,
- on_delete=models.CASCADE,
- related_name="projects",
- related_query_name="project",
- )
- description = models.TextField()
- created = models.DateTimeField(auto_now_add=True)
- model = models.ForeignKey(
- Model,
- null=True,
- blank=True,
- on_delete=models.SET_NULL
- )
- label_provider = models.ForeignKey(
- LabelProvider,
- null=True,
- blank=True,
- on_delete=models.SET_NULL
- )
- root_folder = models.CharField(max_length=255,
- default=new_root_folder,
- unique=True)
- data_folder = models.CharField(max_length=255)
- external_data = models.BooleanField(default=False)
- serializer_fields = base.BaseModel.serializer_fields + [
- "description",
- "created",
- "model",
- "label_provider",
- "data_folder",
- "root_folder",
- ]
- read_only_fields = base.BaseModel.read_only_fields + [
- "created",
- "data_folder",
- "root_folder",
- ]
- @receiver(models.signals.pre_save, sender=Project)
- def project_pre_save(sender, instance, **kwargs):
- is_external = instance.data_folder != ''
- 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"
- # TODO: create temp folder root_folder / "temp"
|