Also import parent wiki pages.
1.1 --- a/osdrawer/migration/wiki.py Thu Jan 06 10:53:23 2011 +0100
1.2 +++ b/osdrawer/migration/wiki.py Thu Jan 06 10:59:49 2011 +0100
1.3 @@ -18,90 +18,103 @@
1.4 except Project.DoesNotExist:
1.5 raise Exception, "Cannot import wiki entry #%d: " \
1.6 "project identifier \"%s\" not found" % (record["id"], record["identifier"])
1.7 - else:
1.8 - # Create or updatw Wiki
1.9 + # Create or updatw Wiki
1.10 + try:
1.11 + wiki = Wiki.objects.get(project=project)
1.12 + except Wiki.DoesNotExist:
1.13 + wiki = Wiki(project=project)
1.14 + wiki.start_page = record["start_page"]
1.15 + wiki.status = record["status"]
1.16 + wiki.save()
1.17 + # Add pages
1.18 + cmd = "SELECT id, title, created_on, protected, parent_id FROM wiki_pages " \
1.19 + "WHERE wiki_id = %d ORDER BY id ASC" % record["id"]
1.20 + page_cursor = conn.cursor()
1.21 + page_cursor.execute(cmd)
1.22 + page_recs = page_cursor.fetchall()
1.23 + for page_rec in page_recs:
1.24 try:
1.25 - wiki = Wiki.objects.get(project=project)
1.26 - except Wiki.DoesNotExist:
1.27 - wiki = Wiki(project=project)
1.28 - wiki.start_page = record["start_page"]
1.29 - wiki.status = record["status"]
1.30 - wiki.save()
1.31 - # Add pages
1.32 - cmd = "SELECT id, title, created_on, protected FROM wiki_pages " \
1.33 - "WHERE id = %d" % record["id"]
1.34 - page_cursor = conn.cursor()
1.35 - page_cursor.execute(cmd)
1.36 - page_recs = page_cursor.fetchall()
1.37 - for page_rec in page_recs:
1.38 + page = WikiPage.objects.get(wiki=wiki, title=page_rec["title"])
1.39 + except WikiPage.DoesNotExist:
1.40 + page = WikiPage(wiki=wiki, title=page_rec["title"])
1.41 + page.date_created = page_rec["created_on"]
1.42 + page.protected = page_rec["protected"]
1.43 + if page_rec["parent_id"] is not None:
1.44 + # Find the parent page
1.45 + cmd = "SELECT title FROM wiki_pages WHERE id = %d" % page_rec["parent_id"]
1.46 + parent_page_cursor = conn.cursor()
1.47 + parent_page_cursor.execute(cmd)
1.48 + parent_recs = parent_page_cursor.fetchall()
1.49 + parent_page_cursor.close()
1.50 try:
1.51 - page = WikiPage.objects.get(wiki=wiki, title=page_rec["title"])
1.52 + parent_page = WikiPage.objects.get(wiki=wiki, title=parent_recs[0]["title"])
1.53 except WikiPage.DoesNotExist:
1.54 - page = WikiPage(wiki=wiki, title=page_rec["title"])
1.55 - page.date_created = page_rec["created_on"]
1.56 - page.protected = page_rec["protected"]
1.57 - page.save()
1.58 - # Add content
1.59 - cmd = "SELECT c.id, c.text, c.comments, c.updated_on, c.version, u.login FROM wiki_contents c " \
1.60 - "LEFT JOIN users u ON u.id = c.author_id WHERE c.page_id = %d" % page_rec["id"]
1.61 - content_cursor = conn.cursor()
1.62 - content_cursor.execute(cmd)
1.63 - content_recs = content_cursor.fetchall()
1.64 - for content_rec in content_recs:
1.65 + raise Exception, "Cannot import wiki page #%d: parent #%d not found" \
1.66 + % (page_rec["id"], page_rec["parent_id"])
1.67 + else:
1.68 + page.parent = parent_page
1.69 + page.save()
1.70 + # Add content
1.71 + cmd = "SELECT c.id, c.text, c.comments, c.updated_on, c.version, u.login FROM wiki_contents c " \
1.72 + "LEFT JOIN users u ON u.id = c.author_id WHERE c.page_id = %d" % page_rec["id"]
1.73 + content_cursor = conn.cursor()
1.74 + content_cursor.execute(cmd)
1.75 + content_recs = content_cursor.fetchall()
1.76 + for content_rec in content_recs:
1.77 + author = None
1.78 + if content_rec["login"] is not None:
1.79 + author = Account.objects.get(username=content_rec["login"])
1.80 + for key in ("text", "comments"):
1.81 + content_rec[key] = smart_unicode(content_rec[key], encoding="latin1")
1.82 + try:
1.83 + content = WikiContent.objects.get(page=page, author=author)
1.84 + except WikiContent.DoesNotExist:
1.85 + content = WikiContent(page=page, author=author)
1.86 + content.text = content_rec["text"]
1.87 + content.comments = content_rec["comments"]
1.88 + content.last_updated = content_rec["updated_on"]
1.89 + content.version = content_rec["version"]
1.90 + content.save()
1.91 + # Add versions
1.92 + cmd = "SELECT cv.id, cv.data, cv.compression, cv.comments, cv.updated_on, " \
1.93 + "cv.version, u.login FROM wiki_content_versions cv INNER JOIN wiki_pages p " \
1.94 + "ON p.id = cv.page_id INNER JOIN wiki_contents c ON c.id = cv.wiki_content_id " \
1.95 + "LEFT JOIN users u ON u.id = cv.author_id WHERE c.id = %d AND p.id = %d" \
1.96 + % (content_rec["id"], page_rec["id"])
1.97 + version_cursor = conn.cursor()
1.98 + version_cursor.execute(cmd)
1.99 + version_recs = version_cursor.fetchall()
1.100 + for version_rec in version_recs:
1.101 author = None
1.102 - if content_rec["login"] is not None:
1.103 - author = Account.objects.get(username=content_rec["login"])
1.104 - for key in ("text", "comments"):
1.105 - content_rec[key] = smart_unicode(content_rec[key], encoding="latin1")
1.106 + if version_rec["login"] is not None:
1.107 + author = Account.objects.get(username=version_rec["login"])
1.108 try:
1.109 - content = WikiContent.objects.get(page=page, author=author)
1.110 - except WikiContent.DoesNotExist:
1.111 - content = WikiContent(page=page, author=author)
1.112 - content.text = content_rec["text"]
1.113 - content.comments = content_rec["comments"]
1.114 - content.last_updated = content_rec["updated_on"]
1.115 - content.version = content_rec["version"]
1.116 - content.save()
1.117 - # Add versions
1.118 - cmd = "SELECT cv.id, cv.data, cv.compression, cv.comments, cv.updated_on, " \
1.119 - "cv.version, u.login FROM wiki_content_versions cv INNER JOIN wiki_pages p " \
1.120 - "ON p.id = cv.page_id INNER JOIN wiki_contents c ON c.id = cv.wiki_content_id " \
1.121 - "LEFT JOIN users u ON u.id = cv.author_id WHERE c.id = %d AND p.id = %d" \
1.122 - % (content_rec["id"], page_rec["id"])
1.123 - version_cursor = conn.cursor()
1.124 - version_cursor.execute(cmd)
1.125 - version_recs = version_cursor.fetchall()
1.126 - for version_rec in version_recs:
1.127 - author = None
1.128 - if version_rec["login"] is not None:
1.129 - author = Account.objects.get(username=version_rec["login"])
1.130 - try:
1.131 - version = WikiContentVersion.objects.get(wiki_content=content, page=page, author=author)
1.132 - except WikiContentVersion.DoesNotExist:
1.133 - version = WikiContentVersion(wiki_content=content, page=page, author=author)
1.134 - version.data = base64.b64encode(version_rec["data"])
1.135 - version.compression = version_rec["compression"]
1.136 - version.comments = version_rec["comments"]
1.137 - version.last_updated = version_rec["updated_on"]
1.138 - version.version = version_rec["version"]
1.139 - version.save()
1.140 - version_cursor.close()
1.141 - # Redirects
1.142 - cmd = "SELECT title, redirects_to, created_on FROM wiki_redirects " \
1.143 - "WHERE wiki_id = %d" % record["id"]
1.144 - redirect_cursor = conn.cursor()
1.145 - redirect_cursor.execute(cmd)
1.146 - redirect_recs = redirect_cursor.fetchall()
1.147 - for redirect_rec in redirect_recs:
1.148 - try:
1.149 - redirect = WikiRedirect.objects.get(wiki=wiki)
1.150 - except WikiRedirect.DoesNotExist:
1.151 - redirect = WikiRedirect(wiki=wiki)
1.152 - redirect.title = redirect_rec["title"]
1.153 - redirect.redirects_to = redirect_rec["redirects_to"]
1.154 - redirect.date_created = redirect_rec["created_on"]
1.155 - redirect.save()
1.156 - redirect_cursor.close()
1.157 - content_cursor.close()
1.158 - page_cursor.close()
1.159 + version = WikiContentVersion.objects.get(wiki_content=content, page=page, author=author)
1.160 + except WikiContentVersion.DoesNotExist:
1.161 + version = WikiContentVersion(wiki_content=content, page=page, author=author)
1.162 + version.data = base64.b64encode(version_rec["data"])
1.163 + version.compression = version_rec["compression"]
1.164 + version.comments = version_rec["comments"]
1.165 + version.last_updated = version_rec["updated_on"]
1.166 + version.version = version_rec["version"]
1.167 + version.save()
1.168 + version_cursor.close()
1.169 + # Redirects
1.170 + cmd = "SELECT title, redirects_to, created_on FROM wiki_redirects " \
1.171 + "WHERE wiki_id = %d" % record["id"]
1.172 + redirect_cursor = conn.cursor()
1.173 + redirect_cursor.execute(cmd)
1.174 + redirect_recs = redirect_cursor.fetchall()
1.175 + for redirect_rec in redirect_recs:
1.176 + try:
1.177 + redirect = WikiRedirect.objects.get(wiki=wiki)
1.178 + except WikiRedirect.DoesNotExist:
1.179 + redirect = WikiRedirect(wiki=wiki)
1.180 + redirect.title = redirect_rec["title"]
1.181 + redirect.redirects_to = redirect_rec["redirects_to"]
1.182 + redirect.date_created = redirect_rec["created_on"]
1.183 + redirect.save()
1.184 + redirect_cursor.close()
1.185 + content_cursor.close()
1.186 + page_cursor.close()
1.187 cursor.close()