import ObjectDoesNotExist closes #427
[oweals/karmaworld.git] / karmaworld / apps / notes / tasks.py
index 64f1548a44bf0e29db262e500dd54ee68ca73e21..d04eef52daafba650da1451923d8c5ee6c64cc4f 100644 (file)
@@ -1,45 +1,52 @@
 #!/usr/bin/env python
 # -*- coding:utf8 -*-
 # Copyright (C) 2013  FinalsClub Foundation
+import os
 
+import traceback
 from celery import task
+from celery.utils.log import get_task_logger
 from karmaworld.apps.notes.models import Note
 import twitter
-import logging
 import gdshortener
 
-logger = logging.getLogger(__name__)
-
+logger = get_task_logger(__name__)
 
 @task(name="tweet_note")
 def tweet_note():
     """Tweet about a new note."""
 
     try:
-        import karmaworld.secret.twitter as secrets
-    except ImportError:
+        TWITTER_CONSUMER_KEY = os.environ['TWITTER_CONSUMER_KEY']
+        TWITTER_CONSUMER_SECRET = os.environ['TWITTER_CONSUMER_SECRET']
+        TWITTER_ACCESS_TOKEN_KEY = os.environ['TWITTER_ACCESS_TOKEN_KEY']
+        TWITTER_ACCESS_TOKEN_SECRET = os.environ['TWITTER_ACCESS_TOKEN_SECRET']
+    except:
         logger.warn("No twitter secrets found, not running tweet_note")
         return
 
-    api = twitter.Api(consumer_key=secrets.CONSUMER_KEY,
-                      consumer_secret=secrets.CONSUMER_SECRET,
-                      access_token_key=secrets.ACCESS_TOKEN_KEY,
-                      access_token_secret=secrets.ACCESS_TOKEN_SECRET)
+    try:
+        api = twitter.Api(consumer_key=TWITTER_CONSUMER_KEY,
+                          consumer_secret=TWITTER_CONSUMER_SECRET,
+                          access_token_key=TWITTER_ACCESS_TOKEN_KEY,
+                          access_token_secret=TWITTER_ACCESS_TOKEN_SECRET)
 
-    newest_notes = Note.objects.all().order_by('-uploaded_at')[:100]
-    for n in newest_notes:
-        if not n.tweeted:
-            update = tweet_string(n)
-            logger.info("Tweeting: " + update)
+        newest_notes = Note.objects.all().order_by('-uploaded_at')[:100]
+        for n in newest_notes:
+            if not n.tweeted:
+                update = tweet_string(n)
+                logger.info("Tweeting: " + update)
 
-            # Mark this tweeted before we actually tweet it
-            # to be extra safe against double tweets
-            n.tweeted = True
-            n.save()
+                # Mark this tweeted before we actually tweet it
+                # to be extra safe against double tweets
+                n.tweeted = True
+                n.save()
 
-            api.PostUpdate(tweet_string(n))
+                api.PostUpdate(tweet_string(n))
 
-            break
+                break
+    except:
+        logger.error(traceback.format_exc())
 
 
 def tweet_string(note):
@@ -55,8 +62,13 @@ def tweet_string(note):
     # 57 characters
     short_note = note.name[:57]
 
-    if note.course.school.hashtag:
-        return short_url + " #" + note.course.school.hashtag + " " + \
+    if note.course.school:
+        school = note.course.school
+    else:
+        school = note.course.department.school
+
+    if school.hashtag:
+        return short_url + " #" + school.hashtag + " " + \
         short_course + ": " + \
         short_note
     else: