models.py 4.06 KB
from django.db import models
from django.utils.translation import ugettext_lazy as _
from colab.plugins.utils.models import Collaboration
from hitcounter.models import HitCounterModelMixin


class GitlabProject(models.Model, HitCounterModelMixin):

    id = models.IntegerField(primary_key=True)
    description = models.TextField()
    public = models.BooleanField(default=True)
    name = models.TextField()
    name_with_namespace = models.TextField()
    created_at = models.DateTimeField(blank=True)
    last_activity_at = models.DateTimeField(blank=True)
    path_with_namespace = models.TextField(blank=True, null=True)

    @property
    def url(self):
        return u'/gitlab/{}'.format(self.path_with_namespace)

    class Meta:
        verbose_name = _('Gitlab Project')
        verbose_name_plural = _('Gitlab Projects')


class GitlabMergeRequest(Collaboration):

    id = models.IntegerField(primary_key=True)
    target_branch = models.TextField()
    source_branch = models.TextField()
    project = models.ForeignKey(GitlabProject, null=True,
                                on_delete=models.SET_NULL)
    description = models.TextField()
    title = models.TextField()
    state = models.TextField()
    created_at = models.DateTimeField(blank=True, null=True)

    @property
    def modified(self):
        return self.created_at

    @property
    def tag(self):
        return self.state

    type = u'merge_request'
    icon_name = u'file'

    @property
    def url(self):
        return u'/gitlab/{}/merge_requests/{}'.format(
            self.project.path_with_namespace, self.id)

    def get_author(self):
        return self.user

    class Meta:
        verbose_name = _('Gitlab Merge Request')
        verbose_name_plural = _('Gitlab Merge Requests')


class GitlabIssue(Collaboration):

    id = models.IntegerField(primary_key=True)
    project = models.ForeignKey(GitlabProject, null=True,
                                on_delete=models.SET_NULL)
    title = models.TextField()
    description = models.TextField()

    state = models.TextField()
    created_at = models.DateTimeField(blank=True, null=True)

    icon_name = u'align-right'
    type = u'gitlab_issue'

    @property
    def modified(self):
        return self.created_at

    @property
    def url(self):
        return u'/gitlab/{}/issues/{}'.format(
            self.project.path_with_namespace, self.id)

    class Meta:
        verbose_name = _('Gitlab Issue')
        verbose_name_plural = _('Gitlab Issues')


class GitlabComment(Collaboration):

    id = models.IntegerField(primary_key=True)
    body = models.TextField()
    created_at = models.DateTimeField(blank=True, null=True)
    issue_comment = models.BooleanField(default=True)

    project = models.ForeignKey(GitlabProject, null=True,
                                on_delete=models.SET_NULL)

    parent_id = models.IntegerField(null=True)
    type = u'comment'

    @property
    def modified(self):
        return self.created_at

    @property
    def title(self):
        if self.issue_comment:
            issue = GitlabIssue.objects.get(id=self.parent_id)
            return issue.title
        else:
            merge_request = GitlabMergeRequest.objects.get(id=self.parent_id)
            return merge_request.title

    icon_name = u'align-right'

    @property
    def description(self):
        return self.body

    @property
    def tag(self):
        if self.issue_comment:
            issue = GitlabIssue.objects.get(id=self.parent_id)
            return issue.state
        else:
            merge_request = GitlabMergeRequest.objects.get(id=self.parent_id)
            return merge_request.state

    @property
    def url(self):
        if self.issue_comment:
            return u'/gitlab/{}/issues/{}#notes_{}'.format(
                self.project.path_with_namespace, self.parent_id, self.id)
        else:
            return u'/gitlab/{}/merge_requests/{}#notes_{}'.format(
                self.project.path_with_namespace, self.parent_id, self.id)

    class Meta:
        verbose_name = _('Gitlab Comments')
        verbose_name_plural = _('Gitlab Comments')