Also import parent wiki pages. default tip
authorPier Luigi Fiorini <pierluigi.fiorini@gmail.com>
Thu Jan 06 10:59:49 2011 +0100 (16 months ago)
changeset 111bb3e7670e481
parent 110 39ddf17d830c
Also import parent wiki pages.
osdrawer/migration/wiki.py
     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()