Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
W
wikibot
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Magnus Giesbert
wikibot
Commits
8b95f85d
Commit
8b95f85d
authored
2 years ago
by
Magnus Giesbert
Browse files
Options
Downloads
Patches
Plain Diff
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
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
wikibot.py
+80
-33
80 additions, 33 deletions
wikibot.py
with
80 additions
and
33 deletions
wikibot.py
+
80
−
33
View file @
8b95f85d
...
...
@@ -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
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment