~widelands-dev/widelands-website/trunk

« back to all changes in this revision

Viewing changes to pybb/util.py

  • Committer: franku
  • Date: 2019-03-04 17:47:12 UTC
  • mfrom: (521 widelands)
  • mto: This revision was merged to the branch mainline in revision 523.
  • Revision ID: somal@arcor.de-20190304174712-rlkrxc939fmcveuo
merged trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
48
48
    return decorator
49
49
 
50
50
 
51
 
def paged(paged_list_name, per_page):  # , per_page_var='per_page'):
52
 
    """Parse page from GET data and pass it to view.
53
 
 
54
 
    Split the query set returned from view.
55
 
 
56
 
    """
57
 
 
58
 
    def decorator(func):
59
 
        def wrapper(request, *args, **kwargs):
60
 
            result = func(request, *args, **kwargs)
61
 
            if not isinstance(result, dict):
62
 
                return result
63
 
            try:
64
 
                page = int(request.GET.get('page', 1))
65
 
            except ValueError:
66
 
                page = 1
67
 
 
68
 
            real_per_page = per_page
69
 
 
70
 
            # if per_page_var:
71
 
            # try:
72
 
            #value = int(request.GET[per_page_var])
73
 
            # except (ValueError, KeyError):
74
 
            # pass
75
 
            # else:
76
 
            # if value > 0:
77
 
            #real_per_page = value
78
 
 
79
 
            from django.core.paginator import Paginator
80
 
            paginator = Paginator(result['paged_qs'], real_per_page)
81
 
            result[paged_list_name] = paginator.page(page).object_list
82
 
            result['page'] = page
83
 
            result['page_list'] = range(1, paginator.num_pages + 1)
84
 
            result['pages'] = paginator.num_pages
85
 
            result['per_page'] = real_per_page
86
 
            result['request'] = request
87
 
            return result
88
 
        return wrapper
89
 
 
90
 
    return decorator
91
 
 
92
 
 
93
51
def ajax(func):
94
52
    """Checks request.method is POST. Return error in JSON in other case.
95
53
 
206
164
        return text
207
165
 
208
166
 
209
 
def absolute_url(path):
210
 
    return 'http://%s%s' % (pybb_settings.HOST, path)
211
 
 
212
 
 
213
 
def memoize_method(func):
214
 
    """Cached result of function call."""
215
 
 
216
 
    def wrapper(self, *args, **kwargs):
217
 
        CACHE_NAME = '__memcache'
218
 
        try:
219
 
            cache = getattr(self, CACHE_NAME)
220
 
        except AttributeError:
221
 
            cache = {}
222
 
            setattr(self, CACHE_NAME, cache)
223
 
        key = (func, tuple(args), frozenset(kwargs.items()))
224
 
        if key not in cache:
225
 
            cache[key] = func(self, *args, **kwargs)
226
 
        return cache[key]
227
 
    return wrapper
228
 
 
229
 
 
230
167
def unescape(text):
231
168
    """Do reverse escaping."""
232
169