| author | ymh <ymh.work@gmail.com> |
| Mon, 20 Jun 2016 17:50:47 +0200 | |
| changeset 616 | 33fdb6f8164c |
| parent 615 | f3875fbe206a |
| child 618 | 3051b847c124 |
| 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): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
28 |
return self.renkans.all().count() |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
29 |
|
|
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
|
30 |
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
|
31 |
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
|
32 |
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
|
33 |
('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
|
34 |
) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
35 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
36 |
|
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
37 |
class RenkanManager(models.Manager): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
38 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
39 |
@transaction.atomic |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
40 |
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
|
41 |
new_renkan = Renkan() |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
42 |
new_renkan.creator = creator |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
43 |
new_renkan_workspace_guid = None |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
44 |
new_renkan_title = title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
45 |
new_renkan_content = content |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
46 |
if workspace is not None: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
47 |
new_renkan.workspace = workspace |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
48 |
new_renkan_workspace_guid = workspace.workspace_guid |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
49 |
if source_revision is not None: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
50 |
new_renkan.source_revision = source_revision |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
51 |
if not title: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
52 |
new_renkan_title = source_revision.title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
53 |
new_renkan_content = source_revision.content |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
54 |
new_renkan.save() |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
55 |
creation_date = timezone.now() |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
56 |
initial_revision = Revision(parent_renkan=new_renkan) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
57 |
initial_revision.title = new_renkan_title if new_renkan_title else "Untitled Renkan" |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
58 |
initial_revision.creation_date = creation_date |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
59 |
initial_revision.modification_date = creation_date |
|
609
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 |
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
|
63 |
new_renkan_content_dict = json.loads(new_renkan.validate_json_content(new_renkan_content)) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
64 |
new_renkan_content_dict["created"] = str(creation_date) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
65 |
new_renkan_content_dict["updated"] = str(creation_date) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
66 |
else: |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
67 |
new_renkan_content_dict = { |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
68 |
"id": str(new_renkan.renkan_guid), |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
69 |
"title": initial_revision.title, |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
70 |
"description": "", |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
71 |
"created": str(creation_date), |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
72 |
"updated": str(creation_date), |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
73 |
"edges": [], |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
74 |
"nodes": [], |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
75 |
"users": [], |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
76 |
"space_id": str(new_renkan_workspace_guid), |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
77 |
"views": [] |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
78 |
} |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
79 |
initial_revision.content = json.dumps(new_renkan_content_dict) |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
80 |
initial_revision.save() |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
81 |
return new_renkan |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
82 |
|
|
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
|
83 |
class Renkan(models.Model): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
84 |
|
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
85 |
renkan_guid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, blank=False, null=False) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
86 |
workspace = models.ForeignKey('renkanmanager.Workspace', null=True, blank=True, on_delete=models.CASCADE, related_name="renkans") |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
87 |
current_revision = models.ForeignKey('renkanmanager.Revision', null=True, blank=True, on_delete=models.SET_NULL, related_name='+') |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
88 |
source_revision = models.ForeignKey('renkanmanager.Revision', null=True, blank=True, on_delete=models.SET_NULL, related_name='copies') |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
89 |
|
|
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
|
90 |
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
|
91 |
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
|
92 |
state = models.IntegerField(default=1) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
93 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
94 |
objects = RenkanManager() |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
95 |
|
|
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
|
96 |
@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
|
97 |
def revision_count(self): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
98 |
return self.revisions.all().count() |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
99 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
100 |
@property |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
101 |
def workspace_guid(self): |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
102 |
return self.workspace and self.workspace.workspace_guid |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
103 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
104 |
@property |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
105 |
def current_revision_guid(self): |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
106 |
return self.current_revision and self.current_revision.revision_guid |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
107 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
108 |
@property |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
109 |
def source_revision_guid(self): |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
110 |
return self.source_revision and self.source_revision.revision_guid |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
111 |
|
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
112 |
|
|
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
|
113 |
@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
|
114 |
def is_copy(self): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
115 |
return bool(self.source_revision) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
116 |
|
|
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
|
117 |
# 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
|
118 |
@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
|
119 |
def title(self): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
120 |
return self.current_revision and self.current_revision.title or '' |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
121 |
|
|
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
|
122 |
# 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
|
123 |
@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
|
124 |
def content(self): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
125 |
return self.current_revision and self.current_revision.content or '' |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
126 |
|
|
611
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
127 |
def __str__(self): |
|
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
128 |
return self.renkan_guid |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
129 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
130 |
@transaction.atomic |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
131 |
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
|
132 |
""" |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
133 |
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
|
134 |
Timestamp must be the current revision modification_date. |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
135 |
""" |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
136 |
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
|
137 |
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
|
138 |
raise ValidationError(_("Cannot save, provided timestamp is invalid")) |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
139 |
else: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
140 |
dt_timestamp = dateparse.parse_datetime(timestamp) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
141 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
142 |
if create_new_revision: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
143 |
revision_to_update = Revision(parent_renkan=self) |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
144 |
revision_to_update.creator = updator |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
145 |
else: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
146 |
revision_to_update = Revision.objects.select_for_update().get(id=self.current_revision.id) |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
147 |
|
|
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
|
148 |
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
|
149 |
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
|
150 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
151 |
# 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
|
152 |
if title: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
153 |
updated_title = title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
154 |
updated_content_dict["title"] = title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
155 |
# 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
|
156 |
else: |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
157 |
updated_title = updated_content_dict["title"] |
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
158 |
|
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
159 |
revision_to_update.modification_date = timezone.now() |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
160 |
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
|
161 |
updated_content = json.dumps(updated_content_dict) |
|
609
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
162 |
revision_to_update.title = updated_title |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
163 |
revision_to_update.content = updated_content |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
164 |
if dt_timestamp == revision_to_update.modification_date: |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
165 |
revision_to_update.modification_date += datetime.resolution |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
166 |
revision_to_update.last_updated_by = updator |
|
854a027c80ff
models refactoring to use ForeignKey fields + associated migrations
durandn
parents:
589
diff
changeset
|
167 |
revision_to_update.save() |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
168 |
self.save() |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
169 |
|
|
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
|
170 |
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
|
171 |
""" |
|
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
|
172 |
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
|
173 |
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
|
174 |
|
|
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
|
175 |
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
|
176 |
""" |
|
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
|
177 |
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
|
178 |
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
|
179 |
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
|
180 |
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
|
181 |
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
|
182 |
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
|
183 |
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
|
184 |
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
|
185 |
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
|
186 |
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
|
187 |
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
|
188 |
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
|
189 |
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
|
190 |
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
|
191 |
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
|
192 |
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
|
193 |
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
|
194 |
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
|
195 |
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
|
196 |
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
|
197 |
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
|
198 |
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
|
199 |
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
|
200 |
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
|
201 |
content_to_validate_dict["users"] = [] |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
202 |
|
|
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
|
203 |
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
|
204 |
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
|
205 |
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
|
206 |
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
|
207 |
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
|
208 |
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
|
209 |
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
|
210 |
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
|
211 |
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
|
212 |
|
|
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
|
213 |
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
|
214 |
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
|
215 |
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
|
216 |
('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
|
217 |
) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
218 |
|
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
219 |
|
|
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
|
220 |
class Revision(models.Model): |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
221 |
|
|
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
222 |
revision_guid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, blank=False, null=False) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
223 |
parent_renkan = models.ForeignKey('renkanmanager.Renkan', on_delete=models.CASCADE, related_name="revisions") |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
224 |
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
|
225 |
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
|
226 |
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
|
227 |
last_updated_by = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="revision_last_updated_by") |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
228 |
creation_date = models.DateTimeField(auto_now_add=True, editable=False) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
229 |
modification_date = models.DateTimeField() |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
230 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
231 |
@property |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
232 |
def parent_renkan_guid(self): |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
233 |
return self.parent_renkan and self.parent_renkan.renkan_guid |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
234 |
|
|
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
|
235 |
@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
|
236 |
def is_current_revision(self): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
237 |
return self == self.parent_renkan.current_revision |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
238 |
|
|
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
|
239 |
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
|
240 |
app_label = 'renkanmanager' |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
241 |
ordering = ['-modification_date'] |
|
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
|
242 |
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
|
243 |
('view_revision', 'Can view revision'), |
|
614
23416a833ca8
Change guid fields to more optimal type + migration
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
244 |
) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
245 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
246 |
def __str__(self): |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
614
diff
changeset
|
247 |
return str(self.revision_guid) |