polyphonic/interface/models.py
2020-09-05 19:47:32 +10:00

67 lines
2.2 KiB
Python

from django.db import models
from django.utils.text import slugify
import boto3
from datetime import datetime
import os.path
s3client = boto3.client('s3')
class Ensemble(models.Model):
name = models.CharField(max_length=100)
code = models.CharField(max_length=12)
password = models.CharField(max_length=100)
def active_projects(self):
return self.projects.filter(active=True)
def __str__(self):
return self.name
class Project(models.Model):
name = models.CharField(max_length=100)
ensemble = models.ForeignKey(Ensemble, related_name='projects', on_delete=models.CASCADE, null=True)
active = models.BooleanField(default=True)
deadline =models.DateField(null=True, blank=True)
bucket = models.CharField(max_length=100)
def presigned_post(self, object_name, fields={}, conditions=[], expires=3600):
key = os.path.join(slugify(self.name), object_name)
return s3client.generate_presigned_post(self.bucket, key, Fields=fields, Conditions=conditions, ExpiresIn=expires)
def __str__(self):
return self.name
class Resource(models.Model):
project = models.ForeignKey(Project, related_name='resources', on_delete=models.CASCADE)
name = models.CharField(max_length=100)
uri = models.CharField(max_length=255)
class WikiPage(models.Model):
project = models.ForeignKey(Project, related_name='wiki_pages', on_delete=models.CASCADE)
title = models.CharField(max_length=255)
markdown = models.TextField()
def __str__(self):
return self.title
class Submission(models.Model):
project = models.ForeignKey(Project, related_name='submissions', on_delete=models.CASCADE)
date = models.DateField(auto_now_add=True)
name = models.CharField(max_length=255)
instrument = models.CharField(max_length=100)
notes = models.TextField(blank=True)
complete = models.BooleanField(default=False)
key = models.CharField(max_length=255, blank=True)
def generate_key(self):
return "{}_{}_{}_${{filename}}".format(
datetime.now().isoformat(timespec='seconds').replace(':', ''),
slugify(self.name),
slugify(self.instrument)
)
def __str__(self):
return f"{self.name}: {self.date}"