Revision 9efd0075 snf-astakos-app/astakos/im/templatetags/filters.py

b/snf-astakos-app/astakos/im/templatetags/filters.py
40 40
from django import template
41 41
from django.core.paginator import Paginator, EmptyPage
42 42
from django.db.models.query import QuerySet
43
from django.utils.safestring import mark_safe
43 44

  
44 45
from synnefo.lib.ordereddict import OrderedDict
45 46

  
46 47
from astakos.im import settings
47 48
from astakos.im.models import ProjectResourceGrant
49
from astakos.im.views import util as views_util
50
from astakos.im import util
48 51

  
49 52
register = template.Library()
50 53

  
......
180 183

  
181 184
@register.filter
182 185
def truncatename(v, max=18, append="..."):
183
    length = len(v)
184
    if length > max:
185
        return v[:max] + append
186
    else:
187
        return v
186
    util.truncatename(v, max, append)
188 187

  
189 188

  
190 189
@register.filter
191
def resource_groups(project_definition):
192
    try:
193
        grants = project_definition.projectresourcegrant_set
194
        return grants.values_list('resource__group', flat=True)
195
    except:
196
        return ()
190
def selected_resource_groups(project_or_app):
191
    if not project_or_app:
192
        return []
193

  
194
    grants = project_or_app.resource_set
195
    resources = grants.values_list('resource__name', flat=True)
196
    return map(lambda r: r.split(".")[0], resources)
197 197

  
198 198

  
199 199
@register.filter
200
def resource_grants(project_definition):
200
def resource_grants(project_or_app):
201 201
    try:
202
        grants = project_definition.projectresourcegrant_set
202
        grants = project_or_app.resource_set
203 203
        grants = grants.values_list(
204
            'resource__name',
205
            'member_capacity'
206
        )
207
        return dict((e[0], e[1]) for e in grants)
204
            'resource__name', 'member_capacity', 'project_capacity')
205
        return dict((e[0], {'member':e[1], 'project':e[2]}) for e in grants)
208 206
    except:
209 207
        return {}
208

  
209

  
210
def get_resource_grant(project_or_app, rname, capacity_for):
211
    if project_or_app is None:
212
        return None
213

  
214
    resource_set = project_or_app.resource_set
215
    if not resource_set.filter(resource__name=rname).count():
216
        return None
217

  
218
    resource = resource_set.get(resource__name=rname)
219
    return getattr(resource, '%s_capacity' % capacity_for)
220

  
221

  
222
@register.filter
223
def get_member_resource_grant_value(project_or_app, rname):
224
    return get_resource_grant(project_or_app, rname, "member")
225

  
226

  
227
@register.filter
228
def get_project_resource_grant_value(project_or_app, rname):
229
    return get_resource_grant(project_or_app, rname, "project")
230

  
231

  
232
@register.filter
233
def resource_diff(r, member_or_project):
234
    if not hasattr(r, 'display_project_diff'):
235
        return ''
236

  
237
    project, member = r.display_project_diff()
238
    diff = dict(zip(['project', 'member'],
239
                     r.display_project_diff())).get(member_or_project)
240
    tpl = '<span class="policy-diff %s">(%s)</span>'
241
    cls = 'red' if diff.startswith("-") else 'green'
242
    return mark_safe(tpl % (cls, diff))
243

  
244

  
245
@register.filter
246
def sorted_resources(resources_set):
247
    return views_util.sorted_resources(resources_set)
248

  
249

  
250
@register.filter
251
def is_pending_app(app):
252
    if not app:
253
        return False
254
    return app.state in [app.PENDING]
255

  
256

  
257
@register.filter
258
def is_denied_app(app):
259
    if not app:
260
        return False
261
    return app.state in [app.DENIED]

Also available in: Unified diff