author | Sverre Rabbelier <srabbelier@gmail.com> |
Sun, 15 Mar 2009 13:36:14 +0000 | |
changeset 1865 | f00720cddea0 |
parent 1761 | cf39e8705fac |
child 2077 | fd2e83a297c7 |
permissions | -rw-r--r-- |
365
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python2.5 |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
2 |
# |
1308
35b75ffcbb37
Partially reverted "Update the copyright notice for 2009."
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1307
diff
changeset
|
3 |
# Copyright 2008 the Melange authors. |
365
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
4 |
# |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
5 |
# Licensed under the Apache License, Version 2.0 (the "License"); |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
6 |
# you may not use this file except in compliance with the License. |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
7 |
# You may obtain a copy of the License at |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
8 |
# |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
9 |
# http://www.apache.org/licenses/LICENSE-2.0 |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
10 |
# |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
11 |
# Unless required by applicable law or agreed to in writing, software |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
12 |
# distributed under the License is distributed on an "AS IS" BASIS, |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
13 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
14 |
# See the License for the specific language governing permissions and |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
15 |
# limitations under the License. |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
16 |
|
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
17 |
"""Views decorators. |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
18 |
""" |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
19 |
|
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
20 |
__authors__ = [ |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
21 |
'"Pawel Solyga" <pawel.solyga@gmail.com>', |
987
6fd5c561b446
Cache sidebar with a simple caching API
Sverre Rabbelier <srabbelier@gmail.com>
parents:
972
diff
changeset
|
22 |
'"Sverre Rabbelier" <sverre@rabbelier.nl>', |
365
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
23 |
] |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
24 |
|
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
25 |
|
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
26 |
import logging |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
27 |
|
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
28 |
from functools import wraps |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
29 |
|
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
30 |
from google.appengine.runtime import DeadlineExceededError |
1585
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
31 |
from google.appengine.runtime.apiproxy_errors import CapabilityDisabledError |
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
32 |
|
365
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
33 |
|
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
34 |
from django import http |
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
35 |
|
873
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
36 |
from soc.logic import dicts |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
37 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
38 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
39 |
class Error(Exception): |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
40 |
pass |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
41 |
|
365
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
42 |
|
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
43 |
def view(func): |
499
d22e4fe8e64b
Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
367
diff
changeset
|
44 |
"""Decorator that insists that exceptions are handled by view. |
d22e4fe8e64b
Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
367
diff
changeset
|
45 |
""" |
1585
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
46 |
|
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
47 |
from soc.logic.helper import timeline |
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
48 |
from soc.logic.models.site import logic as site_logic |
1592
4465cda55182
Add a maintenance end date
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1585
diff
changeset
|
49 |
from soc.logic.models.user import logic as user_logic |
1761
cf39e8705fac
Except and properly handle Errors in view decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1632
diff
changeset
|
50 |
from soc.views import out_of_band |
cf39e8705fac
Except and properly handle Errors in view decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1632
diff
changeset
|
51 |
from soc.views.helper import responses |
1585
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
52 |
|
365
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
53 |
@wraps(func) |
1585
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
54 |
def view_wrapper(request, *args, **kwds): |
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
55 |
site = site_logic.getSingleton() |
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
56 |
|
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
57 |
# don't redirect admins, or if we're at /maintenance already |
1592
4465cda55182
Add a maintenance end date
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1585
diff
changeset
|
58 |
no_redirect = user_logic.isDeveloper() or request.path == '/maintenance' |
1585
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
59 |
|
1592
4465cda55182
Add a maintenance end date
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1585
diff
changeset
|
60 |
if (not no_redirect) and timeline.isActivePeriod(site, 'maintenance'): |
1585
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
61 |
return http.HttpResponseRedirect('/maintenance') |
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
62 |
|
365
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
63 |
try: |
1585
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
64 |
return func(request, *args, **kwds) |
1632
73a9bc6a85d9
Remove unused imports and rename too short variable names in soc.views.helper.decorators module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1592
diff
changeset
|
65 |
except DeadlineExceededError, exception: |
73a9bc6a85d9
Remove unused imports and rename too short variable names in soc.views.helper.decorators module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1592
diff
changeset
|
66 |
logging.exception(exception) |
1582
f2f352ad193f
Redirect to an error page when a GAE exception occurs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1454
diff
changeset
|
67 |
return http.HttpResponseRedirect('/soc/content/deadline_exceeded.html') |
1632
73a9bc6a85d9
Remove unused imports and rename too short variable names in soc.views.helper.decorators module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1592
diff
changeset
|
68 |
except CapabilityDisabledError, exception: |
73a9bc6a85d9
Remove unused imports and rename too short variable names in soc.views.helper.decorators module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1592
diff
changeset
|
69 |
logging.exception(exception) |
1585
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
70 |
# assume the site is in maintenance if we get CDE |
06fb5950cb03
Make it possible to put the site in maintenance mode
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1582
diff
changeset
|
71 |
return http.HttpResponseRedirect('/maintenance') |
1632
73a9bc6a85d9
Remove unused imports and rename too short variable names in soc.views.helper.decorators module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1592
diff
changeset
|
72 |
except MemoryError, exception: |
73a9bc6a85d9
Remove unused imports and rename too short variable names in soc.views.helper.decorators module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1592
diff
changeset
|
73 |
logging.exception(exception) |
1582
f2f352ad193f
Redirect to an error page when a GAE exception occurs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1454
diff
changeset
|
74 |
return http.HttpResponseRedirect('/soc/content/memory_error.html') |
1632
73a9bc6a85d9
Remove unused imports and rename too short variable names in soc.views.helper.decorators module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1592
diff
changeset
|
75 |
except AssertionError, exception: |
73a9bc6a85d9
Remove unused imports and rename too short variable names in soc.views.helper.decorators module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1592
diff
changeset
|
76 |
logging.exception(exception) |
1582
f2f352ad193f
Redirect to an error page when a GAE exception occurs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1454
diff
changeset
|
77 |
return http.HttpResponseRedirect('/soc/content/assertion_error.html') |
1761
cf39e8705fac
Except and properly handle Errors in view decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1632
diff
changeset
|
78 |
except out_of_band.Error, error: |
cf39e8705fac
Except and properly handle Errors in view decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1632
diff
changeset
|
79 |
return responses.errorResponse(error, request) |
365
74dec172944e
Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff
changeset
|
80 |
|
873
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
81 |
return view_wrapper |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
82 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
83 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
84 |
def merge_params(func): |
906
275d2f457c50
Fix missing dots in soc.views.helper.decoratos module docstrings.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
873
diff
changeset
|
85 |
"""Decorator that merges 'params' with self._params. |
873
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
86 |
""" |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
87 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
88 |
@wraps(func) |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
89 |
def wrapper(self, *args, **kwargs): |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
90 |
params = kwargs.get('params', {}) |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
91 |
kwargs['params'] = dicts.merge(params, self._params) |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
92 |
return func(self, *args, **kwargs) |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
93 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
94 |
return wrapper |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
95 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
96 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
97 |
def check_access(func): |
906
275d2f457c50
Fix missing dots in soc.views.helper.decoratos module docstrings.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
873
diff
changeset
|
98 |
"""This decorator does access checks for the specified view method. |
873
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
99 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
100 |
The rights dictionary is extracted from 'params', or, if either 'params' or |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
101 |
'rights' do not exist, from self._params['rights']. |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
102 |
""" |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
103 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
104 |
# Do not pollute helper.decorators with access specific imports |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
105 |
from soc.views import out_of_band |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
106 |
from soc.views import helper |
972
43018f61b481
Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents:
906
diff
changeset
|
107 |
from soc.views.helper import responses |
873
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
108 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
109 |
@wraps(func) |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
110 |
def wrapper(self, request, access_type, *args, **kwargs): |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
111 |
params = kwargs.get('params', {}) |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
112 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
113 |
# Try to extract rights |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
114 |
if 'rights' in params: |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
115 |
rights = params['rights'] |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
116 |
else: |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
117 |
rights = self._params['rights'] |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
118 |
|
972
43018f61b481
Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents:
906
diff
changeset
|
119 |
check_kwargs = kwargs.copy() |
43018f61b481
Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents:
906
diff
changeset
|
120 |
context = responses.getUniversalContext(request) |
1454
37eb949c3267
Add some missing useJavaScript calls
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1308
diff
changeset
|
121 |
responses.useJavaScript(context, self._params['js_uses_all']) |
972
43018f61b481
Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents:
906
diff
changeset
|
122 |
|
1017
6ad4fdb48840
Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1007
diff
changeset
|
123 |
id = context['account'] |
6ad4fdb48840
Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1007
diff
changeset
|
124 |
user = context['user'] |
6ad4fdb48840
Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1007
diff
changeset
|
125 |
|
972
43018f61b481
Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents:
906
diff
changeset
|
126 |
check_kwargs['GET'] = request.GET |
43018f61b481
Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents:
906
diff
changeset
|
127 |
check_kwargs['POST'] = request.POST |
43018f61b481
Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents:
906
diff
changeset
|
128 |
check_kwargs['context'] = context |
43018f61b481
Remove the request and arg parameter from the checkAccess call
Sverre Rabbelier <srabbelier@gmail.com>
parents:
906
diff
changeset
|
129 |
|
1017
6ad4fdb48840
Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1007
diff
changeset
|
130 |
# reset and pre-fill the Checker's cache |
6ad4fdb48840
Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1007
diff
changeset
|
131 |
rights.setCurrentUser(id, user) |
6ad4fdb48840
Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1007
diff
changeset
|
132 |
|
873
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
133 |
# Do the access check dance |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
134 |
try: |
1007
3b66772d21a5
Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents:
987
diff
changeset
|
135 |
rights.checkAccess(access_type, check_kwargs) |
873
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
136 |
except out_of_band.Error, error: |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
137 |
return helper.responses.errorResponse(error, request) |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
138 |
return func(self, request, access_type, *args, **kwargs) |
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
139 |
|
cbb1d15ffe91
Added a merge_params and check_access decorator
Sverre Rabbelier <srabbelier@gmail.com>
parents:
499
diff
changeset
|
140 |
return wrapper |