Browse Source

Move new_revision contextmanager from tracim.model.data to tracim.model

Bastien Sevajol 9 years ago
parent
commit
c24f7acead

+ 2 - 1
tracim/tracim/controllers/__init__.py View File

@@ -16,7 +16,8 @@ from tracim.lib.predicates import current_user_is_contributor
16 16
 from tracim.lib.predicates import current_user_is_content_manager
17 17
 
18 18
 from tracim.model.auth import User
19
-from tracim.model.data import ActionDescription, new_revision
19
+from tracim.model.data import ActionDescription
20
+from tracim.model import new_revision
20 21
 from tracim.model.data import BreadcrumbItem
21 22
 from tracim.model.data import Content
22 23
 from tracim.model.data import ContentType

+ 2 - 1
tracim/tracim/controllers/content.py View File

@@ -29,7 +29,8 @@ from tracim.lib.predicates import current_user_is_content_manager
29 29
 from tracim.lib.predicates import require_current_user_is_owner
30 30
 
31 31
 from tracim.model.serializers import Context, CTX, DictLikeClass
32
-from tracim.model.data import ActionDescription, new_revision
32
+from tracim.model.data import ActionDescription
33
+from tracim.model import new_revision
33 34
 from tracim.model.data import Content
34 35
 from tracim.model.data import ContentType
35 36
 from tracim.model.data import UserRoleInWorkspace

+ 2 - 2
tracim/tracim/lib/content.py View File

@@ -18,9 +18,9 @@ from sqlalchemy.sql.elements import and_
18 18
 from tracim.lib import cmp_to_key
19 19
 from tracim.lib.notifications import NotifierFactory
20 20
 from tracim.lib.utils import SameValueError
21
-from tracim.model import DBSession
21
+from tracim.model import DBSession, new_revision
22 22
 from tracim.model.auth import User
23
-from tracim.model.data import ActionDescription, new_revision
23
+from tracim.model.data import ActionDescription
24 24
 from tracim.model.data import BreadcrumbItem
25 25
 from tracim.model.data import ContentStatus
26 26
 from tracim.model.data import ContentRevisionRO

+ 19 - 1
tracim/tracim/model/__init__.py View File

@@ -1,5 +1,6 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 """The application's model objects"""
3
+from decorator import contextmanager
3 4
 from sqlalchemy import event, inspect
4 5
 from sqlalchemy.ext.declarative import declarative_base
5 6
 from sqlalchemy.orm import scoped_session, sessionmaker
@@ -91,5 +92,22 @@ def prevent_content_revision_delete(session, flush_context, instances):
91 92
     for instance in session.deleted:
92 93
         if isinstance(instance, ContentRevisionRO) and instance.revision_id is not None:
93 94
             raise ContentRevisionDeleteError("ContentRevision is not deletable. You must make a new revision with" +
94
-                                             "is_deleted set to True. Look at tracim.model.data.new_revision context " +
95
+                                             "is_deleted set to True. Look at tracim.model.new_revision context " +
95 96
                                              "manager to make a new revision")
97
+
98
+
99
+@contextmanager
100
+def new_revision(content):
101
+    """
102
+    Prepare context to update a Content. It will add a new updatable revision to the content.
103
+    :param content: Content instance to update
104
+    :return:
105
+    """
106
+    with DBSession.no_autoflush:
107
+        try:
108
+            if inspect(content.revision).has_identity:
109
+                content.new_revision()
110
+            RevisionsIntegrity.add_to_updatable(content.revision)
111
+            yield content.revision
112
+        finally:
113
+            RevisionsIntegrity.remove_from_updatable(content.revision)

+ 3 - 21
tracim/tracim/model/data.py View File

@@ -7,7 +7,6 @@ from datetime import datetime
7 7
 import tg
8 8
 from babel.dates import format_timedelta
9 9
 from bs4 import BeautifulSoup
10
-from decorator import contextmanager
11 10
 from sqlalchemy import Column, inspect
12 11
 from sqlalchemy import ForeignKey
13 12
 from sqlalchemy import Sequence
