OpenHumans/oh-proj-management

View on GitHub
project_admin/models.py

Summary

Maintainability
A
0 mins
Test Coverage
from django.db import models
from django.contrib.auth.models import User
from django.db.models import Count


class Project(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    active = models.BooleanField()
    approved = models.BooleanField()
    authorized_members = models.IntegerField()
    badge_image = models.URLField(max_length=200, blank=True, null=True)
    contact_email = models.EmailField(max_length=200)
    id = models.AutoField(primary_key=True)
    id_label = models.CharField(max_length=50)
    info_url = models.URLField(max_length=200, blank=True)
    is_academic_or_nonprofit = models.BooleanField()
    is_study = models.BooleanField()
    leader = models.CharField(max_length=50)
    long_description = models.TextField()
    name = models.CharField(max_length=50)
    organization = models.CharField(max_length=200, blank=True)
    registered_datatypes = models.TextField(default='')
    requested_sources = models.TextField(default='')
    request_sources_access = models.TextField()
    request_username_access = models.BooleanField()
    returned_data_description = models.CharField(max_length=200, blank=True)
    short_description = models.TextField()
    slug = models.SlugField(max_length=50)
    type = models.CharField(max_length=50)
    token = models.CharField(max_length=65)
    refreshed_at = models.DateTimeField(auto_now=True)


class ProjectGroup(models.Model):
    name = models.CharField(max_length=50)
    description = models.TextField(default='')
    project = models.ForeignKey(Project, on_delete=models.CASCADE)

    def __str__(self):
        return self.name


class ProjectMemberManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().annotate(
            file_count=Count('file')
        )


class ProjectMember(models.Model):
    id = models.IntegerField(primary_key=True)
    date_joined = models.DateTimeField()
    sources_shared = models.CharField(max_length=1000, null=True)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    groups = models.ManyToManyField(ProjectGroup)
    objects = ProjectMemberManager()
    username = models.CharField(max_length=200, null=True)


class File(models.Model):
    oh_file_id = models.IntegerField()
    basename = models.CharField(max_length=200)
    created = models.DateTimeField()
    download_url = models.URLField(max_length=512)
    source = models.CharField(max_length=50)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    member = models.ForeignKey(ProjectMember, on_delete=models.CASCADE)

    class Meta:
        unique_together = ('oh_file_id', 'project')


class Note(models.Model):
    id = models.IntegerField(primary_key=True)
    title = models.CharField(max_length=50)
    description = models.CharField(max_length=1000)
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    member = models.ForeignKey(ProjectMember, on_delete=models.CASCADE)


class S3Upload(models.Model):
    key = models.CharField(max_length=260)
    created_at = models.DateTimeField(auto_now_add=True)