diff --git a/db.py b/db.py index c5272ed..5c794df 100644 --- a/db.py +++ b/db.py @@ -87,3 +87,30 @@ def log_retraction_edit(timestamp, domain, page_title, old_id, new_id): old_id=old_id, new_id=new_id )) + + +def already_retracted(old_id, new_id, domain, page_title): + """ + Given old and new IDs, a domain, and a page title, check if this edit has + already been made in the past so we can avoid edit warring. + """ + cur = db.cursor() + query = """ + SELECT COUNT(*) FROM edit_log + WHERE original_id = "{old_id}" + AND retraction_id = "{new_id}" + AND domain = "{domain}" + AND page_title = "{page_title}" + """ + cur.execute(query.format( + old_id=old_id, + new_id=new_id, + domain=domain, + page_title=page_title + )) + count_result = cur.fetchone() + + if count_result[0] != 0: + return True + else: + return False diff --git a/retractionbot.py b/retractionbot.py index 03f979d..5a1db8a 100644 --- a/retractionbot.py +++ b/retractionbot.py @@ -7,7 +7,9 @@ import re import yaml -from db import load_retracted_identifiers, log_retraction_edit +from db import (load_retracted_identifiers, + log_retraction_edit, + already_retracted) directory = os.path.dirname(os.path.realpath(__file__)) @@ -119,19 +121,25 @@ def run_bot(): # Only bother trying to make an edit if we changed anything if page_text != wp_page.text: - wp_page.text = page_text - edit_summary = "Flagging a cited source as retracted" - - #wp_page.save(edit_summary, minor=False) - logger.info("Successfully edited {page_name} with " - "retracted source(s).".format( - page_name=wp_page.title() - )) - log_retraction_edit(datetime.datetime.now(), - language + ".wikipedia.org", - wp_page, - original_id, - retraction_id) + domain = language + ".wikipedia.org" + # Make sure we're not edit warring + if not already_retracted(original_id, + retraction_id, + domain, + wp_page): + wp_page.text = page_text + edit_summary = "Flagging a cited source as retracted" + + #wp_page.save(edit_summary, minor=False) + logger.info("Successfully edited {page_name} with " + "retracted source(s).".format( + page_name=wp_page.title() + )) + log_retraction_edit(datetime.datetime.now(), + domain, + wp_page, + original_id, + retraction_id) if __name__ == '__main__':