| Index: appengine/chromium_build_logs/third_party/oauth2client/django_orm.py | 
| diff --git a/appengine/chromium_build_logs/third_party/oauth2client/django_orm.py b/appengine/chromium_build_logs/third_party/oauth2client/django_orm.py | 
| index d3642f7e7b457aeb7ea3e89c7cc9b6e2893648e9..65c5d2010d835ca54b2ddfccf1aac2194e9eb9d5 100644 | 
| --- a/appengine/chromium_build_logs/third_party/oauth2client/django_orm.py | 
| +++ b/appengine/chromium_build_logs/third_party/oauth2client/django_orm.py | 
| @@ -1,4 +1,4 @@ | 
| -# Copyright (C) 2010 Google Inc. | 
| +# Copyright 2014 Google Inc. All rights reserved. | 
| # | 
| # Licensed under the Apache License, Version 2.0 (the "License"); | 
| # you may not use this file except in compliance with the License. | 
| @@ -31,17 +31,24 @@ class CredentialsField(models.Field): | 
|  | 
| __metaclass__ = models.SubfieldBase | 
|  | 
| +  def __init__(self, *args, **kwargs): | 
| +    if 'null' not in kwargs: | 
| +      kwargs['null'] = True | 
| +    super(CredentialsField, self).__init__(*args, **kwargs) | 
| + | 
| def get_internal_type(self): | 
| return "TextField" | 
|  | 
| def to_python(self, value): | 
| -    if not value: | 
| +    if value is None: | 
| return None | 
| if isinstance(value, oauth2client.client.Credentials): | 
| return value | 
| return pickle.loads(base64.b64decode(value)) | 
|  | 
| def get_db_prep_value(self, value, connection, prepared=False): | 
| +    if value is None: | 
| +      return None | 
| return base64.b64encode(pickle.dumps(value)) | 
|  | 
|  | 
| @@ -49,6 +56,11 @@ class FlowField(models.Field): | 
|  | 
| __metaclass__ = models.SubfieldBase | 
|  | 
| +  def __init__(self, *args, **kwargs): | 
| +    if 'null' not in kwargs: | 
| +      kwargs['null'] = True | 
| +    super(FlowField, self).__init__(*args, **kwargs) | 
| + | 
| def get_internal_type(self): | 
| return "TextField" | 
|  | 
| @@ -60,6 +72,8 @@ class FlowField(models.Field): | 
| return pickle.loads(base64.b64decode(value)) | 
|  | 
| def get_db_prep_value(self, value, connection, prepared=False): | 
| +    if value is None: | 
| +      return None | 
| return base64.b64encode(pickle.dumps(value)) | 
|  | 
|  | 
| @@ -102,13 +116,26 @@ class Storage(BaseStorage): | 
| credential.set_store(self) | 
| return credential | 
|  | 
| -  def locked_put(self, credentials): | 
| +  def locked_put(self, credentials, overwrite=False): | 
| """Write a Credentials to the datastore. | 
|  | 
| Args: | 
| credentials: Credentials, the credentials to store. | 
| +      overwrite: Boolean, indicates whether you would like these credentials to | 
| +                          overwrite any existing stored credentials. | 
| """ | 
| args = {self.key_name: self.key_value} | 
| -    entity = self.model_class(**args) | 
| + | 
| +    if overwrite: | 
| +      entity, unused_is_new = self.model_class.objects.get_or_create(**args) | 
| +    else: | 
| +      entity = self.model_class(**args) | 
| + | 
| setattr(entity, self.property_name, credentials) | 
| entity.save() | 
| + | 
| +  def locked_delete(self): | 
| +    """Delete Credentials from the datastore.""" | 
| + | 
| +    query = {self.key_name: self.key_value} | 
| +    entities = self.model_class.objects.filter(**query).delete() | 
|  |