You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2014/09/18 15:50:13 UTC

git commit: [#7513] ticket:657 Add a script to change wiki page titles with / in it

Repository: allura
Updated Branches:
  refs/heads/je/42cc_7513 [created] 3e6a76ced


[#7513] ticket:657 Add a script to change wiki page titles with / in it


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

Branch: refs/heads/je/42cc_7513
Commit: 3e6a76ced7803710c15ac3e4c9229937bf6f5649
Parents: ceb0d22
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Sep 18 16:24:20 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Thu Sep 18 16:24:20 2014 +0300

----------------------------------------------------------------------
 scripts/fix-wiki-page-names.py | 92 +++++++++++++++++++++++++++++++++++++
 1 file changed, 92 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/3e6a76ce/scripts/fix-wiki-page-names.py
----------------------------------------------------------------------
diff --git a/scripts/fix-wiki-page-names.py b/scripts/fix-wiki-page-names.py
new file mode 100644
index 0000000..b53e708
--- /dev/null
+++ b/scripts/fix-wiki-page-names.py
@@ -0,0 +1,92 @@
+#       Licensed to the Apache Software Foundation (ASF) under one
+#       or more contributor license agreements.  See the NOTICE file
+#       distributed with this work for additional information
+#       regarding copyright ownership.  The ASF licenses this file
+#       to you under the Apache License, Version 2.0 (the
+#       "License"); you may not use this file except in compliance
+#       with the License.  You may obtain a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#       Unless required by applicable law or agreed to in writing,
+#       software distributed under the License is distributed on an
+#       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#       KIND, either express or implied.  See the License for the
+#       specific language governing permissions and limitations
+#       under the License.
+
+"""Rename page/title to page-title"""
+
+import sys
+import logging
+
+from ming.orm import session
+
+from allura import model as M
+from allura.lib import helpers as h
+from allura.lib.utils import chunked_find
+from forgewiki.model import Page
+
+
+log = logging.getLogger(__name__)
+
+
+def error(msg):
+    log.error(msg)
+    sys.exit(1)
+
+
+def main(opts):
+    if opts.project and not opts.nbhd:
+        error('Specify neighborhood')
+    p_query = {}
+    if opts.nbhd:
+        nbhd = M.Neighborhood.query.get(url_prefix=opts.nbhd)
+        if not nbhd:
+            error("Can't find such neighborhood")
+        p_query['neighborhood_id'] = nbhd._id
+        if opts.project:
+            p_query['shortname'] = opts.project
+
+        projects = M.Project.query.find(p_query).all()
+        if not projects:
+            error('No project matches given parameters')
+
+        app_config_ids = []
+        for p in projects:
+            for ac in p.app_configs:
+                if ac.tool_name.lower() == 'wiki':
+                    app_config_ids.append(ac._id)
+
+        if not app_config_ids:
+            error('No wikis in given projects')
+        query = {'app_config_id': {'$in': app_config_ids}}
+    else:
+        query = {}
+
+    M.artifact_orm_session._get().skip_last_updated = True
+    try:
+        for chunk in chunked_find(Page, query):
+            for page in chunk:
+                if '/' in page.title:
+                    log.info('Found {} in {}'.format(page.title, page.app_config.url()))
+                    page.title = page.title.replace('/', '-')
+                    with h.push_context(page.app_config.project._id, app_config_id=page.app_config_id):
+                        session(page).flush(page)
+    finally:
+        M.artifact_orm_session._get().skip_last_updated = False
+
+
+def parse_options():
+    import argparse
+    parser = argparse.ArgumentParser(description=__doc__,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('-n', '--nbhd', default=None, help='Neighborhood url_prefix. E.g. /p/. '
+                        'Default is all neighborhoods.')
+    parser.add_argument('-p', '--project', default=None, help='Project shortname. '
+                        'Default is all projects in given neighborhood.')
+    return parser.parse_args()
+
+
+if __name__ == '__main__':
+    main(parse_options())