import ObjectDoesNotExist closes #427
[oweals/karmaworld.git] / karmaworld / apps / notes / tasks.py
index aa631be99feeadf8eb616a6484efc11edc00b70f..d04eef52daafba650da1451923d8c5ee6c64cc4f 100644 (file)
@@ -1,70 +1,77 @@
 #!/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()[: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):
     # This url will use 13 or less characters
     shortener = gdshortener.ISGDShortener()
-    url = "https://www.karmanotes.org" + \
+    url = "http://www.karmanotes.org" + \
         note.get_absolute_url()
     short_url = shortener.shorten(url)[0]
 
-    # space character
-
-    # 16 characters
-    school = note.course.school.slug
-    short_school = school[:school.find('-')][:16]
-
-    # space character
-
     # 50 characters
     short_course = note.course.name[:50]
 
-    # space and colon characters
-
     # 57 characters
     short_note = note.name[:57]
 
-    return short_url + " #" + short_school + " " + \
+    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:
+        return short_url + " " + \
+            short_course + ": " + \
+            short_note