Merge branch 'master' of stigma:platforma
[redakcja.git] / apps / api / models.py
1 from django.db import models
2 from django.contrib.auth.models import User
3
4 # Create your models here.
5 class PartCache(models.Model):
6     document_id = models.CharField(max_length=255)
7     user_id = models.CharField(max_length=64, blank=True)    
8     part_id = models.CharField(max_length=255)
9
10     @classmethod
11     def update_cache(me, docid, userid, old, new):
12         old = set(old)
13         new = set(new)
14
15         related = me.objects.filter(user_id=userid, document_id=docid)
16
17         missing = old.difference(new)
18         related.filter(part_id__in=missing).delete()
19
20         created = new.difference(old)
21
22         for part in created:
23             me.objects.create(user_id=userid, document_id=docid, part_id=part)
24
25
26 class PullRequest(models.Model):
27     REQUEST_STATUSES = {
28         "N": "New",
29         "E": "Edited/Conflicting",
30         "R": "Rejected",
31         "A": "Accepted & merged",
32     }
33
34     comitter = models.ForeignKey(User) # the user who request the pull
35     comment = models.TextField() # addtional comments to the request
36
37     timestamp = models.DateTimeField(auto_now_add=True)
38
39     # document to merge
40     document = models.CharField(max_length=255)
41
42     # revision to be merged into the main branch
43     source_revision = models.CharField(max_length=40, unique=True)
44     target_revision = models.CharField(max_length=40)
45
46     # current status
47     status = models.CharField(max_length=1, choices=REQUEST_STATUSES.items())
48
49     # comment to the status change of request (if applicable)
50     response_comment = models.TextField(blank=True)
51
52     # revision number in which the changes were merged (if any)
53     merged_revision = models.CharField(max_length=40, blank=True, null=True)
54     merge_timestamp = models.DateTimeField(blank=True, null=True)
55
56     def __unicode__(self):
57         return unicode(self.comitter) + u':' + self.document
58
59
60     class Meta:
61         permissions = (           
62             ("pullrequest.can_view", "Can view pull request's contents."),
63         )
64
65
66 # This is actually an abstract Model, but if we declare
67 # it as so Django ignores the permissions :(
68 class Document(models.Model):
69     class Meta:
70         permissions = (
71             ("document.can_share", "Can share documents without pull requests."),
72             ("document.can_view_other", "Can view other's documents."),
73         )