Create restore script
This commit is contained in:
parent
e1d51e6441
commit
4cf9530f93
51
ja-yomi/restore_pages.py
Normal file
51
ja-yomi/restore_pages.py
Normal file
@ -0,0 +1,51 @@
|
||||
import os
|
||||
import subprocess
|
||||
import pywikibot
|
||||
|
||||
|
||||
BACKUP_PATH = "ja-yomi-backup"
|
||||
SITE = pywikibot.Site("en", "wiktionary")
|
||||
|
||||
|
||||
def restore_page(page: pywikibot.Page):
|
||||
diff_file = os.path.join(BACKUP_PATH, page.title())
|
||||
current_text = page.text
|
||||
with open("temp", mode="w", encoding="utf-8") as f:
|
||||
f.write(current_text)
|
||||
|
||||
subprocess.run(["patch", "temp", "-u", diff_file]) # Restores previous page text before my bot's edit
|
||||
with open("temp", encoding="utf-8") as f:
|
||||
restored_contents = f.read()
|
||||
return restored_contents
|
||||
|
||||
|
||||
def restore_pages(page_list: list[str]):
|
||||
"""
|
||||
For a list of page names, gets the Wiktionary pages for them and attempts to
|
||||
restore their contents.
|
||||
"""
|
||||
for page_name in page_list:
|
||||
print(f"Restoring page {page_name}...")
|
||||
page = pywikibot.Page(SITE, page_name)
|
||||
try:
|
||||
print(restore_page(page))
|
||||
page.text = restore_page(page)
|
||||
page.save("Revert previous attempt to remove yomi parameters due to ill behaviour")
|
||||
except FileNotFoundError:
|
||||
print(f"No local patch was found for {page_name}; either the page was never edited, or no patch was correctly saved.")
|
||||
except Exception as e:
|
||||
print("Unknown error occurred:", e)
|
||||
raise SystemExit(1)
|
||||
|
||||
def main():
|
||||
pages_to_restore_file = input("Please enter a file that contains pages to revert: ")
|
||||
if not os.path.exists(pages_to_restore_file):
|
||||
print("File does not exist")
|
||||
raise SystemExit(1)
|
||||
|
||||
with open(pages_to_restore_file) as f:
|
||||
restore_pages(f.read().splitlines()) # Done instead of f.readlines() because this removes line-ends
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user