Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: third_party/oauth2client/django_orm.py

Issue 183793010: Added OAuth2 authentication to apply_issue (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Added third_party change information Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright (C) 2010 Google Inc.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 """OAuth 2.0 utilities for Django.
16
17 Utilities for using OAuth 2.0 in conjunction with
18 the Django datastore.
19 """
20
21 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
22
23 import oauth2client
24 import base64
25 import pickle
26
27 from django.db import models
28 from oauth2client.client import Storage as BaseStorage
29
30 class CredentialsField(models.Field):
31
32 __metaclass__ = models.SubfieldBase
33
34 def get_internal_type(self):
35 return "TextField"
36
37 def to_python(self, value):
38 if not value:
39 return None
40 if isinstance(value, oauth2client.client.Credentials):
41 return value
42 return pickle.loads(base64.b64decode(value))
43
44 def get_db_prep_value(self, value, connection, prepared=False):
45 return base64.b64encode(pickle.dumps(value))
46
47
48 class FlowField(models.Field):
49
50 __metaclass__ = models.SubfieldBase
51
52 def get_internal_type(self):
53 return "TextField"
54
55 def to_python(self, value):
56 if value is None:
57 return None
58 if isinstance(value, oauth2client.client.Flow):
59 return value
60 return pickle.loads(base64.b64decode(value))
61
62 def get_db_prep_value(self, value, connection, prepared=False):
63 return base64.b64encode(pickle.dumps(value))
64
65
66 class Storage(BaseStorage):
67 """Store and retrieve a single credential to and from
68 the datastore.
69
70 This Storage helper presumes the Credentials
71 have been stored as a CredenialsField
72 on a db model class.
73 """
74
75 def __init__(self, model_class, key_name, key_value, property_name):
76 """Constructor for Storage.
77
78 Args:
79 model: db.Model, model class
80 key_name: string, key name for the entity that has the credentials
81 key_value: string, key value for the entity that has the credentials
82 property_name: string, name of the property that is an CredentialsProperty
83 """
84 self.model_class = model_class
85 self.key_name = key_name
86 self.key_value = key_value
87 self.property_name = property_name
88
89 def locked_get(self):
90 """Retrieve Credential from datastore.
91
92 Returns:
93 oauth2client.Credentials
94 """
95 credential = None
96
97 query = {self.key_name: self.key_value}
98 entities = self.model_class.objects.filter(**query)
99 if len(entities) > 0:
100 credential = getattr(entities[0], self.property_name)
101 if credential and hasattr(credential, 'set_store'):
102 credential.set_store(self)
103 return credential
104
105 def locked_put(self, credentials):
106 """Write a Credentials to the datastore.
107
108 Args:
109 credentials: Credentials, the credentials to store.
110 """
111 args = {self.key_name: self.key_value}
112 entity = self.model_class(**args)
113 setattr(entity, self.property_name, credentials)
114 entity.save()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698