@@ -27,7 +26,7 @@ from sqlalchemy.types import Unicode
27 26
 from tg.i18n import lazy_ugettext as l_, ugettext as _
28 27
 
29 28
 from tracim.lib.exception import ContentRevisionUpdateError
30
-from tracim.model import DeclarativeBase, DBSession, RevisionsIntegrity
29
+from tracim.model import DeclarativeBase, RevisionsIntegrity
31 30
 from tracim.model.auth import User
32 31
 
33 32
 
@@ -555,7 +554,7 @@ class ContentRevisionRO(DeclarativeBase):
555 554
                 and key in self._cloned_columns \
556 555
                 and not RevisionsIntegrity.is_updatable(self):
557 556
                 raise ContentRevisionUpdateError(
558
-                    "Can't modify revision. To work on new revision use tracim.model.data.new_revision " +
557
+                    "Can't modify revision. To work on new revision use tracim.model.new_revision " +
559 558
                     "context manager.")
560 559
 
561 560
         super().__setattr__(key, value)
@@ -602,7 +601,7 @@ class Content(DeclarativeBase):
602 601
 
603 602
     # UPDATE A CONTENT
604 603
 
605
-    To update an existing Content, you must use tracim.model.data.new_revision context manager:
604
+    To update an existing Content, you must use tracim.model.new_revision context manager:
606 605
     content = my_sontent_getter_method()
607 606
     with new_revision(content):
608 607
         content.description = 'foo bar baz'
@@ -1120,23 +1119,6 @@ class Content(DeclarativeBase):
1120 1119
         return url_template.format(wid=wid, fid=fid, ctype=ctype, cid=cid)
1121 1120
 
1122 1121
 
1123
-@contextmanager
1124
-def new_revision(content):
1125
-    """
1126
-    Prepare context to update a Content. It will add a new updatable revision to the content.
1127
-    :param content: Content instance to update
1128
-    :return:
1129
-    """
1130
-    with DBSession.no_autoflush:
1131
-        try:
1132
-            if inspect(content.revision).has_identity:
1133
-                content.new_revision()
1134
-            RevisionsIntegrity.add_to_updatable(content.revision)
1135
-            yield content.revision
1136
-        finally:
1137
-            RevisionsIntegrity.remove_from_updatable(content.revision)
1138
-
1139
-
1140 1122
 class RevisionReadStatus(DeclarativeBase):
1141 1123
 
1142 1124
     __tablename__ = 'revision_read_status'

+ 2 - 2
tracim/tracim/tests/library/test_content_api.py View File

@@ -12,11 +12,11 @@ from tracim.lib.group import GroupApi
12 12
 from tracim.lib.user import UserApi
13 13
 from tracim.lib.workspace import RoleApi
14 14
 from tracim.lib.workspace import WorkspaceApi
15
-from tracim.model import DBSession
15
+from tracim.model import DBSession, new_revision
16 16
 
17 17
 from tracim.model.auth import Group
18 18
 
19
-from tracim.model.data import ActionDescription, ContentRevisionRO, Workspace, new_revision
19
+from tracim.model.data import ActionDescription, ContentRevisionRO, Workspace
20 20
 from tracim.model.data import Content
21 21
 from tracim.model.data import ContentType
22 22
 from tracim.model.data import UserRoleInWorkspace

+ 2 - 3
tracim/tracim/tests/models/test_content.py View File

@@ -1,13 +1,12 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 from nose.tools import raises
3
-from sqlalchemy.orm import aliased
4 3
 from sqlalchemy.sql.elements import and_
5 4
 from sqlalchemy.testing import eq_
6 5
 
7 6
 from tracim.lib.content import ContentApi
8 7
 from tracim.lib.exception import ContentRevisionUpdateError
9
-from tracim.model import DBSession, User, Content
10
-from tracim.model.data import ContentRevisionRO, Workspace, ActionDescription, ContentType, new_revision
8
+from tracim.model import DBSession, User, Content, new_revision
9
+from tracim.model.data import ContentRevisionRO, Workspace, ActionDescription, ContentType
11 10
 from tracim.tests import TestStandard
12 11
 
13 12