Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / templatetags / filters.py @ 27e51b28

History | View | Annotate | Download (5.2 kB)

1 ebd369d0 Sofia Papagiannaki
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2 ebd369d0 Sofia Papagiannaki
#
3 ebd369d0 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 ebd369d0 Sofia Papagiannaki
# without modification, are permitted provided that the following
5 ebd369d0 Sofia Papagiannaki
# conditions are met:
6 ebd369d0 Sofia Papagiannaki
#
7 ebd369d0 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 ebd369d0 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 ebd369d0 Sofia Papagiannaki
#      disclaimer.
10 ebd369d0 Sofia Papagiannaki
#
11 ebd369d0 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 ebd369d0 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 ebd369d0 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 ebd369d0 Sofia Papagiannaki
#      provided with the distribution.
15 ebd369d0 Sofia Papagiannaki
#
16 ebd369d0 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 ebd369d0 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 ebd369d0 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 ebd369d0 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 ebd369d0 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 ebd369d0 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 ebd369d0 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 ebd369d0 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 ebd369d0 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 ebd369d0 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 ebd369d0 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 ebd369d0 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 ebd369d0 Sofia Papagiannaki
#
29 ebd369d0 Sofia Papagiannaki
# The views and conclusions contained in the software and
30 ebd369d0 Sofia Papagiannaki
# documentation are those of the authors and should not be
31 ebd369d0 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 ebd369d0 Sofia Papagiannaki
# or implied, of GRNET S.A.
33 ebd369d0 Sofia Papagiannaki
34 5056da3d Olga Brani
import calendar
35 5056da3d Olga Brani
import datetime
36 5841646f Olga Brani
import math
37 ebd369d0 Sofia Papagiannaki
38 dfdc64d2 Sofia Papagiannaki
from collections import defaultdict
39 dfdc64d2 Sofia Papagiannaki
40 d220292f Sofia Papagiannaki
from django import template
41 25b51727 Sofia Papagiannaki
from django.core.paginator import Paginator, EmptyPage
42 2c4b2a96 Sofia Papagiannaki
from django.db.models.query import QuerySet
43 d220292f Sofia Papagiannaki
44 0156e40c Kostas Papadimitriou
from synnefo.lib.ordereddict import OrderedDict
45 5841646f Olga Brani
46 26551b92 Kostas Papadimitriou
from astakos.im import settings
47 26551b92 Kostas Papadimitriou
from astakos.im.models import ProjectResourceGrant
48 5841646f Olga Brani
49 ebd369d0 Sofia Papagiannaki
register = template.Library()
50 ebd369d0 Sofia Papagiannaki
51 661c4479 Sofia Papagiannaki
DELIM = ','
52 661c4479 Sofia Papagiannaki
53 8fb8d0cf Giorgos Korfiatis
54 5056da3d Olga Brani
@register.filter
55 5056da3d Olga Brani
def monthssince(joined_date):
56 5056da3d Olga Brani
    now = datetime.datetime.now()
57 9a06d96f Olga Brani
    date = datetime.datetime(
58 9a06d96f Olga Brani
        year=joined_date.year, month=joined_date.month, day=1)
59 5056da3d Olga Brani
    months = []
60 9a06d96f Olga Brani
61 5056da3d Olga Brani
    month = date.month
62 5056da3d Olga Brani
    year = date.year
63 9a06d96f Olga Brani
    timestamp = calendar.timegm(date.utctimetuple())
64 9a06d96f Olga Brani
65 5056da3d Olga Brani
    while date < now:
66 5056da3d Olga Brani
        months.append((year, month, timestamp))
67 9a06d96f Olga Brani
68 5056da3d Olga Brani
        if date.month < 12:
69 5056da3d Olga Brani
            month = date.month + 1
70 5056da3d Olga Brani
            year = date.year
71 5056da3d Olga Brani
        else:
72 5056da3d Olga Brani
            month = 1
73 5056da3d Olga Brani
            year = date.year + 1
74 9a06d96f Olga Brani
75 5056da3d Olga Brani
        date = datetime.datetime(year=year, month=month, day=1)
76 9a06d96f Olga Brani
        timestamp = calendar.timegm(date.utctimetuple())
77 9a06d96f Olga Brani
78 5056da3d Olga Brani
    return months
79 9a06d96f Olga Brani
80 8fb8d0cf Giorgos Korfiatis
81 e8fd06f6 Sofia Papagiannaki
@register.filter
82 e8fd06f6 Sofia Papagiannaki
def to_unicode(s):
83 e8fd06f6 Sofia Papagiannaki
    return unicode(s)
84 e8fd06f6 Sofia Papagiannaki
85 8fb8d0cf Giorgos Korfiatis
86 e8fd06f6 Sofia Papagiannaki
@register.filter
87 e8fd06f6 Sofia Papagiannaki
def to_string(s):
88 e8fd06f6 Sofia Papagiannaki
    return str(s)
89 9a06d96f Olga Brani
90 8fb8d0cf Giorgos Korfiatis
91 ebd369d0 Sofia Papagiannaki
@register.filter
92 ebd369d0 Sofia Papagiannaki
def lookup(d, key):
93 6556e514 Sofia Papagiannaki
    try:
94 251b83be Giorgos Korfiatis
        return d.get(key)
95 6556e514 Sofia Papagiannaki
    except:
96 6556e514 Sofia Papagiannaki
        return
97 d68590fd Sofia Papagiannaki
98 8fb8d0cf Giorgos Korfiatis
99 bdc1c103 Olga Brani
@register.filter
100 bdc1c103 Olga Brani
def lookup_uni(d, key):
101 bdc1c103 Olga Brani
    return d.get(unicode(key))
102 bdc1c103 Olga Brani
103 5ce3ce4f Sofia Papagiannaki
104 d68590fd Sofia Papagiannaki
@register.filter
105 d68590fd Sofia Papagiannaki
def dkeys(d):
106 b27c104d Olga Brani
    return d.keys()
107 b27c104d Olga Brani
108 5ce3ce4f Sofia Papagiannaki
109 b27c104d Olga Brani
@register.filter
110 5056da3d Olga Brani
def month_name(month_number):
111 5056da3d Olga Brani
    return calendar.month_name[month_number]
112 9a06d96f Olga Brani
113 5056da3d Olga Brani
114 5056da3d Olga Brani
@register.filter
115 9a06d96f Olga Brani
def todate(value, arg=''):
116 5056da3d Olga Brani
    secs = int(value) / 1000
117 789bcaf9 Sofia Papagiannaki
    return datetime.datetime.fromtimestamp(secs)
118 789bcaf9 Sofia Papagiannaki
119 789bcaf9 Sofia Papagiannaki
120 caf70869 Sofia Papagiannaki
# @register.filter
121 caf70869 Sofia Papagiannaki
# def rcut(value, chars='/'):
122 caf70869 Sofia Papagiannaki
#     return value.rstrip(chars)
123 661c4479 Sofia Papagiannaki
124 9a06d96f Olga Brani
125 f2a4ce70 Sofia Papagiannaki
@register.filter
126 f2a4ce70 Sofia Papagiannaki
def paginate(l, args):
127 c0b26605 Sofia Papagiannaki
    l = l or []
128 c0b26605 Sofia Papagiannaki
    page, delim, sorting = args.partition(DELIM)
129 c0b26605 Sofia Papagiannaki
    if sorting:
130 c0b26605 Sofia Papagiannaki
        if isinstance(l, QuerySet):
131 c0b26605 Sofia Papagiannaki
            l = l.order_by(sorting)
132 c0b26605 Sofia Papagiannaki
        elif isinstance(l, list):
133 c0b26605 Sofia Papagiannaki
            default = ''
134 c0b26605 Sofia Papagiannaki
            if sorting.endswith('_date'):
135 c0b26605 Sofia Papagiannaki
                default = datetime.datetime.utcfromtimestamp(0)
136 c0b26605 Sofia Papagiannaki
            l.sort(key=lambda i: getattr(i, sorting)
137 c0b26605 Sofia Papagiannaki
                   if getattr(i, sorting) else default)
138 8998f09a Sofia Papagiannaki
    paginator = Paginator(l, settings.PAGINATE_BY)
139 c0b26605 Sofia Papagiannaki
    try:
140 c0b26605 Sofia Papagiannaki
        paginator.len
141 c0b26605 Sofia Papagiannaki
    except AttributeError:
142 c0b26605 Sofia Papagiannaki
        paginator._count = len(list(l))
143 6795eb09 Kostas Papadimitriou
144 c0b26605 Sofia Papagiannaki
    try:
145 c0b26605 Sofia Papagiannaki
        page_number = int(page)
146 c0b26605 Sofia Papagiannaki
    except ValueError:
147 c0b26605 Sofia Papagiannaki
        if page == 'last':
148 c0b26605 Sofia Papagiannaki
            page_number = paginator.num_pages
149 c0b26605 Sofia Papagiannaki
        else:
150 c0b26605 Sofia Papagiannaki
            page_number = 1
151 c0b26605 Sofia Papagiannaki
    try:
152 c0b26605 Sofia Papagiannaki
        page = paginator.page(page_number)
153 c0b26605 Sofia Papagiannaki
    except EmptyPage:
154 c0b26605 Sofia Papagiannaki
        page = paginator.page(1)
155 c0b26605 Sofia Papagiannaki
    return page
156 661c4479 Sofia Papagiannaki
157 9a06d96f Olga Brani
158 661c4479 Sofia Papagiannaki
@register.filter
159 661c4479 Sofia Papagiannaki
def concat(str1, str2):
160 661c4479 Sofia Papagiannaki
    if not str2:
161 661c4479 Sofia Papagiannaki
        return str(str1)
162 dfdc64d2 Sofia Papagiannaki
    return '%s%s%s' % (str1, DELIM, str2)
163 dfdc64d2 Sofia Papagiannaki
164 9a06d96f Olga Brani
165 dfdc64d2 Sofia Papagiannaki
@register.filter
166 dfdc64d2 Sofia Papagiannaki
def items(d):
167 dfdc64d2 Sofia Papagiannaki
    if isinstance(d, defaultdict):
168 dfdc64d2 Sofia Papagiannaki
        return d.iteritems()
169 9a06d96f Olga Brani
    return d
170 ed2f0452 Olga Brani
171 ed2f0452 Olga Brani
172 ed2f0452 Olga Brani
@register.filter
173 ed2f0452 Olga Brani
def get_value_after_dot(value):
174 7c76af95 Olga Brani
    return value.split(".")[1]
175 7c76af95 Olga Brani
176 84d26d62 Sofia Papagiannaki
# @register.filter
177 84d26d62 Sofia Papagiannaki
# def strip_http(value):
178 84d26d62 Sofia Papagiannaki
#     return value.replace('http://','')[:-1]
179 dcd1c383 Olga Brani
180 dcd1c383 Olga Brani
181 5841646f Olga Brani
@register.filter
182 6795eb09 Kostas Papadimitriou
def truncatename(v, max=18, append="..."):
183 59728d4e Olga Brani
    length = len(v)
184 8fb8d0cf Giorgos Korfiatis
    if length > max:
185 6795eb09 Kostas Papadimitriou
        return v[:max] + append
186 59728d4e Olga Brani
    else:
187 6795eb09 Kostas Papadimitriou
        return v
188 8327782d Sofia Papagiannaki
189 8fb8d0cf Giorgos Korfiatis
190 8327782d Sofia Papagiannaki
@register.filter
191 8327782d Sofia Papagiannaki
def resource_groups(project_definition):
192 8327782d Sofia Papagiannaki
    try:
193 8327782d Sofia Papagiannaki
        grants = project_definition.projectresourcegrant_set
194 8327782d Sofia Papagiannaki
        return grants.values_list('resource__group', flat=True)
195 8327782d Sofia Papagiannaki
    except:
196 8327782d Sofia Papagiannaki
        return ()
197 8327782d Sofia Papagiannaki
198 8fb8d0cf Giorgos Korfiatis
199 8327782d Sofia Papagiannaki
@register.filter
200 8327782d Sofia Papagiannaki
def resource_grants(project_definition):
201 8327782d Sofia Papagiannaki
    try:
202 8327782d Sofia Papagiannaki
        grants = project_definition.projectresourcegrant_set
203 8327782d Sofia Papagiannaki
        grants = grants.values_list(
204 8327782d Sofia Papagiannaki
            'resource__name',
205 73fbaec4 Sofia Papagiannaki
            'member_capacity'
206 8327782d Sofia Papagiannaki
        )
207 26551b92 Kostas Papadimitriou
        return dict((e[0], e[1]) for e in grants)
208 8327782d Sofia Papagiannaki
    except:
209 172ce682 Sofia Papagiannaki
        return {}