author | Pawel Solyga <Pawel.Solyga@gmail.com> |
Sun, 14 Sep 2008 00:23:49 +0000 | |
changeset 143 | b419121f7b3e |
parent 141 | e120c24b89e2 |
child 164 | afdf502c6cc4 |
permissions | -rw-r--r-- |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python2.5 |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
2 |
# |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
3 |
# Copyright 2008 the Melange authors. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
4 |
# |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
5 |
# Licensed under the Apache License, Version 2.0 (the "License"); |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
6 |
# you may not use this file except in compliance with the License. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
7 |
# You may obtain a copy of the License at |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
8 |
# |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
9 |
# http://www.apache.org/licenses/LICENSE-2.0 |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
10 |
# |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
11 |
# Unless required by applicable law or agreed to in writing, software |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
12 |
# distributed under the License is distributed on an "AS IS" BASIS, |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
13 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
14 |
# See the License for the specific language governing permissions and |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
15 |
# limitations under the License. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
16 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
17 |
"""Basic ID (Google Account) and User (Model) query functions. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
18 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
19 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
20 |
__authors__ = [ |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
21 |
'"Todd Larsen" <tlarsen@google.com>', |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
22 |
] |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
23 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
24 |
|
131 | 25 |
import re |
135
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
26 |
import logging |
131 | 27 |
|
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
28 |
from google.appengine.api import users |
131 | 29 |
from google.appengine.ext import db |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
30 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
31 |
from soc.logic import out_of_band |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
32 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
33 |
import soc.models.user |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
34 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
35 |
|
131 | 36 |
def getUserKeyNameFromId(id): |
37 |
"""Return a Datastore key_name for a User derived from a Google Account. |
|
38 |
||
39 |
Args: |
|
40 |
id: a Google Account (users.User) object |
|
41 |
""" |
|
42 |
if not id: |
|
43 |
return None |
|
44 |
||
45 |
return 'User:%s' % id.email() |
|
46 |
||
47 |
||
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
48 |
def getIdIfMissing(id): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
49 |
"""Gets Google Account of logged-in user (possibly None) if id is false. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
50 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
51 |
This is a convenience function that simplifies a lot of view code that |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
52 |
accepts an optional id argument from the caller (such as one looked up |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
53 |
already by another view that decides to "forward" the request to this |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
54 |
other view). |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
55 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
56 |
Args: |
131 | 57 |
id: a Google Account (users.User) object, or None |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
58 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
59 |
Returns: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
60 |
If id is non-false, it is simply returned; otherwise, the Google Account |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
61 |
of currently logged-in user is returned (which could be None if no user |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
62 |
is logged in). |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
63 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
64 |
if not id: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
65 |
# id not initialized, so check if a Google Account is currently logged in |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
66 |
id = users.get_current_user() |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
67 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
68 |
return id |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
69 |
|
131 | 70 |
|
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
71 |
def getUserFromId(id): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
72 |
"""Returns User entity for a Google Account, or None if not found. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
73 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
74 |
Args: |
131 | 75 |
id: a Google Account (users.User) object |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
76 |
""" |
131 | 77 |
# first, attempt a lookup by User:id key name |
78 |
key_name = getUserKeyNameFromId(id) |
|
79 |
||
80 |
if key_name: |
|
81 |
user = soc.models.user.User.get_by_key_name(key_name) |
|
82 |
else: |
|
83 |
user = None |
|
84 |
||
85 |
if user: |
|
86 |
return user |
|
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
87 |
|
131 | 88 |
# email address may have changed, so query the id property |
89 |
user = soc.models.user.User.gql('WHERE id = :1', id).get() |
|
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
90 |
|
131 | 91 |
if user: |
92 |
return user |
|
93 |
||
94 |
# last chance: perhaps the User changed their email address at some point |
|
95 |
user = soc.models.user.User.gql('WHERE former_ids = :1', id).get() |
|
96 |
||
97 |
return user |
|
98 |
||
99 |
||
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
100 |
def getUserIfMissing(user, id): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
101 |
"""Conditionally returns User entity for a Google Account. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
102 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
103 |
This function is used to look up the User entity corresponding to the |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
104 |
supplied Google Account *if* the user parameter is false (usually None). |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
105 |
This function is basically a no-op if user already refers to a User |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
106 |
entity. This is a convenience function that simplifies a lot of view |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
107 |
code that accepts an optional user argument from the caller (such as |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
108 |
one looked up already by another view that decides to "forward" the |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
109 |
HTTP request to this other view). |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
110 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
111 |
Args: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
112 |
user: None (usually), or an existing User entity |
131 | 113 |
id: a Google Account (users.User) object |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
114 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
115 |
Returns: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
116 |
* user (which may have already been None if passed in that way by the |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
117 |
caller) if id is false or user is non-false |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
118 |
* results of getUserFromId() if user is false and id is non-false |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
119 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
120 |
if id and (not user): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
121 |
# Google Account supplied and User uninitialized, so look up User entity |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
122 |
user = getUserFromId(id) |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
123 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
124 |
return user |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
125 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
126 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
127 |
def doesUserExist(id): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
128 |
"""Returns True if User exists in the Datastore for a Google Account. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
129 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
130 |
Args: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
131 |
id: a Google Account object |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
132 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
133 |
if getUserFromId(id): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
134 |
return True |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
135 |
else: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
136 |
return False |
141
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
137 |
|
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
138 |
def isIdUser(id=None): |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
139 |
"""Returns True if Google Account has it's soc.models.user.User entity in datastore. |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
140 |
|
141
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
141 |
Args: |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
142 |
id: a Google Account (users.User) object; if id is not supplied, |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
143 |
the current logged-in user is checked |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
144 |
""" |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
145 |
id = getIdIfMissing(id) |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
146 |
|
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
147 |
if not id: |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
148 |
# no Google Account was supplied or is logged in |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
149 |
return False |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
150 |
|
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
151 |
user = getUserFromId(id) |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
152 |
|
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
153 |
if not user: |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
154 |
# no User entity for this Google Account |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
155 |
return False |
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
156 |
|
e120c24b89e2
Added Melange front page edit view where you can change title, content, feed url. Created SiteSettings and Document models and some logic for them. Added isFeedURLValid function in soc/logic/feed.py. Created some functions for handling datastore updates of different kinds of Models (soc/logic/model.py). Fixed some typos and too long lines of code.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
138
diff
changeset
|
157 |
return True |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
158 |
|
131 | 159 |
def isIdDeveloper(id=None): |
160 |
"""Returns True if Google Account is a Developer with special privileges. |
|
161 |
||
138
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
162 |
Since it only works on the current logged-in user, if id matches the |
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
163 |
current logged-in Google Account, the App Engine Users API function |
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
164 |
user.is_current_user_admin() is checked. If that returns False, or |
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
165 |
id is not the currently logged-in user, the is_developer property of |
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
166 |
the User entity corresponding to the id Google Account is checked next. |
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
167 |
|
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
168 |
This solves the "chicken-and-egg" problem of no User entity having its |
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
169 |
is_developer property set, but no one being able to set it. |
137
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
170 |
|
131 | 171 |
Args: |
172 |
id: a Google Account (users.User) object; if id is not supplied, |
|
137
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
173 |
the current logged-in user is checked |
131 | 174 |
""" |
137
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
175 |
id = getIdIfMissing(id) |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
176 |
|
131 | 177 |
if not id: |
137
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
178 |
# no Google Account was supplied or is logged in, so an unspecified |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
179 |
# User is definitely *not* a Developer |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
180 |
return False |
131 | 181 |
|
137
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
182 |
if id == users.get_current_user(): |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
183 |
if users.is_current_user_admin(): |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
184 |
# supplied id is current logged-in user, and that user is in the |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
185 |
# Administration->Developers list in the App Engine console |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
186 |
return True |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
187 |
|
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
188 |
user = getUserFromId(id) |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
189 |
|
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
190 |
if not user: |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
191 |
# no User entity for this Google Account, and id is not the currently |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
192 |
# logged-in user, so there is no conclusive way to check the |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
193 |
# Administration->Developers list in the App Engine console |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
194 |
return False |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
195 |
|
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
196 |
return user.is_developer |
131 | 197 |
|
198 |
||
199 |
LINKNAME_PATTERN = r'''(?x) |
|
200 |
^ |
|
201 |
[0-9a-z] # start with ASCII digit or lowercase |
|
202 |
( |
|
203 |
[0-9a-z] # additional ASCII digit or lowercase |
|
204 |
| # -OR- |
|
205 |
_[0-9a-z] # underscore and ASCII digit or lowercase |
|
206 |
)* # zero or more of OR group |
|
207 |
$ |
|
208 |
''' |
|
209 |
||
210 |
LINKNAME_REGEX = re.compile(LINKNAME_PATTERN) |
|
211 |
||
212 |
def isLinkNameFormatValid(link_name): |
|
213 |
"""Returns True if link_name is in a valid format. |
|
214 |
||
215 |
Args: |
|
216 |
link_name: link name used in URLs to identify user |
|
217 |
""" |
|
218 |
if LINKNAME_REGEX.match(link_name): |
|
219 |
return True |
|
220 |
return False |
|
221 |
||
222 |
||
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
223 |
def getUserFromLinkName(link_name): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
224 |
"""Returns User entity for link_name or None if not found. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
225 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
226 |
Args: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
227 |
link_name: link name used in URLs to identify user |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
228 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
229 |
return soc.models.user.User.gql('WHERE link_name = :1', link_name).get() |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
230 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
231 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
232 |
def getUserIfLinkName(link_name): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
233 |
"""Returns User entity for supplied link_name if one exists. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
234 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
235 |
Args: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
236 |
link_name: link name used in URLs to identify user |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
237 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
238 |
Returns: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
239 |
* None if link_name is false. |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
240 |
* User entity that has supplied link_name |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
241 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
242 |
Raises: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
243 |
out_of_band.ErrorResponse if link_name is not false, but no User entity |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
244 |
with the supplied link_name exists in the Datastore |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
245 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
246 |
if not link_name: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
247 |
# exit without error, to let view know that link_name was not supplied |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
248 |
return None |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
249 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
250 |
link_name_user = getUserFromLinkName(link_name) |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
251 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
252 |
if link_name_user: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
253 |
# a User has this link name, so return that corresponding User entity |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
254 |
return link_name_user |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
255 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
256 |
# else: a link name was supplied, but there is no User that has it |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
257 |
raise out_of_band.ErrorResponse( |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
258 |
'There is no user with a "link name" of "%s".' % link_name, status=404) |
131 | 259 |
|
135
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
260 |
|
136
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
261 |
def isLinkNameAvailableForId(link_name, id=None): |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
262 |
"""Indicates if link name is available for the given Google Account. |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
263 |
|
135
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
264 |
Args: |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
265 |
link_name: link name used in URLs to identify user |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
266 |
id: a Google Account object; optional, current logged-in user will |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
267 |
be used (or False will be returned if no user is logged in) |
136
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
268 |
|
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
269 |
Returns: |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
270 |
True: the link name does not exist in the Datastore, |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
271 |
so it is currently "available" to any User |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
272 |
True: the link name exists and already belongs to the User entity |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
273 |
associated with the specified Google Account |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
274 |
False: the link name exists and belongs to a User entity other than |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
275 |
that associated with the supplied Google Account |
135
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
276 |
""" |
136
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
277 |
link_name_exists = doesLinkNameExist(link_name) |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
278 |
|
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
279 |
if not link_name_exists: |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
280 |
# if the link name does not exist, it is clearly available for any User |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
281 |
return True |
135
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
282 |
|
136
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
283 |
return doesLinkNameBelongToId(link_name, id=id) |
135
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
284 |
|
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
285 |
|
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
286 |
def doesLinkNameExist(link_name=None): |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
287 |
"""Returns True if link name exists in the Datastore. |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
288 |
|
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
289 |
Args: |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
290 |
link_name: link name used in URLs to identify user |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
291 |
""" |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
292 |
if getUserFromLinkName(link_name): |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
293 |
return True |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
294 |
else: |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
295 |
return False |
a7ccde9d9eed
Fixed one typo in response_helpers which caused is_admin context variable not to work correctly.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
131
diff
changeset
|
296 |
|
131 | 297 |
|
298 |
def doesLinkNameBelongToId(link_name, id=None): |
|
299 |
"""Returns True if supplied link name belongs to supplied Google Account. |
|
300 |
||
301 |
Args: |
|
302 |
link_name: link name used in URLs to identify user |
|
303 |
id: a Google Account object; optional, current logged-in user will |
|
304 |
be used (or False will be returned if no user is logged in) |
|
305 |
""" |
|
306 |
id = getIdIfMissing(id) |
|
307 |
||
308 |
if not id: |
|
309 |
# id not supplied and no Google Account logged in, so link name cannot |
|
310 |
# belong to an unspecified User |
|
311 |
return False |
|
312 |
||
313 |
user = getUserFromId(id) |
|
314 |
||
315 |
if not user: |
|
316 |
# no User corresponding to id Google Account, so no link name at all |
|
317 |
return False |
|
318 |
||
319 |
if user.link_name != link_name: |
|
320 |
# User exists for id, but does not have this link name |
|
321 |
return False |
|
322 |
||
323 |
return True # link_name does actually belong to this Google Account |
|
324 |
||
325 |
||
326 |
def updateOrCreateUserFromId(id, **user_properties): |
|
327 |
"""Update existing User entity, or create new one with supplied properties. |
|
328 |
||
329 |
Args: |
|
330 |
id: a Google Account object |
|
331 |
**user_properties: keyword arguments that correspond to User entity |
|
332 |
properties and their values |
|
333 |
||
334 |
Returns: |
|
335 |
the User entity corresponding to the Google Account, with any supplied |
|
336 |
properties changed, or a new User entity now associated with the Google |
|
337 |
Account and with the supplied properties |
|
338 |
""" |
|
339 |
# attempt to retrieve the existing User |
|
340 |
user = getUserFromId(id) |
|
341 |
||
342 |
if not user: |
|
343 |
# user did not exist, so create one in a transaction |
|
344 |
key_name = getUserKeyNameFromId(id) |
|
345 |
user = soc.models.user.User.get_or_insert( |
|
346 |
key_name, id=id, **user_properties) |
|
347 |
||
348 |
# there is no way to be sure if get_or_insert() returned a new User or |
|
349 |
# got an existing one due to a race, so update with user_properties anyway, |
|
350 |
# in a transaction |
|
351 |
return updateUserProperties(user, **user_properties) |
|
352 |
||
353 |
||
354 |
def updateUserProperties(user, **user_properties): |
|
355 |
"""Update existing User entity using supplied User properties. |
|
356 |
||
357 |
Args: |
|
358 |
user: a User entity |
|
359 |
**user_properties: keyword arguments that correspond to User entity |
|
360 |
properties and their values |
|
361 |
||
362 |
Returns: |
|
363 |
the original User entity with any supplied properties changed |
|
364 |
""" |
|
365 |
def update(): |
|
366 |
return _unsafeUpdateUserProperties(user, **user_properties) |
|
367 |
||
368 |
return db.run_in_transaction(update) |
|
369 |
||
370 |
||
371 |
def _unsafeUpdateUserProperties(user, **user_properties): |
|
372 |
"""(see updateUserProperties) |
|
373 |
||
374 |
Like updateUserProperties(), but not run within a transaction. |
|
375 |
""" |
|
376 |
properties = user.properties() |
|
377 |
||
378 |
for prop in properties.values(): |
|
379 |
if prop.name in user_properties: |
|
380 |
if prop.name == 'former_ids': |
|
381 |
# former_ids cannot be overwritten directly |
|
382 |
continue |
|
383 |
||
384 |
value = user_properties[prop.name] |
|
385 |
||
386 |
if prop.name == 'id': |
|
387 |
old_id = user.id |
|
388 |
||
389 |
if value != old_id: |
|
390 |
user.former_ids.append(old_id) |
|
391 |
||
392 |
prop.__set__(user, value) |
|
393 |
||
394 |
user.put() |
|
395 |
return user |