Contains only the minimum for handling files and their representation
"""
import datetime
-import os
from django.db import models
from taggit.managers import TaggableManager
+from oauth2client.client import Credentials
from karmaworld.apps.courses.models import Course
# resume save
super(Note, self).save(*args, **kwargs)
+
+
+# FIXME: replace the following GOOGLE_USER in a settings.py
+GOOGLE_USER = 'seth.woodworth@gmail.com'
+
+class DriveAuth(models.Model):
+ """ stored google drive authentication and refresh token
+ used for interacting with google drive """
+
+ email = models.EmailField(default=GOOGLE_USER)
+ credentials = models.TextField() # JSON of Oauth2Credential object
+ stored_at = models.DateTimeField(auto_now=True)
+
+
+ @staticmethod
+ def get(email=GOOGLE_USER):
+ """ Staticmethod for getting the singleton DriveAuth object """
+ # FIXME: this is untested
+ return DriveAuth.objects.filter(email=email).reverse()[0]
+
+
+ def store(self, creds):
+ """ Transform an existing credentials object to a db serialized """
+ self.email = creds.id_token['email']
+ self.credentials = creds.to_json()
+ self.save()
+
+
+ def transform_to_cred(self):
+ """ take stored credentials and produce a Credentials object """
+ return Credentials.new_from_json(self.credentials)
+
+
+ def __unicode__(self):
+ return u'Gdrive auth for %s created/updated at %s' % \
+ (self.email, self.stored_at)
--- /dev/null
+/* Foundation v2.1.4 http://foundation.zurb.com */
+/* Artfully masterminded by ZURB */
+
+/* --------------------------------------------------
+ Table of Contents
+-----------------------------------------------------
+:: Shared Styles
+:: Page Name 1
+:: Page Name 2
+*/
+
+
+/* -----------------------------------------
+ Shared Styles
+----------------------------------------- */
+
+table th { font-weight: bold; }
+table td, table th { padding: 9px 10px; text-align: left; }
+
+/* Mobile */
+@media only screen and (max-width: 767px) {
+
+ table.responsive { margin-bottom: 0; }
+
+ .pinned { position: absolute; left: 0; top: 0; background: #fff; width: 35%; overflow: hidden; overflow-x: scroll; border-right: 1px solid #ccc; border-left: 1px solid #ccc; }
+ .pinned table { border-right: none; border-left: none; width: 100%; }
+ .pinned table th, .pinned table td { white-space: nowrap; }
+ .pinned td:last-child { border-bottom: 0; }
+
+ div.table-wrapper { position: relative; margin-bottom: 20px; overflow: hidden; border-right: 1px solid #ccc; }
+ div.table-wrapper div.scrollable table { margin-left: 35%; }
+ div.table-wrapper div.scrollable { overflow: scroll; overflow-y: hidden; }
+
+ table.responsive td, table.responsive th { position: relative; white-space: nowrap; overflow: hidden; }
+ table.responsive th:first-child, table.responsive td:first-child, table.responsive td:first-child, table.responsive.pinned td { display: none; }
+
+}
+
+/* -----------------------------------------
+ Page Name 1
+----------------------------------------- */
+
+
+
+
+/* -----------------------------------------
+ Page Name 2
+----------------------------------------- */
+
+