|
code@331
|
1 |
from functools import wraps
|
|
code@331
|
2 |
|
|
code@342
|
3 |
from django.core.cache import cache
|
|
code@331
|
4 |
from django.shortcuts import render_to_response
|
|
code@331
|
5 |
from django.template import RequestContext
|
|
code@331
|
6 |
|
|
code@331
|
7 |
|
|
code@415
|
8 |
def use_template(template_name, request_context=True):
|
|
code@415
|
9 |
"""A view decorator that wraps render_to_response and uses RequestContext by default"""
|
|
code@415
|
10 |
from functools import wraps
|
|
code@415
|
11 |
from django.template import RequestContext
|
|
code@415
|
12 |
from django.shortcuts import render_to_response
|
|
code@331
|
13 |
|
|
code@331
|
14 |
def _decorator(func):
|
|
code@331
|
15 |
@wraps(func)
|
|
code@415
|
16 |
def _closure(request, *args, **kwargs):
|
|
code@415
|
17 |
# Use a different variable to avoid 'referenced before
|
|
code@415
|
18 |
# assignment'. 'template' is the kwarg used by
|
|
code@415
|
19 |
# direct_to_template; copy its interface for consistency.
|
|
code@415
|
20 |
actual_template = kwargs.pop("template", template_name)
|
|
code@415
|
21 |
actual_rc = kwargs.pop("request_context", request_context)
|
|
code@415
|
22 |
val = func(request, *args, **kwargs)
|
|
code@415
|
23 |
if isinstance(val, dict) and template_name is not None:
|
|
code@415
|
24 |
if actual_rc:
|
|
code@415
|
25 |
context = RequestContext(request)
|
|
code@415
|
26 |
return render_to_response(actual_template, val,
|
|
code@415
|
27 |
context_instance=context)
|
|
code@331
|
28 |
else:
|
|
code@415
|
29 |
return render_to_response(actual_template, val)
|
|
code@415
|
30 |
return val
|
|
code@331
|
31 |
return _closure
|
|
code@331
|
32 |
return _decorator
|
|
code@331
|
33 |
|
|
code@331
|
34 |
|
|
code@331
|
35 |
def iso8601(dt):
|
|
code@331
|
36 |
"Format a datetime object as ISO8601"
|
|
code@331
|
37 |
|
|
code@331
|
38 |
return dt.strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
code@331
|
39 |
|
|
code@342
|
40 |
|
|
code@342
|
41 |
def cached_property(func):
|
|
code@342
|
42 |
@wraps(func)
|
|
code@342
|
43 |
def _closure(self):
|
|
code@342
|
44 |
try:
|
|
code@342
|
45 |
cache_key = self.get_cache_key()
|
|
code@342
|
46 |
except Exception:
|
|
code@342
|
47 |
cache_key = "%s.%s.%s(%s)" % (self.__class__.__module__,
|
|
code@342
|
48 |
self.__class__.__name__,
|
|
code@342
|
49 |
func.__name__,
|
|
code@342
|
50 |
self.pk)
|
|
code@342
|
51 |
val = cache.get(cache_key)
|
|
code@342
|
52 |
|
|
code@342
|
53 |
if val is None:
|
|
code@342
|
54 |
val = func(self)
|
|
code@342
|
55 |
cache.set(cache_key, val)
|
|
code@342
|
56 |
|
|
code@342
|
57 |
return val
|
|
code@342
|
58 |
return property(_closure)
|
|
code@416
|
59 |
|
|
code@416
|
60 |
|
|
code@416
|
61 |
def dictproperty(method):
|
|
code@416
|
62 |
"""Turn dictionary or attribute access into a function call"""
|
|
code@416
|
63 |
|
|
code@416
|
64 |
class _Object(object):
|
|
code@416
|
65 |
def __init__(self, obj):
|
|
code@416
|
66 |
self.obj = obj
|
|
code@416
|
67 |
def __getattr__(self, attr):
|
|
code@416
|
68 |
return method(self.obj, attr)
|
|
code@416
|
69 |
__getitem__ = __getattr__
|
|
code@416
|
70 |
_Object.__name__ = method.__name__
|
|
code@416
|
71 |
|
|
code@416
|
72 |
return property(_Object)
|