-
BERJON Matthieu authored
I deleted a unused field in the Webapp class that I forgot last time and was creating an error. Signed-off-by:
Matthieu Berjon <matthieu.berjon@inria.fr>
BERJON Matthieu authoredI deleted a unused field in the Webapp class that I forgot last time and was creating an error. Signed-off-by:
Matthieu Berjon <matthieu.berjon@inria.fr>
models.py 6.34 KiB
from __future__ import unicode_literals
from django.contrib.auth.models import User
from django.db import models
class TimeStampModel(models.Model):
"""
An abstract base class model that provides self-updating ``created_at`` and
``updated_at`` fields.
"""
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
class AllgoUser(models.Model):
"""
Class linked to the Django user management. If there is a need to add a
field related to a user, it should be added here and not in the auth_user
table.
"""
sshkey = models.CharField(max_length=40)
# Relationships
user = models.OneToOneField(
User, on_delete=models.CASCADE, related_name="allgouser")
class Meta:
db_table = 'allgo_user'
class DockerOs(TimeStampModel):
"""
Contains the different Operating Systems that a user can choose from to
build its container.
"""
# Fields
name = models.CharField(max_length=255, blank=True)
version = models.CharField(max_length=255, blank=True)
docker_name = models.CharField(max_length=255, blank=True)
class Meta:
db_table = 'docker_os'
class JobQueue(TimeStampModel):
"""
Data regarding the type of queues available for the system.
"""
# Fields
name = models.CharField(max_length=255)
timeout = models.IntegerField(blank=True, null=True)
is_default = models.IntegerField()
class Meta:
db_table = 'job_queues'
class Webapp(TimeStampModel):
"""
Webapp model related to the creation and management of a particular web
app belonging to one or more users.
"""
# Fields
name = models.CharField(unique=True, max_length=255, blank=True)
description = models.TextField(blank=True, null=True)
# Should given according to the number of users declared as admin to this
# app
contact = models.CharField(max_length=255, blank=True, null=True)
# Logo
logo_file_name = models.CharField(max_length=255, blank=True, null=True)
logo_content_type = models.CharField(max_length=255, blank=True, null=True)
logo_file_size = models.IntegerField(blank=True, null=True)
logo_updated_at = models.DateTimeField(blank=True, null=True)
# Default quota
default_quota = models.IntegerField(blank=True, null=True)
# Docker and parameters related stuff
docker_name = models.CharField(max_length=255, blank=True)
readme = models.IntegerField(blank=True, null=True)
entrypoint = models.CharField(max_length=255, blank=True)
exec_time = models.IntegerField(blank=True, null=True)
private = models.IntegerField(blank=True, null=True)
access_token = models.CharField(max_length=255, blank=True, null=True)
sandbox_state = models.IntegerField(null=True)
# Not integrated in this model yet
# sandbox_version_id = models.IntegerField(blank=True, null=True)
memory_limit = models.BigIntegerField(blank=True, null=True)
# Relationships
# A webapp has one docker os type
docker_os = models.OneToOneField(DockerOs, related_name="webappdockeros")
user = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="webappuser")
job_queue = models.OneToOneField(
JobQueue, on_delete=models.CASCADE, related_name="webappjobqueue")
class Meta:
db_table = 'webapps'
class WebappParameter(TimeStampModel):
"""
Given parameters for a specific webapp
"""
# Fields
value = models.CharField(max_length=255, blank=True, null=True)
name = models.CharField(max_length=255, blank=True, null=True)
detail = models.CharField(max_length=255, blank=True, null=True)
# Relationships
# a Webapp parameters corresponds to one webapp
webapp = models.OneToOneField(Webapp, related_name="webappparameters")
class Meta:
db_table = 'webapp_parameters'
class WebappVersion(TimeStampModel):
"""
Version of a given webapp
"""
# Fields
number = models.CharField(max_length=255, blank=True)
changelog = models.CharField(max_length=255, blank=True)
docker_image_size = models.FloatField(blank=True, null=True)
state = models.IntegerField(null=True)
published = models.IntegerField()
# Relationships
webapp = models.ForeignKey(Webapp, related_name="webappversion")
class Meta:
db_table = 'webapp_versions'
class Quota(TimeStampModel):
"""
Quota given to a certain user for a given webapp.
Todo
- write a function that calculates the quota left to the user
"""
# Fields
quantity = models.BigIntegerField(blank=True, null=True)
# Relationships
user = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="quotauser")
webapp = models.ForeignKey(
Webapp, on_delete=models.CASCADE, related_name="quotawebapp")
class Meta:
db_table = 'quotas'
class Job(TimeStampModel):
"""
Jobs ran with the specific data (user, webapp, queue type, ...)
"""
# Fields
param = models.CharField(max_length=255, blank=True, null=True)
datasize = models.IntegerField(blank=True, null=True)
version = models.CharField(max_length=255, blank=True, null=True)
exec_time = models.IntegerField(blank=True, null=True)
access_token = models.CharField(max_length=255, blank=True, null=True)
state = models.IntegerField()
result = models.IntegerField()
# Relationships
queue = models.ForeignKey(JobQueue, related_name="jobqueue")
webapp = models.ForeignKey(Webapp, related_name="jobwebapp")
user = models.ForeignKey(AllgoUser, related_name="jobuser")
# Not in use because I don't have any related table yet
container_id = models.IntegerField(blank=True, null=True)
class Meta:
db_table = 'jobs'
class JobUploads(TimeStampModel):
"""
Data uploaded by the user to feed a given webapp
"""
# Fields
job_file_file_name = models.CharField(max_length=255, blank=True)
job_file_content_type = models.CharField(max_length=255, blank=True)
job_file_file_size = models.IntegerField(blank=True, null=True)
job_file_updated_at = models.DateTimeField(
blank=True, auto_now_add=True, null=True)
# Relationships
job = models.ForeignKey(Job, related_name="jobuploadjob")
class Meta:
db_table = 'job_uploads'