Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / templatetags / filters.py @ 84d26d62

History | View | Annotate | Download (5.1 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 5841646f Olga Brani
45 d220292f Sofia Papagiannaki
from astakos.im.settings import PAGINATE_BY
46 d220292f Sofia Papagiannaki
47 5841646f Olga Brani
48 ebd369d0 Sofia Papagiannaki
register = template.Library()
49 ebd369d0 Sofia Papagiannaki
50 661c4479 Sofia Papagiannaki
DELIM = ','
51 661c4479 Sofia Papagiannaki
52 9a06d96f Olga Brani
53 5056da3d Olga Brani
@register.filter
54 5056da3d Olga Brani
def monthssince(joined_date):
55 5056da3d Olga Brani
    now = datetime.datetime.now()
56 9a06d96f Olga Brani
    date = datetime.datetime(
57 9a06d96f Olga Brani
        year=joined_date.year, month=joined_date.month, day=1)
58 5056da3d Olga Brani
    months = []
59 9a06d96f Olga Brani
60 5056da3d Olga Brani
    month = date.month
61 5056da3d Olga Brani
    year = date.year
62 9a06d96f Olga Brani
    timestamp = calendar.timegm(date.utctimetuple())
63 9a06d96f Olga Brani
64 5056da3d Olga Brani
    while date < now:
65 5056da3d Olga Brani
        months.append((year, month, timestamp))
66 9a06d96f Olga Brani
67 5056da3d Olga Brani
        if date.month < 12:
68 5056da3d Olga Brani
            month = date.month + 1
69 5056da3d Olga Brani
            year = date.year
70 5056da3d Olga Brani
        else:
71 5056da3d Olga Brani
            month = 1
72 5056da3d Olga Brani
            year = date.year + 1
73 9a06d96f Olga Brani
74 5056da3d Olga Brani
        date = datetime.datetime(year=year, month=month, day=1)
75 9a06d96f Olga Brani
        timestamp = calendar.timegm(date.utctimetuple())
76 9a06d96f Olga Brani
77 5056da3d Olga Brani
    return months
78 9a06d96f Olga Brani
79 9a06d96f Olga Brani
80 ebd369d0 Sofia Papagiannaki
@register.filter
81 ebd369d0 Sofia Papagiannaki
def lookup(d, key):
82 d68590fd Sofia Papagiannaki
    return d.get(key)
83 d68590fd Sofia Papagiannaki
84 bdc1c103 Olga Brani
@register.filter
85 bdc1c103 Olga Brani
def lookup_uni(d, key):
86 bdc1c103 Olga Brani
    return d.get(unicode(key))
87 bdc1c103 Olga Brani
88 5ce3ce4f Sofia Papagiannaki
89 d68590fd Sofia Papagiannaki
@register.filter
90 d68590fd Sofia Papagiannaki
def dkeys(d):
91 b27c104d Olga Brani
    return d.keys()
92 b27c104d Olga Brani
93 5ce3ce4f Sofia Papagiannaki
94 b27c104d Olga Brani
@register.filter
95 5056da3d Olga Brani
def month_name(month_number):
96 5056da3d Olga Brani
    return calendar.month_name[month_number]
97 9a06d96f Olga Brani
98 5056da3d Olga Brani
99 5056da3d Olga Brani
@register.filter
100 9a06d96f Olga Brani
def todate(value, arg=''):
101 5056da3d Olga Brani
    secs = int(value) / 1000
102 789bcaf9 Sofia Papagiannaki
    return datetime.datetime.fromtimestamp(secs)
103 789bcaf9 Sofia Papagiannaki
104 789bcaf9 Sofia Papagiannaki
105 caf70869 Sofia Papagiannaki
# @register.filter
106 caf70869 Sofia Papagiannaki
# def rcut(value, chars='/'):
107 caf70869 Sofia Papagiannaki
#     return value.rstrip(chars)
108 661c4479 Sofia Papagiannaki
109 9a06d96f Olga Brani
110 f2a4ce70 Sofia Papagiannaki
@register.filter
111 f2a4ce70 Sofia Papagiannaki
def paginate(l, args):
112 c0b26605 Sofia Papagiannaki
    l = l or []
113 c0b26605 Sofia Papagiannaki
    page, delim, sorting = args.partition(DELIM)
114 c0b26605 Sofia Papagiannaki
    if sorting:
115 c0b26605 Sofia Papagiannaki
        if isinstance(l, QuerySet):
116 c0b26605 Sofia Papagiannaki
            l = l.order_by(sorting)
117 c0b26605 Sofia Papagiannaki
        elif isinstance(l, list):
118 c0b26605 Sofia Papagiannaki
            default = ''
119 c0b26605 Sofia Papagiannaki
            if sorting.endswith('_date'):
120 c0b26605 Sofia Papagiannaki
                default = datetime.datetime.utcfromtimestamp(0)
121 c0b26605 Sofia Papagiannaki
            l.sort(key=lambda i: getattr(i, sorting)
122 c0b26605 Sofia Papagiannaki
                   if getattr(i, sorting) else default)
123 c0b26605 Sofia Papagiannaki
    paginator = Paginator(l, PAGINATE_BY)
124 c0b26605 Sofia Papagiannaki
    try:
125 c0b26605 Sofia Papagiannaki
        paginator.len
126 c0b26605 Sofia Papagiannaki
    except AttributeError:
127 c0b26605 Sofia Papagiannaki
        paginator._count = len(list(l))
128 c0b26605 Sofia Papagiannaki
    
129 c0b26605 Sofia Papagiannaki
    try:
130 c0b26605 Sofia Papagiannaki
        page_number = int(page)
131 c0b26605 Sofia Papagiannaki
    except ValueError:
132 c0b26605 Sofia Papagiannaki
        if page == 'last':
133 c0b26605 Sofia Papagiannaki
            page_number = paginator.num_pages
134 c0b26605 Sofia Papagiannaki
        else:
135 c0b26605 Sofia Papagiannaki
            page_number = 1
136 c0b26605 Sofia Papagiannaki
    try:
137 c0b26605 Sofia Papagiannaki
        page = paginator.page(page_number)
138 c0b26605 Sofia Papagiannaki
    except EmptyPage:
139 c0b26605 Sofia Papagiannaki
        page = paginator.page(1)
140 c0b26605 Sofia Papagiannaki
    return page
141 661c4479 Sofia Papagiannaki
142 9a06d96f Olga Brani
143 661c4479 Sofia Papagiannaki
@register.filter
144 661c4479 Sofia Papagiannaki
def concat(str1, str2):
145 661c4479 Sofia Papagiannaki
    if not str2:
146 661c4479 Sofia Papagiannaki
        return str(str1)
147 dfdc64d2 Sofia Papagiannaki
    return '%s%s%s' % (str1, DELIM, str2)
148 dfdc64d2 Sofia Papagiannaki
149 9a06d96f Olga Brani
150 dfdc64d2 Sofia Papagiannaki
@register.filter
151 dfdc64d2 Sofia Papagiannaki
def items(d):
152 dfdc64d2 Sofia Papagiannaki
    if isinstance(d, defaultdict):
153 dfdc64d2 Sofia Papagiannaki
        return d.iteritems()
154 9a06d96f Olga Brani
    return d
155 ed2f0452 Olga Brani
156 ed2f0452 Olga Brani
157 ed2f0452 Olga Brani
@register.filter
158 ed2f0452 Olga Brani
def get_value_after_dot(value):
159 7c76af95 Olga Brani
    return value.split(".")[1]
160 7c76af95 Olga Brani
161 84d26d62 Sofia Papagiannaki
# @register.filter
162 84d26d62 Sofia Papagiannaki
# def strip_http(value):
163 84d26d62 Sofia Papagiannaki
#     return value.replace('http://','')[:-1]
164 dcd1c383 Olga Brani
165 dcd1c383 Olga Brani
166 dcd1c383 Olga Brani
from math import log
167 bdc1c103 Olga Brani
unit_list = zip(['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'], [0, 0, 0, 0, 0, 0])
168 dcd1c383 Olga Brani
169 dcd1c383 Olga Brani
@register.filter
170 dcd1c383 Olga Brani
def sizeof_fmt(num):
171 5841646f Olga Brani
    
172 dcd1c383 Olga Brani
    """Human friendly file size"""
173 5841646f Olga Brani
    if math.isinf(num):
174 5841646f Olga Brani
        return 'Unlimited'
175 dcd1c383 Olga Brani
    if num > 1:
176 dcd1c383 Olga Brani
        exponent = min(int(log(num, 1024)), len(unit_list) - 1)
177 dcd1c383 Olga Brani
        quotient = float(num) / 1024**exponent
178 dcd1c383 Olga Brani
        unit, num_decimals = unit_list[exponent]
179 5841646f Olga Brani
        format_string = '{0:.%sf} {1}' % (num_decimals)
180 dcd1c383 Olga Brani
        return format_string.format(quotient, unit)
181 dcd1c383 Olga Brani
    if num == 0:
182 dcd1c383 Olga Brani
        return '0 bytes'
183 dcd1c383 Olga Brani
    if num == 1:
184 dcd1c383 Olga Brani
        return '1 byte'
185 dcd1c383 Olga Brani
    else:
186 b6852727 Olga Brani
       return '';
187 5841646f Olga Brani
   
188 5841646f Olga Brani
@register.filter
189 5841646f Olga Brani
def isinf(v):
190 5841646f Olga Brani
    if math.isinf(v):
191 5841646f Olga Brani
        return 'Unlimited'
192 5841646f Olga Brani
    else:
193 59728d4e Olga Brani
        return v
194 59728d4e Olga Brani
    
195 59728d4e Olga Brani
@register.filter
196 59728d4e Olga Brani
def truncatename(v):
197 59728d4e Olga Brani
    max = 18
198 59728d4e Olga Brani
    length = len(v)
199 59728d4e Olga Brani
    if length>max:
200 59728d4e Olga Brani
        return v[:max]+'...'
201 59728d4e Olga Brani
    else:
202 f366e3ed Olga Brani
        return v[:20]