author | Sverre Rabbelier <srabbelier@gmail.com> |
Sun, 12 Oct 2008 14:58:47 +0000 | |
changeset 303 | 4f1bb54ddae5 |
parent 302 | 3b9c52170f46 |
child 305 | 972d28056d9d |
permissions | -rw-r--r-- |
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:
diff
changeset
|
1 |
#!/usr/bin/python2.5 |
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:
diff
changeset
|
2 |
# |
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:
diff
changeset
|
3 |
# Copyright 2008 the Melange authors. |
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:
diff
changeset
|
4 |
# |
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:
diff
changeset
|
5 |
# Licensed under the Apache License, Version 2.0 (the "License"); |
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:
diff
changeset
|
6 |
# you may not use this file except in compliance with the License. |
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:
diff
changeset
|
7 |
# You may obtain a copy of the License at |
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:
diff
changeset
|
8 |
# |
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:
diff
changeset
|
9 |
# http://www.apache.org/licenses/LICENSE-2.0 |
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:
diff
changeset
|
10 |
# |
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:
diff
changeset
|
11 |
# Unless required by applicable law or agreed to in writing, software |
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:
diff
changeset
|
12 |
# distributed under the License is distributed on an "AS IS" BASIS, |
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:
diff
changeset
|
13 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
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:
diff
changeset
|
14 |
# See the License for the specific language governing permissions and |
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:
diff
changeset
|
15 |
# limitations under the License. |
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:
diff
changeset
|
16 |
|
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:
diff
changeset
|
17 |
"""Helpers functions for updating different kinds of models in datastore. |
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:
diff
changeset
|
18 |
""" |
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:
diff
changeset
|
19 |
|
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:
diff
changeset
|
20 |
__authors__ = [ |
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
21 |
'"Todd Larsen" <tlarsen@google.com>', |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
22 |
'"Sverre Rabbelier" <sverer@rabbelier.nl>', |
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:
diff
changeset
|
23 |
'"Pawel Solyga" <pawel.solyga@gmail.com>', |
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:
diff
changeset
|
24 |
] |
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:
diff
changeset
|
25 |
|
263
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
26 |
|
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:
diff
changeset
|
27 |
from google.appengine.ext import db |
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:
diff
changeset
|
28 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
29 |
from soc.logic import key_name |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
30 |
from soc.logic import out_of_band |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
31 |
|
254
e88beba437a3
Fix missing blank line to follow PythonStyleGuide in model.py.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
141
diff
changeset
|
32 |
|
263
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
33 |
def getFullClassName(cls): |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
34 |
"""Returns fully-qualified module.class name string.""" |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
35 |
return '%s.%s' % (cls.__module__, cls.__name__) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
36 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
37 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
38 |
def buildTypedQueryString(base_class, derived_class=None): |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
39 |
"""Returns a GQL query string compatible with PolyModel. |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
40 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
41 |
Args: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
42 |
base_class: Model class that inherits directly from |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
43 |
polymodel.PolyModel, such as soc.models.work.Work |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
44 |
derived_class: optional more-specific Model class that |
303
4f1bb54ddae5
Moved soc/logic/helper/access to soc/views/helper/access
Sverre Rabbelier <srabbelier@gmail.com>
parents:
302
diff
changeset
|
45 |
derives from base_class, such as soc.models.document.Document; |
263
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
46 |
default is None, in which case the inheritance_line |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
47 |
property is *not* tested by the returned query string |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
48 |
""" |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
49 |
query_str_parts = ['SELECT * FROM ', base_class.__name__] |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
50 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
51 |
if derived_class: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
52 |
query_str_parts.extend( |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
53 |
[" WHERE inheritance_line = '", getFullClassName(derived_class), "'"]) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
54 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
55 |
return ''.join(query_str_parts) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
56 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
57 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
58 |
def buildOrderedQueryString(base_class, derived_class=None, order_by=None): |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
59 |
"""Returns a an ordered GQL query string compatible with PolyModel. |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
60 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
61 |
Args: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
62 |
base_class, derived_class: see buildTypedQueryString() |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
63 |
order_by: optional field name by which to order the query results; |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
64 |
default is None, in which case no ORDER BY clause is placed in |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
65 |
the query string |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
66 |
""" |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
67 |
query_str_parts = [ |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
68 |
buildTypedQueryString(base_class, derived_class=derived_class)] |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
69 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
70 |
if order_by: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
71 |
query_str_parts.extend([' ORDER BY ', order_by]) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
72 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
73 |
return ''.join(query_str_parts) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
74 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
75 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
76 |
def getEntitiesForLimitAndOffset(base_class, limit, offset=0, |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
77 |
derived_class=None, order_by=None): |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
78 |
"""Returns entities for given offset and limit or None if not found. |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
79 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
80 |
Args: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
81 |
limit: max amount of entities to return |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
82 |
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:
254
diff
changeset
|
83 |
return; default is zero (first entity) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
84 |
""" |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
85 |
query_string = buildOrderedQueryString( |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
86 |
base_class, derived_class=derived_class, order_by=order_by) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
87 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
88 |
query = db.GqlQuery(query_string) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
89 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
90 |
return query.fetch(limit, offset) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
91 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
92 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
93 |
def getNearestEntities(base_class, fields_to_try, derived_class=None): |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
94 |
"""Get entities just before and just after the described entity. |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
95 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
96 |
Args: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
97 |
fields_to_try: ordered list of key/value pairs that "describe" |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
98 |
the desired entity (which may not necessarily exist), where key is |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
99 |
the name of the field, and value is an instance of that field |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
100 |
used in the comparison; if value is None, that field is skipped |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
101 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
102 |
Returns: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
103 |
a two-tuple: ([nearest_entities], 'field_name') |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
104 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
105 |
nearest_entities: list of entities being those just before and just |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
106 |
after the (possibly non-existent) entity identified by the first |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
107 |
of the supplied (non-None) fields |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
108 |
OR |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
109 |
possibly None if query had no results for the supplied field |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
110 |
that was used. |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
111 |
""" |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
112 |
# SELECT * FROM base_class WHERE inheritance_line = 'derived_class' |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
113 |
typed_query_str = buildTypedQueryString( |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
114 |
base_class, derived_class=derived_class) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
115 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
116 |
if derived_class: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
117 |
typed_query_str = typed_query_str + ' AND ' |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
118 |
else: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
119 |
typed_query_str = typed_query_str + ' WHERE ' |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
120 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
121 |
for field, value in fields_to_try: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
122 |
if value is None: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
123 |
# skip this not-supplied field |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
124 |
continue |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
125 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
126 |
query = db.GqlQuery('%s%s > :1' % (typed_query_str, field), value) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
127 |
return query.fetch(1), field |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
128 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
129 |
# all fields exhausted, and all had None values |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
130 |
return (None, None) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
131 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
132 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
133 |
def findNearestEntitiesOffset(width, base_class, fields_to_try, |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
134 |
derived_class=None): |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
135 |
"""Finds offset of beginning of a range of entities around the nearest. |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
136 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
137 |
Args: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
138 |
width: the width of the "found" window around the nearest User found |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
139 |
base_class, fields_to_try, derived_class: see getNearestEntities() |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
140 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
141 |
Returns: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
142 |
an offset into the list of entities that is width/2 less than the |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
143 |
offset of the first entity returned by getNearestEntities(), or zero |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
144 |
if that offset would be less than zero |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
145 |
OR |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
146 |
None if there are no nearest entities or the offset of the beginning of |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
147 |
the range cannot be found for some reason |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
148 |
""" |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
149 |
# find entity "nearest" to supplied fields |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
150 |
nearest_entities, field = getNearestEntities( |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
151 |
base_class, fields_to_try, derived_class=derived_class) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
152 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
153 |
if not nearest_entities: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
154 |
# no "nearest" entity, so indicate that with None |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
155 |
return None |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
156 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
157 |
nearest_entity = nearest_entities[0] |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
158 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
159 |
# start search for beginning of nearest Users range at offset zero |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
160 |
offset = 0 |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
161 |
entities = getEntitiesForLimitAndOffset( |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
162 |
base_class, width, offset=offset, derived_class=derived_class) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
163 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
164 |
while True: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
165 |
for entity in entities: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
166 |
if getattr(nearest_entity, field) == getattr(entity, field): |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
167 |
# nearest User found in current search range, so return a range start |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
168 |
return max(0, (offset - (width/2))) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
169 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
170 |
offset = offset + 1 |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
171 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
172 |
# nearest User was not in the current search range, so fetch the next set |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
173 |
entities = getEntitiesForLimitAndOffset( |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
174 |
base_class, width, offset=offset, derived_class=derived_class) |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
175 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
176 |
if not entities: |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
177 |
# nearest User never found, so indicate that with None |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
178 |
break |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
179 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
180 |
return None |
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
181 |
|
9b39d93b677f
Make findNearestUsers() code in soc/logic/site/id_user.py more generic and
Todd Larsen <tlarsen@google.com>
parents:
254
diff
changeset
|
182 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
183 |
class BaseLogic(): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
184 |
"""Base logic for entity classes. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
185 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
186 |
The BaseLogic class functions specific to Entity classes by relying |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
187 |
on the the child-classes to implement _model, _name and _key_name |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
188 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
189 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
190 |
def _updateField(self, model, name, value): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
191 |
"""Hook called when a field is updated. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
192 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
193 |
Base classes should override if any special actions need to be |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
194 |
taken when a field is updated. The field is not updated if the |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
195 |
method does not return a True value. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
196 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
197 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
198 |
return True |
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:
diff
changeset
|
199 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
200 |
def getFromKeyName(self, key_name): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
201 |
""""Returns User entity for key_name or None if not found. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
202 |
- |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
203 |
- Args: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
204 |
- key_name: key name of entity |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
205 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
206 |
return self._model.get_by_key_name(key_name) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
207 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
208 |
def getFromFields(self, **kwargs): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
209 |
"""Returns the entity for a given link name, or None if not found. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
210 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
211 |
Args: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
212 |
link_name: a link name of the entity that uniquely identifies it |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
213 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
214 |
# lookup by Sponsor key name |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
215 |
key_name = self.getKeyNameForFields(**kwargs) |
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:
diff
changeset
|
216 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
217 |
if key_name: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
218 |
entity = self._model.get_by_key_name(key_name) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
219 |
else: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
220 |
entity = None |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
221 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
222 |
return entity |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
223 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
224 |
def getIfFields(self, **kwargs): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
225 |
"""Returns Sponsor entity for supplied link name if one exists. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
226 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
227 |
Args: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
228 |
link_name: a link name of the Sponsor that uniquely identifies it |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
229 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
230 |
Returns: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
231 |
* None if link name is false. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
232 |
* Sponsor entity for supplied link_name |
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:
diff
changeset
|
233 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
234 |
Raises: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
235 |
out_of_band.ErrorResponse if link name is not false, but no Sponsor entity |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
236 |
with the supplied link name exists in the Datastore |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
237 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
238 |
if not all(kwargs.values()): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
239 |
# exit without error, to let view know that link_name was not supplied |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
240 |
return None |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
241 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
242 |
entity = self.getFromFields(**kwargs) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
243 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
244 |
if entity: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
245 |
# a Sponsor exist for this link_name, so return that Sponsor entity |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
246 |
return entity |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
247 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
248 |
fields = [] |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
249 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
250 |
for key, value in kwargs.iteritems(): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
251 |
fields.extend('"%s" is "%s"' % (key, value)) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
252 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
253 |
# else: fields were supplied, but there is no Entity that has it |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
254 |
raise out_of_band.ErrorResponse( |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
255 |
'There is no %s with %s.' % (self._name, ''.join(fields)), status=404) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
256 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
257 |
def getKeyNameForFields(self, **kwargs): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
258 |
"""Return a Datastore key_name for a Sponsor from the link name. |
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:
diff
changeset
|
259 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
260 |
Args: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
261 |
link_name: a link name of the entity that uniquely identifies it |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
262 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
263 |
if not all(kwargs.values()): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
264 |
return None |
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:
diff
changeset
|
265 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
266 |
return self._keyName(**kwargs) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
267 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
268 |
def getForLimitAndOffset(self, limit, offset=0): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
269 |
"""Returns entities for given offset and limit or None if not found. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
270 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
271 |
Args: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
272 |
limit: max amount of entities to return |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
273 |
offset: optional offset in entities list which defines first entity to |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
274 |
return; default is zero (first entity) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
275 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
276 |
query = self._model.all() |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
277 |
return query.fetch(limit, offset) |
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:
diff
changeset
|
278 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
279 |
def updateModelProperties(self, model, **model_properties): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
280 |
"""Update existing model entity using supplied model properties. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
281 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
282 |
Args: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
283 |
model: a model entity |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
284 |
**model_properties: keyword arguments that correspond to model entity |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
285 |
properties and their values |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
286 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
287 |
Returns: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
288 |
the original model entity with any supplied properties changed |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
289 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
290 |
def update(): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
291 |
return self._unsafeUpdateModelProperties(model, **model_properties) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
292 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
293 |
return db.run_in_transaction(update) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
294 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
295 |
def _unsafeUpdateModelProperties(self, model, **model_properties): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
296 |
"""(see updateModelProperties) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
297 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
298 |
Like updateModelProperties(), but not run within a transaction. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
299 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
300 |
properties = model.properties() |
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:
diff
changeset
|
301 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
302 |
for prop in properties.values(): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
303 |
name = prop.name |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
304 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
305 |
if not name in self._skip_properties and name in model_properties: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
306 |
value = model_properties[prop.name] |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
307 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
308 |
if self._updateField(model, name, value): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
309 |
prop.__set__(model, value) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
310 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
311 |
model.put() |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
312 |
return model |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
313 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
314 |
def updateOrCreateFromKeyName(self, properties, key_name): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
315 |
"""Update existing entity, or create new one with supplied properties. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
316 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
317 |
Args: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
318 |
link_name: a link_name of the entity that uniquely identifies it |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
319 |
**properties: keyword arguments that correspond to entity |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
320 |
properties and their values |
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:
diff
changeset
|
321 |
|
299
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
322 |
Returns: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
323 |
the entity corresponding to the key_name, with any supplied |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
324 |
properties changed, or a new entity now associated with the |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
325 |
supplied key_name and properties. |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
326 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
327 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
328 |
entity = self.getFromKeyName(key_name) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
329 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
330 |
if not entity: |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
331 |
# entity did not exist, so create one in a transaction |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
332 |
entity = self._model.get_or_insert(key_name, **properties) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
333 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
334 |
# there is no way to be sure if get_or_insert() returned a new entity or |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
335 |
# got an existing one due to a race, so update with sponsor_properties anyway, |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
336 |
# in a transaction |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
337 |
return self.updateModelProperties(entity, **properties) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
338 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
339 |
def updateOrCreateFromFields(self, properties, **kwargs): |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
340 |
"""Like updateOrCreateFromKeyName, but resolves **kwargs to a key_name first |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
341 |
""" |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
342 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
343 |
# attempt to retrieve the existing entity |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
344 |
key_name = self.getKeyNameForFields(**kwargs) |
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
345 |
|
a1cc853a56e5
Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents:
263
diff
changeset
|
346 |
return self.updateOrCreateFromKeyName(properties, key_name) |
302
3b9c52170f46
Fix not working delete Sponsor functionality after recent commit. Add delete() method to Base class. Make soc.views.site.sponsor.delete() request handler use this method.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
299
diff
changeset
|
347 |
|
3b9c52170f46
Fix not working delete Sponsor functionality after recent commit. Add delete() method to Base class. Make soc.views.site.sponsor.delete() request handler use this method.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
299
diff
changeset
|
348 |
def delete(self, entity): |
3b9c52170f46
Fix not working delete Sponsor functionality after recent commit. Add delete() method to Base class. Make soc.views.site.sponsor.delete() request handler use this method.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
299
diff
changeset
|
349 |
"""Delete existing entity from datastore. |
3b9c52170f46
Fix not working delete Sponsor functionality after recent commit. Add delete() method to Base class. Make soc.views.site.sponsor.delete() request handler use this method.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
299
diff
changeset
|
350 |
|
3b9c52170f46
Fix not working delete Sponsor functionality after recent commit. Add delete() method to Base class. Make soc.views.site.sponsor.delete() request handler use this method.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
299
diff
changeset
|
351 |
Args: |
3b9c52170f46
Fix not working delete Sponsor functionality after recent commit. Add delete() method to Base class. Make soc.views.site.sponsor.delete() request handler use this method.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
299
diff
changeset
|
352 |
entity: an existing entity in datastore |
3b9c52170f46
Fix not working delete Sponsor functionality after recent commit. Add delete() method to Base class. Make soc.views.site.sponsor.delete() request handler use this method.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
299
diff
changeset
|
353 |
""" |
3b9c52170f46
Fix not working delete Sponsor functionality after recent commit. Add delete() method to Base class. Make soc.views.site.sponsor.delete() request handler use this method.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
299
diff
changeset
|
354 |
entity.delete() |
3b9c52170f46
Fix not working delete Sponsor functionality after recent commit. Add delete() method to Base class. Make soc.views.site.sponsor.delete() request handler use this method.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
299
diff
changeset
|
355 |