author | Todd Larsen <tlarsen@google.com> |
Fri, 03 Oct 2008 01:32:34 +0000 | |
changeset 263 | 9b39d93b677f |
parent 262 | 52a42831d9d6 |
child 299 | a1cc853a56e5 |
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__ = [ |
229
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
21 |
'"Chen Lunpeng" <forever.clp@gmail.com>', |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
22 |
'"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
|
23 |
] |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
24 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
25 |
|
131 | 26 |
import re |
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 |
|
202
b8b4a83788d4
A key_name controller module to collect all of the name...() functions that
Todd Larsen <tlarsen@google.com>
parents:
184
diff
changeset
|
31 |
from soc.logic import key_name |
263
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
32 |
from soc.logic import model |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
33 |
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
|
34 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
35 |
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
|
36 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
37 |
|
131 | 38 |
def getUserKeyNameFromId(id): |
39 |
"""Return a Datastore key_name for a User derived from a Google Account. |
|
40 |
||
41 |
Args: |
|
42 |
id: a Google Account (users.User) object |
|
43 |
""" |
|
44 |
if not id: |
|
45 |
return None |
|
46 |
||
202
b8b4a83788d4
A key_name controller module to collect all of the name...() functions that
Todd Larsen <tlarsen@google.com>
parents:
184
diff
changeset
|
47 |
return key_name.nameUser(id.email()) |
131 | 48 |
|
49 |
||
184
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
50 |
def getIdIfMissing(id=None): |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
51 |
"""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
|
52 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
53 |
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
|
54 |
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
|
55 |
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
|
56 |
other view). |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
57 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
58 |
Args: |
131 | 59 |
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
|
60 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
61 |
Returns: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
62 |
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
|
63 |
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
|
64 |
is logged in). |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
65 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
66 |
if not id: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
67 |
# 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
|
68 |
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
|
69 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
70 |
return id |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
71 |
|
223
a18e93e21672
Use the LINKNAME_PATTERN from its new home in key_name.py. Also, add some
Todd Larsen <tlarsen@google.com>
parents:
202
diff
changeset
|
72 |
|
263
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
73 |
def getUsersForLimitAndOffset(limit, offset=0): |
184
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
74 |
"""Returns Users entities for given offset and limit or None if not found. |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
75 |
|
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
76 |
Args: |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
77 |
limit: max amount of entities to return |
263
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
78 |
offset: optional offset in entities list which defines first entity to |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
79 |
return; default is zero (first entity) |
184
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
80 |
""" |
263
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
81 |
return model.getEntitiesForLimitAndOffset( |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
82 |
soc.models.user.User, limit, offset=offset, order_by='id') |
131 | 83 |
|
223
a18e93e21672
Use the LINKNAME_PATTERN from its new home in key_name.py. Also, add some
Todd Larsen <tlarsen@google.com>
parents:
202
diff
changeset
|
84 |
|
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
85 |
def getUserFromId(id): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
86 |
"""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
|
87 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
88 |
Args: |
131 | 89 |
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
|
90 |
""" |
184
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
91 |
return 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
|
92 |
|
223
a18e93e21672
Use the LINKNAME_PATTERN from its new home in key_name.py. Also, add some
Todd Larsen <tlarsen@google.com>
parents:
202
diff
changeset
|
93 |
|
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
94 |
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
|
95 |
"""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
|
96 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
97 |
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
|
98 |
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
|
99 |
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
|
100 |
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
|
101 |
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
|
102 |
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
|
103 |
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
|
104 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
105 |
Args: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
106 |
user: None (usually), or an existing User entity |
131 | 107 |
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
|
108 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
109 |
Returns: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
110 |
* 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
|
111 |
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
|
112 |
* 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
|
113 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
114 |
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
|
115 |
# 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
|
116 |
user = getUserFromId(id) |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
117 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
118 |
return user |
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 |
|
229
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
121 |
def getNearestUsers(id=None, link_name=None): |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
122 |
"""Get User entities just before and just after the specified User. |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
123 |
|
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
124 |
Args: |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
125 |
id: a Google Account (users.User) object; default is None (not supplied) |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
126 |
link_name: link name string; default is None (not supplied) |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
127 |
|
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
128 |
Returns: |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
129 |
User entities being those just before and just after the (possibly |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
130 |
non-existent) User for given id or link_name, |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
131 |
OR |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
132 |
possibly None if query had no results or neither id or link_name were |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
133 |
supplied. |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
134 |
""" |
263
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
135 |
return model.getNearestEntities( |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
136 |
soc.models.user.User, [('id', id), ('link_name', link_name)]) |
229
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
137 |
|
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
138 |
|
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
139 |
def findNearestUsersOffset(width, id=None, link_name=None): |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
140 |
"""Finds offset of beginning of a range of Users around the nearest User. |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
141 |
|
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
142 |
Args: |
230
cb2c7ae5424d
Fix typo in findNearestUsersOffset() __doc__ string missed in r661.
Todd Larsen <tlarsen@google.com>
parents:
229
diff
changeset
|
143 |
width: the width of the "found" window around the nearest User found |
229
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
144 |
id: a Google Account (users.User) object, or None |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
145 |
link_name: link name input in the Lookup form or None if not supplied. |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
146 |
|
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
147 |
Returns: |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
148 |
an offset into the list of Users that is width/2 less than the |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
149 |
offset of the first User returned by getNearestUsers(), or zero if |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
150 |
that offset would be less than zero |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
151 |
OR |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
152 |
None if there are no nearest Users or the offset of the beginning of |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
153 |
the range cannot be found for some reason |
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
154 |
""" |
263
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
155 |
return model.findNearestEntitiesOffset( |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
262
diff
changeset
|
156 |
width, soc.models.user.User, [('id', id), ('link_name', link_name)]) |
229
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
157 |
|
a46c238be8db
Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents:
223
diff
changeset
|
158 |
|
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
159 |
def doesUserExist(id): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
160 |
"""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
|
161 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
162 |
Args: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
163 |
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
|
164 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
165 |
if getUserFromId(id): |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
166 |
return True |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
167 |
else: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
168 |
return False |
245
b14c2c4d3484
Moved isLinkNameFormatValid function out of id_user module to new common module. This function is going to be used by other form validation functions that require to validate linkname (different kind of Groups, Programs etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
230
diff
changeset
|
169 |
|
b14c2c4d3484
Moved isLinkNameFormatValid function out of id_user module to new common module. This function is going to be used by other form validation functions that require to validate linkname (different kind of Groups, Programs etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
230
diff
changeset
|
170 |
|
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
|
171 |
def isIdUser(id=None): |
166
4d2cbd0ea977
Fixed too long lines and deleted unused imports in id_user.py.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
164
diff
changeset
|
172 |
"""Returns True if a Google Account has it's 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
|
173 |
|
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
|
174 |
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
|
175 |
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
|
176 |
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
|
177 |
""" |
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
|
178 |
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
|
179 |
|
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
|
180 |
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
|
181 |
# 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
|
182 |
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
|
183 |
|
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
|
184 |
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
|
185 |
|
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
|
186 |
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
|
187 |
# 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
|
188 |
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
|
189 |
|
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
|
190 |
return True |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
191 |
|
245
b14c2c4d3484
Moved isLinkNameFormatValid function out of id_user module to new common module. This function is going to be used by other form validation functions that require to validate linkname (different kind of Groups, Programs etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
230
diff
changeset
|
192 |
|
131 | 193 |
def isIdDeveloper(id=None): |
164
afdf502c6cc4
Documentation updates and one typo fix.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
141
diff
changeset
|
194 |
"""Returns True if a Google Account is a Developer with special privileges. |
131 | 195 |
|
138
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
196 |
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
|
197 |
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
|
198 |
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
|
199 |
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
|
200 |
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
|
201 |
|
e1167bdf71a4
Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents:
137
diff
changeset
|
202 |
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
|
203 |
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
|
204 |
|
131 | 205 |
Args: |
206 |
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
|
207 |
the current logged-in user is checked |
131 | 208 |
""" |
137
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
209 |
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
|
210 |
|
131 | 211 |
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
|
212 |
# 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
|
213 |
# 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
|
214 |
return False |
131 | 215 |
|
137
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
216 |
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
|
217 |
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
|
218 |
# 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
|
219 |
# 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
|
220 |
return True |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
221 |
|
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
222 |
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
|
223 |
|
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
224 |
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
|
225 |
# 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
|
226 |
# 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
|
227 |
# 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
|
228 |
return False |
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
229 |
|
0f572149449d
Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents:
136
diff
changeset
|
230 |
return user.is_developer |
131 | 231 |
|
232 |
||
262
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
233 |
def isIdAvailable(new_id, existing_user=None, existing_key_name=None): |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
234 |
"""Returns True if Google Account is available for use by existing User. |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
235 |
|
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
236 |
Args: |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
237 |
new_id: a Google Account (users.User) object with a (possibly) new email |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
238 |
existing_user: an existing User entity; default is None, in which case |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
239 |
existing_key_name is used to look up the User entity |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
240 |
existing_key_name: the key_name of an existing User entity, used |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
241 |
when existing_user is not supplied; default is None |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
242 |
""" |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
243 |
if not existing_user: |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
244 |
existing_user = getUserFromKeyName(existing_key_name) |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
245 |
|
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
246 |
if existing_user: |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
247 |
old_email = existing_user.id.email() |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
248 |
else: |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
249 |
old_email = None |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
250 |
|
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
251 |
if new_id.email() == old_email: |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
252 |
# "new" email is same as existing User wanting it, so it is "available" |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
253 |
return True |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
254 |
# else: "new" email truly is new to the existing User, so keep checking |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
255 |
|
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
256 |
if not isIdUser(new_id): |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
257 |
# new email address also does not belong to any other User, |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
258 |
# so it is available |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
259 |
return True |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
260 |
|
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
261 |
# email does not already belong to this User, but to some other User |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
262 |
return False |
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
263 |
|
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
264 |
|
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
265 |
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
|
266 |
"""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
|
267 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
268 |
Args: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
269 |
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
|
270 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
271 |
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
|
272 |
|
245
b14c2c4d3484
Moved isLinkNameFormatValid function out of id_user module to new common module. This function is going to be used by other form validation functions that require to validate linkname (different kind of Groups, Programs etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
230
diff
changeset
|
273 |
|
184
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
274 |
def getUserFromKeyName(key_name): |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
275 |
"""Returns User entity for key_name or None if not found. |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
276 |
|
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
277 |
Args: |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
278 |
key_name: key name of User entity |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
279 |
""" |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
280 |
return soc.models.user.User.get_by_key_name(key_name) |
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
281 |
|
245
b14c2c4d3484
Moved isLinkNameFormatValid function out of id_user module to new common module. This function is going to be used by other form validation functions that require to validate linkname (different kind of Groups, Programs etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
230
diff
changeset
|
282 |
|
112
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
283 |
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
|
284 |
"""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
|
285 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
286 |
Args: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
287 |
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
|
288 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
289 |
Returns: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
290 |
* 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
|
291 |
* 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
|
292 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
293 |
Raises: |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
294 |
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
|
295 |
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
|
296 |
""" |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
297 |
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
|
298 |
# 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
|
299 |
return None |
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
300 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
301 |
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
|
302 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
303 |
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
|
304 |
# 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
|
305 |
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
|
306 |
|
4d9895fb15bc
Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff
changeset
|
307 |
# 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
|
308 |
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
|
309 |
'There is no user with a "link name" of "%s".' % link_name, status=404) |
131 | 310 |
|
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
|
311 |
|
136
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
312 |
def isLinkNameAvailableForId(link_name, id=None): |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
313 |
"""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
|
314 |
|
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
|
315 |
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
|
316 |
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
|
317 |
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
|
318 |
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
|
319 |
|
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
320 |
Returns: |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
321 |
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
|
322 |
so it is currently "available" to any User |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
323 |
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
|
324 |
associated with the specified Google Account |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
325 |
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
|
326 |
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
|
327 |
""" |
136
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
328 |
link_name_exists = doesLinkNameExist(link_name) |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
329 |
|
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
330 |
if not link_name_exists: |
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
331 |
# 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
|
332 |
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
|
333 |
|
136
a95f511bfcf8
Replace checkLinkNameForId() with isLinkNameAvailableForId(), and implement
Todd Larsen <tlarsen@google.com>
parents:
135
diff
changeset
|
334 |
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
|
335 |
|
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
|
336 |
|
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
|
337 |
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
|
338 |
"""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
|
339 |
|
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
|
340 |
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
|
341 |
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
|
342 |
""" |
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
|
343 |
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
|
344 |
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
|
345 |
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
|
346 |
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
|
347 |
|
131 | 348 |
|
349 |
def doesLinkNameBelongToId(link_name, id=None): |
|
350 |
"""Returns True if supplied link name belongs to supplied Google Account. |
|
351 |
||
352 |
Args: |
|
353 |
link_name: link name used in URLs to identify user |
|
354 |
id: a Google Account object; optional, current logged-in user will |
|
355 |
be used (or False will be returned if no user is logged in) |
|
356 |
""" |
|
357 |
id = getIdIfMissing(id) |
|
358 |
||
359 |
if not id: |
|
360 |
# id not supplied and no Google Account logged in, so link name cannot |
|
361 |
# belong to an unspecified User |
|
362 |
return False |
|
363 |
||
364 |
user = getUserFromId(id) |
|
365 |
||
366 |
if not user: |
|
367 |
# no User corresponding to id Google Account, so no link name at all |
|
368 |
return False |
|
369 |
||
370 |
if user.link_name != link_name: |
|
371 |
# User exists for id, but does not have this link name |
|
372 |
return False |
|
373 |
||
374 |
return True # link_name does actually belong to this Google Account |
|
375 |
||
376 |
||
377 |
def updateOrCreateUserFromId(id, **user_properties): |
|
378 |
"""Update existing User entity, or create new one with supplied properties. |
|
379 |
||
380 |
Args: |
|
381 |
id: a Google Account object |
|
382 |
**user_properties: keyword arguments that correspond to User entity |
|
383 |
properties and their values |
|
384 |
||
385 |
Returns: |
|
386 |
the User entity corresponding to the Google Account, with any supplied |
|
387 |
properties changed, or a new User entity now associated with the Google |
|
388 |
Account and with the supplied properties |
|
389 |
""" |
|
390 |
# attempt to retrieve the existing User |
|
391 |
user = getUserFromId(id) |
|
392 |
||
393 |
if not user: |
|
394 |
# user did not exist, so create one in a transaction |
|
395 |
key_name = getUserKeyNameFromId(id) |
|
396 |
user = soc.models.user.User.get_or_insert( |
|
397 |
key_name, id=id, **user_properties) |
|
398 |
||
399 |
# there is no way to be sure if get_or_insert() returned a new User or |
|
400 |
# got an existing one due to a race, so update with user_properties anyway, |
|
401 |
# in a transaction |
|
402 |
return updateUserProperties(user, **user_properties) |
|
403 |
||
245
b14c2c4d3484
Moved isLinkNameFormatValid function out of id_user module to new common module. This function is going to be used by other form validation functions that require to validate linkname (different kind of Groups, Programs etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
230
diff
changeset
|
404 |
|
184
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
405 |
def updateUserForKeyName(key_name, **user_properties): |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
406 |
"""Update existing User entity for keyname with supplied properties. |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
407 |
|
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
408 |
Args: |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
409 |
key_name: key name of User entity |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
410 |
**user_properties: keyword arguments that correspond to User entity |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
411 |
properties and their values |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
412 |
|
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
413 |
Returns: |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
414 |
the User entity corresponding to the Google Account, with any supplied |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
415 |
properties changed, or a new User entity now associated with the Google |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
416 |
Account and with the supplied properties |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
417 |
""" |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
418 |
# attempt to retrieve the existing User |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
419 |
user = getUserFromKeyName(key_name) |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
420 |
|
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
421 |
if not user: |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
422 |
return None |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
423 |
|
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
424 |
# there is no way to be sure if get_or_insert() returned a new User or |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
425 |
# got an existing one due to a race, so update with user_properties anyway, |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
426 |
# in a transaction |
7c0b42aecd9b
Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
166
diff
changeset
|
427 |
return updateUserProperties(user, **user_properties) |
131 | 428 |
|
245
b14c2c4d3484
Moved isLinkNameFormatValid function out of id_user module to new common module. This function is going to be used by other form validation functions that require to validate linkname (different kind of Groups, Programs etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
230
diff
changeset
|
429 |
|
131 | 430 |
def updateUserProperties(user, **user_properties): |
431 |
"""Update existing User entity using supplied User properties. |
|
432 |
||
433 |
Args: |
|
434 |
user: a User entity |
|
435 |
**user_properties: keyword arguments that correspond to User entity |
|
436 |
properties and their values |
|
437 |
||
438 |
Returns: |
|
439 |
the original User entity with any supplied properties changed |
|
440 |
""" |
|
441 |
def update(): |
|
442 |
return _unsafeUpdateUserProperties(user, **user_properties) |
|
443 |
||
444 |
return db.run_in_transaction(update) |
|
445 |
||
245
b14c2c4d3484
Moved isLinkNameFormatValid function out of id_user module to new common module. This function is going to be used by other form validation functions that require to validate linkname (different kind of Groups, Programs etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
230
diff
changeset
|
446 |
|
131 | 447 |
def _unsafeUpdateUserProperties(user, **user_properties): |
448 |
"""(see updateUserProperties) |
|
449 |
||
450 |
Like updateUserProperties(), but not run within a transaction. |
|
451 |
""" |
|
452 |
properties = user.properties() |
|
453 |
||
454 |
for prop in properties.values(): |
|
455 |
if prop.name in user_properties: |
|
456 |
if prop.name == 'former_ids': |
|
457 |
# former_ids cannot be overwritten directly |
|
458 |
continue |
|
459 |
||
460 |
value = user_properties[prop.name] |
|
461 |
||
462 |
if prop.name == 'id': |
|
463 |
old_id = user.id |
|
464 |
||
465 |
if value != old_id: |
|
466 |
user.former_ids.append(old_id) |
|
467 |
||
468 |
prop.__set__(user, value) |
|
469 |
||
470 |
user.put() |
|
262
52a42831d9d6
Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents:
245
diff
changeset
|
471 |
return user |