diff --git a/apiclient/ext/django.py b/apiclient/ext/django.py new file mode 100644 index 0000000..4217eaa --- /dev/null +++ b/apiclient/ext/django.py @@ -0,0 +1,36 @@ +from django.db import models + +class OAuthCredentialsField(models.Field): + + __metaclass__ = models.SubfieldBase + + def db_type(self): + return 'VARCHAR' + + def to_python(self, value): + if value is None: + return None + if isinstance(value, apiclient.oauth.Credentials): + return value + return pickle.loads(base64.b64decode(value)) + + def get_db_prep_value(self, value): + return base64.b64encode(pickle.dumps(value)) + +class FlowThreeLeggedField(models.Field): + + __metaclass__ = models.SubfieldBase + + def db_type(self): + return 'VARCHAR' + + def to_python(self, value): + print "In to_python", value + if value is None: + return None + if isinstance(value, apiclient.oauth.FlowThreeLegged): + return value + return pickle.loads(base64.b64decode(value)) + + def get_db_prep_value(self, value): + return base64.b64encode(pickle.dumps(value)) diff --git a/samples/django_sample/buzz/models.py b/samples/django_sample/buzz/models.py index 91cdcce..914b586 100644 --- a/samples/django_sample/buzz/models.py +++ b/samples/django_sample/buzz/models.py @@ -1,48 +1,15 @@ import pickle import base64 -import apiclient.oauth from django.contrib import admin from django.contrib.auth.models import User from django.db import models +from apiclient.ext.django import FlowThreeLeggedField +from apiclient.ext.django import OAuthCredentialsField + # Create your models here. -class OAuthCredentialsField(models.Field): - - __metaclass__ = models.SubfieldBase - - def db_type(self): - return 'VARCHAR' - - def to_python(self, value): - if value is None: - return None - if isinstance(value, apiclient.oauth.Credentials): - return value - return pickle.loads(base64.b64decode(value)) - - def get_db_prep_value(self, value): - return base64.b64encode(pickle.dumps(value)) - -class FlowThreeLeggedField(models.Field): - - __metaclass__ = models.SubfieldBase - - def db_type(self): - return 'VARCHAR' - - def to_python(self, value): - print "In to_python", value - if value is None: - return None - if isinstance(value, apiclient.oauth.FlowThreeLegged): - return value - return pickle.loads(base64.b64decode(value)) - - def get_db_prep_value(self, value): - return base64.b64encode(pickle.dumps(value)) - # The Flow could also be stored in memcache since it is short lived. class Flow(models.Model): id = models.ForeignKey(User, primary_key=True)