Skip to content
Snippets Groups Projects
Commit 8b95f85d authored by Magnus Giesbert's avatar Magnus Giesbert
Browse files

reformat according to PEP 8 and add function for bulk move.

parent 53227aeb
No related branches found
No related tags found
No related merge requests found
......@@ -4,34 +4,80 @@ from xmlrpc.client import ServerProxy as Proxy, Error as wikiError
import re
import datetime
def move_page(original_page, new_page, delete=False):
"""Moves a page, updates link to new page and flags or deletes the old one"""
with Proxy(config.WIKI_API_URL) as proxy:
# create new page with identical content #
page_content = proxy.wiki.getPage(original_page)
proxy.wiki.putPage(new_page, page_content, {"sum":"Moved from " + original_page})
# update back links to new page #
change_links(original_page, new_page)
proxy.wiki.putPage(new_page, page_content, {
"sum": "Moved from " + original_page})
change_links(original_page, new_page) # update back links to new page
# either flag or delete original page #
if not delete:
proxy.dokuwiki.appendPage(original_page, "\n DELETEME This page was moved to " + new_page,
{"sum": "Moved to " + new_page + " and marked page for deletion"})
else:
proxy.wiki.putPage(original_page, "", {"sum":"Moved to " + new_page}) # deletes original page
proxy.wiki.putPage(original_page, "", {
"sum": "Moved to " + new_page})
def move_pages(original_name_regex, new_name_func, delete=False):
""" Moves a bunch of pages where the complete name is matched by a given regex and new names are given via a function
original_name_regex is a regular expression which the old names have to match completly
new_name_func is a function which gets the matched old name as input and returns the new name
delete is a boolean flag wether old pages are to be deleted or just marked
"""
with Proxy(config.WIKI_API_URL) as proxy:
# move sites #
pages = proxy.dokuwiki.getPagelist("")
update_pages = {page.get("id"): new_name_func(page.get("id")) for page in pages
if re.fullmatch(original_name_regex, page.get("id"))}
for old, new in update_pages.items():
page_content = proxy.wiki.getPage(old)
proxy.wiki.putPage(new, page_content, {"sum": "Moved from " + old})
# bulk update for links #
update_backlink_sites = {}
for page in update_pages.keys():
for link in proxy.wiki.getBackLinks(page):
if update_backlink_sites.get(link):
update_backlink_sites[link].append(page)
else:
update_backlink_sites[link] = [page]
reg = rf"\[\[\s*{{}}\s*\|(.*?)\]\]"
def _replacer(new_name): return (
lambda matched: "[[" + new_name + "|" + matched.group(1) + "]]")
for page_to_update, old_pages in update_backlink_sites.items():
page_content = proxy.wiki.getPage(page_to_update)
for old_page in old_pages:
page_content = re.sub(reg.format(old_page), _replacer(
update_pages[old_page]), page_content)
proxy.wiki.putPage(page_to_update, page_content, {
"sum": "Update links due to moving sites"})
# either flag or delete original pages #
if not delete:
for old_page, new_page in update_pages.items():
proxy.dokuwiki.appendPage(old_page, "\n\n DELETEME This page was moved to " + new_page,
{"sum": "Moved to " + new_page + " and marked page for deletion"})
else:
for old_page, new_page in update_pages.items():
proxy.wiki.putPage(
old_page, "", {"sum": "Moved to " + new_page})
def change_links(old_page, new_page):
"""Updates pages that link to old page, to link to new page"""
with Proxy(config.WIKI_API_URL) as proxy:
backLinks = proxy.wiki.getBackLinks(old_page)
reg = rf"\[\[\s*{old_page}\s*\|(.*?)\]\]" # regex for dokuwiki links we want to replace
_replacer = lambda matched : "[[" + new_page + "|" + matched.group(1) + "]]"
# regex for dokuwiki links we want to replace
reg = rf"\[\[\s*{old_page}\s*\|(.*?)\]\]"
def _replacer(
matched): return "[[" + new_page + "|" + matched.group(1) + "]]"
for page in backLinks:
content = proxy.wiki.getPage(page)
content = re.sub(reg, _replacer, content)
proxy.wiki.putPage(page, content, {"sum":"Update links from " +old_page+ " to " + new_page})
proxy.wiki.putPage(
page, content, {"sum": "Update links from " + old_page + " to " + new_page})
def find_old_pages(timedelta, namespace=""):
......@@ -41,8 +87,9 @@ def find_old_pages(timedelta, namespace=""):
proxy_time = proxy.dokuwiki.getTime()
old_pages = []
if type(timedelta) is datetime.timedelta:
old_pages = [page for page in pages if proxy_time - page.get('rev') > timedelta.total_seconds()]
old_pages = [page for page in pages if proxy_time -
page.get('rev') > timedelta.total_seconds()]
elif type(timedelta) is datetime.datetime:
old_pages = [page for page in pages if page.get('rev') < timedelta.timestamp()]
old_pages = [page for page in pages if page.get(
'rev') < timedelta.timestamp()]
return old_pages
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment