Added more error detection to the Reddit app, also moved is_valid to the model

This commit is contained in:
2010-12-21 11:43:02 +00:00
parent b68391bed6
commit 9cc910e78c
3 changed files with 48 additions and 30 deletions

View File

@@ -10,27 +10,6 @@ class RedditAccountAdmin(admin.ModelAdmin):
fields = ('user', 'username', 'validated') fields = ('user', 'username', 'validated')
#form = RedditAccountForm
def is_valid(self, obj):
if not obj.date_created:
return False
# Account 3 months old?
if (date.today() - obj.date_created.date()).days >= 90:
return True
# Account created after 9/2/10 and before 13/2/10
if obj.date_created.date() >= date(2010, 2, 9) and obj.date_created.date() <= date(2010, 2, 13):
return True
return False
is_valid.short_description = 'Dreddit Eligible'
is_valid.boolean = True
def save_model(self, request, obj, form, change): def save_model(self, request, obj, form, change):
if not obj.pk: if not obj.pk:
obj.api_update() obj.api_update()

View File

@@ -2,7 +2,7 @@ from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
import simplejson as json import simplejson as json
import urllib import urllib
from datetime import datetime from datetime import datetime, date
from reddit.api import Comment from reddit.api import Comment
@@ -64,6 +64,21 @@ class RedditAccount(models.Model):
return posts return posts
@property
def is_valid(self):
if not self.date_created:
return False
# Account 3 months old?
if (date.today() - self.date_created.date()).days >= 90:
return True
# Account created after 9/2/10 and before 13/2/10
if self.date_created.date() >= date(2010, 2, 9) and self.date_created.date() <= date(2010, 2, 13):
return True
return False
class Meta: class Meta:
app_label = 'reddit' app_label = 'reddit'

View File

@@ -1,23 +1,47 @@
from urllib2 import HTTPError, URLError
from celery.task import Task
from celery.decorators import task from celery.decorators import task
from reddit.models import RedditAccount from reddit.models import RedditAccount
from reddit.api import Inbox from reddit.api import Inbox, LoginError
from django.conf import settings from django.conf import settings
@task(ignore_result=True) class send_reddit_message(Task):
def send_reddit_message(to, subject, message):
default_retry_delay = 5 * 60 # retry in 5 minutes
ignore_result = True
def run(self, to, subject, message, **kwargs):
logger = self.get_logger(**kwargs)
logger.info("Sending Reddit message to %s" % to)
ib = Inbox(username=settings.REDDIT_USER, password=settings.REDDIT_PASSWORD) ib = Inbox(username=settings.REDDIT_USER, password=settings.REDDIT_PASSWORD)
try:
ib.send(to, subject, message) ib.send(to, subject, message)
except (HTTPError, URLError), exc:
logger.error("Error sending message, queueing for retry")
self.retry([to, subject, message], kwargs=kwargs, exc=exc)
except LoginError, exc:
logger.error("Error logging into Reddit")
@task(ignore_result=True) @task(ignore_result=True)
def process_validations(): def process_validations():
log = process_validations.get_logger() logger = process_validations.get_logger()
try:
inbox = Inbox(settings.REDDIT_USER, settings.REDDIT_PASSWORD) inbox = Inbox(settings.REDDIT_USER, settings.REDDIT_PASSWORD)
except (HTTPError, URLError), exc:
logger.error("Error with Reddit, aborting.")
return
except LoginError, exc:
logger.error("Error logging into Reddit")
return
for msg in inbox: for msg in inbox:
if not msg.was_comment: if not msg.was_comment:
try: try:
acc = RedditAccount.objects.get(username__iexact=msg.author) acc = RedditAccount.objects.get(username__iexact=msg.author)
if not acc.validated and msg.subject == "Validation: %s" % acc.user.username: if not acc.validated and msg.subject == "Validation: %s" % acc.user.username:
log.info("Validated %s" % acc.user.username) logger.info("Validated %s" % acc.user.username)
acc.validated = True acc.validated = True
acc.save() acc.save()
except RedditAccount.DoesNotExist: except RedditAccount.DoesNotExist: