Skip to content
Snippets Groups Projects
models.py 2.61 KiB
Newer Older
Nico Vermaas's avatar
Nico Vermaas committed
from django.db import models
from django.urls import reverse
from django.utils.timezone import datetime
from django.db.models import Sum

# constants
datetime_format_string = '%Y-%m-%dT%H:%M:%SZ'

class Workflow(models.Model):
    repository = models.CharField(max_length=100, blank=True, null=True, default="unknown")
    commit_id = models.CharField(max_length=30, blank=True, null=True)
    path = models.CharField(max_length=100, blank=True, null=True, default="unknown")
Nico Vermaas's avatar
Nico Vermaas committed

class LogEntry(models.Model):
    step_name = models.CharField(max_length=30, blank=True, null=True, default="unknown")
Nico Vermaas's avatar
Nico Vermaas committed


class Task(models.Model):
    taskID = models.CharField(db_index=True, max_length=30, blank=True, null=True)
    task_type = models.CharField(max_length=20, default="task")

    project = models.CharField(max_length=100, blank=True, null=True, default="unknown")
    sas_id = models.CharField(max_length=30, blank=True, null=True)
    priority = models.IntegerField(default=0)
    purge_policy = models.CharField(max_length=5, default="no", blank=True, null=True)
    workflow_id = models.CharField(max_length=12, blank=True, null=True)

    inputs = models.JSONField(null=True, blank=True)
    outputs = models.JSONField(null=True, blank=True)

    skip = models.BooleanField(default=False)
Nico Vermaas's avatar
Nico Vermaas committed
    creationTime = models.DateTimeField(default=datetime.utcnow, blank=True)

    new_status = models.CharField(max_length=50, default="defined", null=True)
    my_status = models.CharField(db_index=True, max_length=50,default="defined")
Nico Vermaas's avatar
Nico Vermaas committed

    def __str__(self):
        return str(self.id)

    # this translates a view-name (from urls.py) back to a url, to avoid hardcoded url's in the html templates
    # bad : <td><a href="/atdb/observations/{{ observation.id }}/" target="_blank">{{ observation.taskID }} </a> </td>
    # good: <td><a href="{{ observation.get_absolute_url }}" target="_blank">{{ observation.taskID }} </a> </td>
    def get_absolute_url(self):
        return reverse('task-detail-view-api', kwargs={'pk': self.pk})

Nico Vermaas's avatar
Nico Vermaas committed

class Status(models.Model):
    name = models.CharField(max_length=50, default="unknown")
    timestamp = models.DateTimeField(default=datetime.utcnow, blank=True)
    task = models.ForeignKey(Task, related_name='status_history', on_delete=models.CASCADE, null=False)
Nico Vermaas's avatar
Nico Vermaas committed

    @property
    def property_taskID(self):
        return self.task.taskID
Nico Vermaas's avatar
Nico Vermaas committed

    @property
    def property_task_type(self):
        return self.task.task_type
Nico Vermaas's avatar
Nico Vermaas committed

    # the representation of the value in the REST API
    def __str__(self):
        formatedDate = self.timestamp.strftime(datetime_format_string)
        return str(self.name)+' ('+str(formatedDate)+')'