| author | ymh <ymh.work@gmail.com> |
| Wed, 15 Jun 2016 16:31:43 +0200 | |
| changeset 614 | 23416a833ca8 |
| parent 611 | f0f07e2b841f |
| child 615 | f3875fbe206a |
| permissions | -rw-r--r-- |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
1 |
''' |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
2 |
Created on Jul 17, 2014 |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
3 |
Reworked in December, 2015 |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
4 |
|
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
5 |
@author: tc, nd |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
6 |
''' |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
7 |
import uuid, logging, json, datetime |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
8 |
from django.conf import settings |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
9 |
from django.db import models, transaction |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
10 |
from django.core.exceptions import ValidationError |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
11 |
from django.utils import timezone, dateparse |
|
611
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
12 |
from django.utils.translation import ugettext_lazy as _ |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
13 |
|
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
14 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
15 |
|
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
16 |
logger = logging.getLogger(__name__) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
17 |
auth_user_model = getattr(settings, 'AUTH_USER_MODEL', 'auth.User') |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
18 |
|
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
19 |
class Workspace(models.Model): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
20 |
|
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
21 |
workspace_guid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, blank=False, null=False) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
22 |
title = models.CharField(max_length=1024, null=True) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
23 |
creator = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="workspace_creator") |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
24 |
creation_date = models.DateTimeField(auto_now_add=True) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
25 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
26 |
@property |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
27 |
def renkan_count(self): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
28 |
#TODO: check count and related objects |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
29 |
#return Renkan.objects.filter(workspace__workspace_guid=self.workspace_guid).count() |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
30 |
return Renkan.objects.filter(workspace_guid=self.workspace_guid).count() |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
31 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
32 |
class Meta: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
33 |
app_label = 'renkanmanager' |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
34 |
permissions = ( |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
35 |
('view_workspace', 'Can view workspace'), |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
36 |
) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
37 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
38 |
|
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
39 |
class RenkanManager(models.Manager): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
40 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
41 |
@transaction.atomic |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
42 |
def create_renkan(self, creator, title='', content='', source_revision=None, workspace = None): |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
43 |
new_renkan = Renkan() |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
44 |
new_renkan.creator = creator |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
45 |
#TODO: !!! new_renkan_workspace_guid is not set on the new renkan ! only on the content ! |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
46 |
new_renkan_workspace_guid = "" |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
47 |
new_renkan_title = title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
48 |
new_renkan_content = content |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
49 |
if workspace is not None: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
50 |
new_renkan.workspace = workspace |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
51 |
new_renkan_workspace_guid = workspace.workspace_guid |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
52 |
if source_revision is not None: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
53 |
new_renkan.source_revision = source_revision |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
54 |
if not title: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
55 |
new_renkan_title = source_revision.title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
56 |
new_renkan_content = source_revision.content |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
57 |
new_renkan.save() |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
58 |
initial_revision = Revision(parent_renkan=new_renkan) |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
59 |
initial_revision.modification_date = timezone.now() |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
60 |
initial_revision.creator = creator |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
61 |
initial_revision.last_updated_by = creator |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
62 |
initial_revision.save() # saving once to set the creation date as we need it to fill the json content |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
63 |
if initial_revision.modification_date != initial_revision.creation_date: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
64 |
initial_revision.modification_date = initial_revision.creation_date |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
65 |
initial_revision.title = new_renkan_title if new_renkan_title else "Untitled Renkan" |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
66 |
if new_renkan_content: |
|
610
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
67 |
new_renkan_content_dict = json.loads(new_renkan.validate_json_content(new_renkan_content)) |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
68 |
new_renkan_content_dict["created"] = str(initial_revision.creation_date) |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
69 |
new_renkan_content_dict["updated"] = str(initial_revision.modification_date) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
70 |
else: |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
71 |
new_renkan_content_dict = { |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
72 |
"id": str(new_renkan.renkan_guid), |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
73 |
"title": initial_revision.title, |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
74 |
"description": "", |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
75 |
"created": str(initial_revision.creation_date), |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
76 |
"updated": str(initial_revision.modification_date), |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
77 |
"edges": [], |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
78 |
"nodes": [], |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
79 |
"users": [], |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
80 |
"space_id": new_renkan_workspace_guid, |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
81 |
"views": [] |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
82 |
} |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
83 |
initial_revision.content = json.dumps(new_renkan_content_dict) |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
84 |
initial_revision.save() |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
85 |
return new_renkan |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
86 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
87 |
class Renkan(models.Model): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
88 |
|
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
89 |
renkan_guid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, blank=False, null=False) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
90 |
workspace_guid = models.CharField(max_length=256, blank=True, null=True) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
91 |
current_revision_guid = models.CharField(max_length=256, blank=True, null=True) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
92 |
source_revision_guid = models.CharField(max_length=256, blank=True, null=True) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
93 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
94 |
creator = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="renkan_creator") |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
95 |
creation_date = models.DateTimeField(auto_now_add=True) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
96 |
state = models.IntegerField(default=1) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
97 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
98 |
objects = RenkanManager() |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
99 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
100 |
@property |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
101 |
def revision_count(self): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
102 |
#TODO: check related object count |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
103 |
return Revision.objects.filter(parent_renkan_guid=self.renkan_guid).count() |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
104 |
#return Revision.objects.filter(parent_renkan__renkan_guid=self.renkan_guid).count() |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
105 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
106 |
@property |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
107 |
def is_copy(self): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
108 |
#return bool(self.source_revision) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
109 |
return bool(self.source_revision_guid) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
110 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
111 |
# Current revision object or None if there is none |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
112 |
# @property |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
113 |
# def current_revision(self): |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
114 |
# return Revision.objects.filter(parent_renkan__renkan_guid=self.renkan_guid).order_by('-creation_date').first() |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
115 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
116 |
# Current revision title |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
117 |
@property |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
118 |
def title(self): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
119 |
current_revision = Revision.objects.get(revision_guid = self.current_revision_guid) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
120 |
return current_revision.title |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
121 |
#TODO: not good -> 2 requests |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
122 |
#if self.current_revision: |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
123 |
# return self.current_revision.title |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
124 |
#else: |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
125 |
# return '' |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
126 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
127 |
# Current revision content |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
128 |
@property |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
129 |
def content(self): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
130 |
#TODO: not good -> 2 requests |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
131 |
current_revision = Revision.objects.get(revision_guid = self.current_revision_guid) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
132 |
return current_revision.content |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
133 |
#if self.current_revision: |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
134 |
# return self.current_revision.content |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
135 |
#else: |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
136 |
# return '' |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
137 |
|
|
611
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
138 |
def __unicode__(self): |
|
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
139 |
return self.renkan_guid |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
140 |
|
|
611
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
141 |
def __str__(self): |
|
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
142 |
return self.renkan_guid |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
143 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
144 |
@transaction.atomic |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
145 |
def save_renkan(self, updator, timestamp="", title="", content="", create_new_revision=False): |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
146 |
""" |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
147 |
Saves over current revision or saves a new revision entirely. |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
148 |
Timestamp must be the current revision modification_date. |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
149 |
""" |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
150 |
if (not timestamp) or ((self.current_revision is not None) and dateparse.parse_datetime(timestamp) < self.current_revision.modification_date): |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
151 |
logger.error("SAVING RENKAN: provided timestamp is %r, which isn't current revision modification_date %r", timestamp, self.current_revision.modification_date) |
|
611
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
152 |
raise ValidationError(_("Cannot save, provided timestamp is invalid")) |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
153 |
else: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
154 |
dt_timestamp = dateparse.parse_datetime(timestamp) |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
155 |
self.save() |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
156 |
if create_new_revision: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
157 |
revision_to_update = Revision(parent_renkan=self) |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
158 |
revision_to_update.creator = updator |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
159 |
else: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
160 |
revision_to_update = Revision.objects.select_for_update().get(revision_guid=self.current_revision.revision_guid) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
161 |
|
|
610
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
162 |
updated_content = self.validate_json_content(content) if content else current_revision.content |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
163 |
updated_content_dict = json.loads(updated_content) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
164 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
165 |
# If title is passed as arg to the method, update the title in the json |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
166 |
if title: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
167 |
updated_title = title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
168 |
updated_content_dict["title"] = title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
169 |
# If it is not, we use the one in the json instead |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
170 |
else: |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
171 |
updated_title = updated_content_dict["title"] |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
172 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
173 |
revision_to_update.modification_date = timezone.now() |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
174 |
updated_content_dict["updated"] = str(revision_to_update.modification_date) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
175 |
updated_content = json.dumps(updated_content_dict) |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
176 |
revision_to_update.title = updated_title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
177 |
revision_to_update.content = updated_content |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
178 |
if dt_timestamp == revision_to_update.modification_date: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
179 |
revision_to_update.modification_date += datetime.resolution |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
180 |
revision_to_update.last_updated_by = updator |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
181 |
revision_to_update.save() |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
182 |
|
|
610
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
183 |
def validate_json_content(self, content): |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
184 |
""" |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
185 |
Checks that the json content is valid (keys and structures), raise a ValidationError if format is wrong or value is wrong (for ids), |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
186 |
if a key is missing, autocompletes with the empty default value |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
187 |
|
|
610
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
188 |
Returns the validated json string |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
189 |
""" |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
190 |
try: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
191 |
content_to_validate_dict = json.loads(content) |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
192 |
except ValueError: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
193 |
raise ValidationError("Provided content to create Renkan is not a JSON-serializable") |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
194 |
if "id" not in content_to_validate_dict or content_to_validate_dict["id"] == "" : |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
195 |
content_to_validate_dict["id"] = str(self.renkan_guid) |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
196 |
if "title" not in content_to_validate_dict: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
197 |
content_to_validate_dict["title"] = "" |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
198 |
if "description" not in content_to_validate_dict: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
199 |
content_to_validate_dict["description"] = "" |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
200 |
if "created" not in content_to_validate_dict: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
201 |
content_to_validate_dict["description"] = "" |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
202 |
if "updated" not in content_to_validate_dict: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
203 |
content_to_validate_dict["description"] = "" |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
204 |
expected_workspace_id = str(self.workspace.workspace_guid) if self.workspace is not None else "" |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
205 |
if "space_id" not in content_to_validate_dict: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
206 |
content_to_validate_dict["space_id"] = expected_workspace_id |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
207 |
if "nodes" not in content_to_validate_dict: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
208 |
content_to_validate_dict["nodes"] = [] |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
209 |
if "edges" not in content_to_validate_dict: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
210 |
content_to_validate_dict["edges"] = [] |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
211 |
if "views" not in content_to_validate_dict: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
212 |
content_to_validate_dict["views"] = [] |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
213 |
if "users" not in content_to_validate_dict: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
214 |
content_to_validate_dict["users"] = [] |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
215 |
|
|
610
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
216 |
if type(content_to_validate_dict["nodes"]) is not list: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
217 |
raise ValidationError("Provided content has an invalid 'nodes' key: not a list") |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
218 |
if type(content_to_validate_dict["edges"]) is not list: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
219 |
raise ValidationError("Provided content has an invalid 'edges' key: not a list") |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
220 |
if type(content_to_validate_dict["views"]) is not list: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
221 |
raise ValidationError("Provided content has an invalid 'views' key: not a list") |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
222 |
if type(content_to_validate_dict["users"]) is not list: |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
223 |
raise ValidationError("Provided content has an invalid 'users' key: not a list") |
|
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
609
diff
changeset
|
224 |
return json.dumps(content_to_validate_dict) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
225 |
|
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
226 |
#TODO: |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
227 |
# @transaction.atomic |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
228 |
# def delete(self): |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
229 |
# """ |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
230 |
# Deleting a renkan also deletes every related revision |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
231 |
# """ |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
232 |
# renkan_revisions = Revision.objects.filter(parent_renkan__renkan_guid = self.renkan_guid) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
233 |
# for child_revision in renkan_revisions: |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
234 |
# child_revision.delete() |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
235 |
# super(Renkan, self).delete() |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
236 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
237 |
class Meta: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
238 |
app_label = 'renkanmanager' |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
239 |
permissions = ( |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
240 |
('view_renkan', 'Can view renkan'), |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
241 |
) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
242 |
|
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
243 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
244 |
class Revision(models.Model): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
245 |
|
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
246 |
revision_guid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, blank=False, null=False) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
247 |
parent_renkan_guid = models.CharField(max_length=256) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
248 |
#parent_renkan = models.ForeignKey('Renkan', null=False, blank=False, to_field='renkan_guid') |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
249 |
title = models.CharField(max_length=1024, null=True, blank=True) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
250 |
content = models.TextField(blank=True, null=True) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
251 |
creator = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="revision_creator") |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
252 |
last_updated_by = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="revision_last_updated_by") |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
253 |
creation_date = models.DateTimeField(auto_now_add=True) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
254 |
modification_date = models.DateTimeField(auto_now=True) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
255 |
#modification_date = models.DateTimeField() |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
256 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
257 |
@property |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
258 |
def is_current_revision(self): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
259 |
try: |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
260 |
parent_project = Renkan.objects.get(renkan_guid=self.parent_renkan_guid) |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
261 |
except Renkan.DoesNotExist: # SHOULD NOT HAPPEN! |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
262 |
raise Http404 |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
263 |
return parent_project.current_revision_guid == self.revision_guid |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
264 |
# No need to check if parent_renkan.current_revision is not None, as it won't be if we're calling from a revision |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
265 |
#return self.parent_renkan.current_revision.revision_guid == self.revision_guid |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
266 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
267 |
class Meta: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
268 |
app_label = 'renkanmanager' |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
269 |
permissions = ( |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
270 |
('view_revision', 'Can view revision'), |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
271 |
) |