瀏覽代碼

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

Bastien Sevajol 9 年之前
父節點
當前提交
c24f7acead

+ 2 - 1
tracim/tracim/controllers/__init__.py 查看文件

16
 from tracim.lib.predicates import current_user_is_content_manager
16
 from tracim.lib.predicates import current_user_is_content_manager
17
 
17
 
18
 from tracim.model.auth import User
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
 from tracim.model.data import BreadcrumbItem
21
 from tracim.model.data import BreadcrumbItem
21
 from tracim.model.data import Content
22
 from tracim.model.data import Content
22
 from tracim.model.data import ContentType
23
 from tracim.model.data import ContentType

+ 2 - 1
tracim/tracim/controllers/content.py 查看文件

29
 from tracim.lib.predicates import require_current_user_is_owner
29
 from tracim.lib.predicates import require_current_user_is_owner
30
 
30
 
31
 from tracim.model.serializers import Context, CTX, DictLikeClass
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
 from tracim.model.data import Content
34
 from tracim.model.data import Content
34
 from tracim.model.data import ContentType
35
 from tracim.model.data import ContentType
35
 from tracim.model.data import UserRoleInWorkspace
36
 from tracim.model.data import UserRoleInWorkspace

+ 2 - 2
tracim/tracim/lib/content.py 查看文件

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

+ 19 - 1
tracim/tracim/model/__init__.py 查看文件

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
 """The application's model objects"""
2
 """The application's model objects"""
3
+from decorator import contextmanager
3
 from sqlalchemy import event, inspect
4
 from sqlalchemy import event, inspect
4
 from sqlalchemy.ext.declarative import declarative_base
5
 from sqlalchemy.ext.declarative import declarative_base
5
 from sqlalchemy.orm import scoped_session, sessionmaker
6
 from sqlalchemy.orm import scoped_session, sessionmaker
91
     for instance in session.deleted:
92
     for instance in session.deleted:
92
         if isinstance(instance, ContentRevisionRO) and instance.revision_id is not None:
93
         if isinstance(instance, ContentRevisionRO) and instance.revision_id is not None:
93
             raise ContentRevisionDeleteError("ContentRevision is not deletable. You must make a new revision with" +
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
                                              "manager to make a new revision")
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 查看文件

7
 import tg
7
 import tg
8
 from babel.dates import format_timedelta
8
 from babel.dates import format_timedelta
9
 from bs4 import BeautifulSoup
9
 from bs4 import BeautifulSoup
10
-from decorator import contextmanager
11
 from sqlalchemy import Column, inspect
10
 from sqlalchemy import Column, inspect
12
 from sqlalchemy import ForeignKey
11
 from sqlalchemy import ForeignKey
13
 from sqlalchemy import Sequence
12
 from sqlalchemy import Sequence
27
 from tg.i18n import lazy_ugettext as l_, ugettext as _
26
 from tg.i18n import lazy_ugettext as l_, ugettext as _
28
 
27
 
29
 from tracim.lib.exception import ContentRevisionUpdateError
28
 from tracim.lib.exception import ContentRevisionUpdateError
30
-from tracim.model import DeclarativeBase, DBSession, RevisionsIntegrity
29
+from tracim.model import DeclarativeBase, RevisionsIntegrity
31
 from tracim.model.auth import User
30
 from tracim.model.auth import User
32
 
31
 
33
 
32
 
555
                 and key in self._cloned_columns \
554
                 and key in self._cloned_columns \
556
                 and not RevisionsIntegrity.is_updatable(self):
555
                 and not RevisionsIntegrity.is_updatable(self):
557
                 raise ContentRevisionUpdateError(
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
                     "context manager.")
558
                     "context manager.")
560
 
559
 
561
         super().__setattr__(key, value)
560
         super().__setattr__(key, value)
602
 
601
 
603
     # UPDATE A CONTENT
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
     content = my_sontent_getter_method()
605
     content = my_sontent_getter_method()
607
     with new_revision(content):
606
     with new_revision(content):
608
         content.description = 'foo bar baz'
607
         content.description = 'foo bar baz'
1120
         return url_template.format(wid=wid, fid=fid, ctype=ctype, cid=cid)
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
 class RevisionReadStatus(DeclarativeBase):
1122
 class RevisionReadStatus(DeclarativeBase):
1141
 
1123
 
1142
     __tablename__ = 'revision_read_status'
1124
     __tablename__ = 'revision_read_status'

+ 2 - 2
tracim/tracim/tests/library/test_content_api.py 查看文件

12
 from tracim.lib.user import UserApi
12
 from tracim.lib.user import UserApi
13
 from tracim.lib.workspace import RoleApi
13
 from tracim.lib.workspace import RoleApi
14
 from tracim.lib.workspace import WorkspaceApi
14
 from tracim.lib.workspace import WorkspaceApi
15
-from tracim.model import DBSession
15
+from tracim.model import DBSession, new_revision
16
 
16
 
17
 from tracim.model.auth import Group
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
 from tracim.model.data import Content
20
 from tracim.model.data import Content
21
 from tracim.model.data import ContentType
21
 from tracim.model.data import ContentType
22
 from tracim.model.data import UserRoleInWorkspace
22
 from tracim.model.data import UserRoleInWorkspace

+ 2 - 3
tracim/tracim/tests/models/test_content.py 查看文件

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
 from nose.tools import raises
2
 from nose.tools import raises
3
-from sqlalchemy.orm import aliased
4
 from sqlalchemy.sql.elements import and_
3
 from sqlalchemy.sql.elements import and_
5
 from sqlalchemy.testing import eq_
4
 from sqlalchemy.testing import eq_
6
 
5
 
7
 from tracim.lib.content import ContentApi
6
 from tracim.lib.content import ContentApi
8
 from tracim.lib.exception import ContentRevisionUpdateError
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
 from tracim.tests import TestStandard
10
 from tracim.tests import TestStandard
12
 
11
 
13
 
12