You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2015/05/27 21:42:00 UTC

[4/7] allura git commit: [#1731] ticket:775 Add --dry-run and --tool to script

[#1731] ticket:775 Add --dry-run and --tool to script


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/7b57bb6e
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/7b57bb6e
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/7b57bb6e

Branch: refs/heads/master
Commit: 7b57bb6e10803ba921767523ad60bdb4ca9bd004
Parents: e51d629
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon May 25 14:13:40 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Mon May 25 14:13:40 2015 +0000

----------------------------------------------------------------------
 .../allura/scripts/create_deleted_comments.py   | 44 ++++++++++++++++++--
 1 file changed, 40 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/7b57bb6e/Allura/allura/scripts/create_deleted_comments.py
----------------------------------------------------------------------
diff --git a/Allura/allura/scripts/create_deleted_comments.py b/Allura/allura/scripts/create_deleted_comments.py
index b0e7260..509752c 100644
--- a/Allura/allura/scripts/create_deleted_comments.py
+++ b/Allura/allura/scripts/create_deleted_comments.py
@@ -15,6 +15,7 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
+import sys
 import argparse
 import logging
 
@@ -22,7 +23,7 @@ from ming.odm import session
 from pylons import tmpl_context as c
 
 from allura.scripts import ScriptTask
-from allura.model import Post
+from allura import model as M
 from allura.lib.utils import chunked_find
 from forgediscussion.model import ForumPost
 
@@ -34,11 +35,14 @@ class CreateDeletedComments(ScriptTask):
 
     @classmethod
     def execute(cls, options):
-        models = [Post, ForumPost]
+        models = [M.Post, ForumPost]
+        app_config_id = cls.get_tool_id(options.tool)
         # Find all posts that have parent_id, but does not have actual parent
         # and create fake parent for them
         for model in models:
-            for chunk in chunked_find(model, {'parent_id': {'$ne': None}}):
+            q = {'parent_id': {'$ne': None},
+                 'app_config_id': app_config_id}
+            for chunk in chunked_find(model, q):
                 for post in chunk:
                     if not post.parent:
                         log.info('Creating deleted parent for %s %s',
@@ -59,7 +63,27 @@ class CreateDeletedComments(ScriptTask):
                             slug=slug,
                             full_slug=full_slug,
                         )
-                        session(deleted_post).flush(deleted_post)
+                        if options.dry_run:
+                            session(deleted_post).expunge(deleted_post)
+                        else:
+                            session(deleted_post).flush(deleted_post)
+
+    @classmethod
+    def get_tool_id(cls, tool):
+        _n, _p, _mount = tool.split('/')
+        n = M.Neighborhood.query.get(url_prefix='/{}/'.format(_n))
+        if not n:
+            log.error('Can not find neighborhood %s', _n)
+            sys.exit(1)
+        p = M.Project.query.get(neighborhood_id=n._id, shortname=_p)
+        if not p:
+            log.error('Can not find project %s', _p)
+            sys.exit(1)
+        t = p.app_instance(_mount)
+        if not t:
+            log.error('Can not find tool with mount point %s', _mount)
+            sys.exit(1)
+        return t.config._id
 
     @classmethod
     def parser(cls):
@@ -67,6 +91,18 @@ class CreateDeletedComments(ScriptTask):
             description='Create comments marked as deleted in place of '
                         'actually deleted parent comments (ticket:#1731)'
         )
+        parser.add_argument(
+            '--dry-run',
+            action='store_true',
+            dest='dry_run',
+            default=False,
+            help='Show comments that will be created, but do not actually '
+                 'create anything',
+        )
+        parser.add_argument(
+            '-t', '--tool',
+            required=True,
+            help='Create comments only in specified tool, e.g. p/test/wiki')
         return parser