Django FreeComments cleanup script

This site uses the comments module provided by the Django web framework, in particular, is uses the FreeComment model to allow you to leave comments. One field I had not used so far was the "approved" field, I had simply put all the comments up on the web straight away, and just deleted the occasional spam that managed to beat the system.

Now however, I have decided to use the approved field. I will still put comments up straight away, but now I will set ones I have read to approved. Allowing me to view new comments behind the scenes.

One flaw in this plan is that I needed to set the existing comments to approved.

I could have just gone:

# Set all comments to approved
comments = FreeComment.objects.filter(approved=0)
for comment in comments:
    comment.approved = 1
    comment.save()

But I was not 100% sure that the odd spam was not caught, so while eating my morning porridge, I turned it into a really simple command line adventure game.

Just in case it is useful to anyone, here is it below. I actually typed the whole thing into the shell, but ipython has a lovely history command that allows you output everything you wrote.

Obviously, the LOCATION_OF_DJANGO_PROJECT needs to be set to the directory that your Django project is in, not the project directory itself.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Simple and ugly script to sort out FreeComments."""

######################
# Configure the following three variables:

URL = "http://commandline.org.uk"
LOCATION_OF_DJANGO_PROJECT = "/home/django/sites/"
CLEAR_COMMAND = "clear" # For Windows use CLS

#
#######################

import os
import sys

# Add Django project to Path
sys.path.append(LOCATION_OF_DJANGO_PROJECT)

# The following magic spell sets up the Django Environment
from django.core.management import setup_environ
from basic import settings
setup_environ(settings)

# Get the FreeComment model
from django.contrib.comments.models import FreeComment

def main():
    """Cycle through the comments, offer a simple choice."""
    # Get all the unapproved comments
    comments = FreeComment.objects.filter(approved=0)
    os.system(CLEAR_COMMAND)
    print "There are", len(comments), "comments to judge.\n"

    # Go through the comments
    for comment in comments:
        # Show the hyperlink to the comment,
        # In case you want to check it in the browser
        print URL + comment.get_absolute_url()
        # Comment name
        print comment.person_name, "said:"
        try:
            # Comment text
            print comment.comment
        except UnicodeEncodeError:
            # The world is a big place.
            print "[something in unicode]"
        print "\n\n"

        # Now offer choice at the command line
        print "Do you approve this comment?"
        print "Press y for yes, d for delete, " + \
              "nothing for skip, anything else to exit."
        answer = raw_input()
        if answer == "y":
            comment.approved = 1
            comment.save()
        elif answer == "d":
            comment.delete()
        elif answer == "":
            pass
        else:
            sys.exit()
        os.system(CLEAR_COMMAND)

# Start the ball rolling.
if __name__ == '__main__':
    main()
    print "All done."

So pretty dumb, but publishing it here might save someone five minutes.

How about Global Thermonuclear War? Wouldn't you prefer a good game of chess? Powered by zpress