Revision 37d59b27 snf-astakos-app/astakos/im/views.py

b/snf-astakos-app/astakos/im/views.py
863 863
@valid_astakos_user_required
864 864
def resource_usage(request):
865 865

  
866
    resources_meta = presentation.RESOURCES
867

  
866 868
    current_usage = quotas.get_user_quotas(request.user)
867 869
    current_usage = json.dumps(current_usage['system'])
868
    resource_catalog, resource_groups = _resources_catalog(request)
870
    resource_catalog, resource_groups = _resources_catalog(for_usage=True)
871
    if resource_catalog is False:
872
        # on fail resource_groups contains the result object
873
        result = resource_groups
874
        messages.error(request, 'Unable to retrieve system resources: %s' %
875
                       result.reason)
876

  
869 877
    resource_catalog = json.dumps(resource_catalog)
870 878
    resource_groups = json.dumps(resource_groups)
871
    resources_order = json.dumps(presentation.RESOURCES.get('resources_order'))
879
    resources_order = json.dumps(resources_meta.get('resources_order'))
872 880

  
873 881
    return render_response('im/resource_usage.html',
874 882
                           context_instance=get_context(request),
......
1016 1024
        return response
1017 1025

  
1018 1026

  
1019
def _resources_catalog(request):
1027
def _resources_catalog(for_project=False, for_usage=False):
1020 1028
    """
1021 1029
    `resource_catalog` contains a list of tuples. Each tuple contains the group
1022 1030
    key the resource is assigned to and resources list of dicts that contain
......
1024 1032
    `resource_groups` contains information about the groups
1025 1033
    """
1026 1034
    # presentation data
1027
    resource_groups = presentation.RESOURCES.get('groups', {})
1035
    resources_meta = presentation.RESOURCES
1036
    resource_groups = resources_meta.get('groups', {})
1028 1037
    resource_catalog = ()
1029 1038
    resource_keys = []
1030 1039

  
1031 1040
    # resources in database
1032 1041
    result = callpoint.list_resources()
1033 1042
    if not result.is_success:
1034
        messages.error(request, 'Unable to retrieve system resources: %s' %
1035
                                result.reason)
1043
        return False, result
1036 1044
    else:
1037 1045
        # initialize resource_catalog to contain all group/resource information
1038 1046
        for r in result.data:
......
1044 1052
                                       result.data)] for g in resource_groups]
1045 1053

  
1046 1054
    # order groups, also include unknown groups
1047
    groups_order = presentation.RESOURCES.get('groups_order')
1055
    groups_order = resources_meta.get('groups_order')
1048 1056
    for g in resource_groups.keys():
1049 1057
        if not g in groups_order:
1050 1058
            groups_order.append(g)
1051 1059

  
1052 1060
    # order resources, also include unknown resources
1053
    resources_order = presentation.RESOURCES.get('resources_order')
1061
    resources_order = resources_meta.get('resources_order')
1054 1062
    for r in resource_keys:
1055 1063
        if not r in resources_order:
1056 1064
            resources_order.append(r)
......
1069 1077
    # sort resources
1070 1078
    def resourceindex(r):
1071 1079
        return resources_order.index(r['str_repr'])
1080

  
1072 1081
    for index, group in enumerate(resource_catalog):
1073 1082
        resource_catalog[index][1] = sorted(resource_catalog[index][1],
1074 1083
                                            key=resourceindex)
......
1078 1087
                if g[0] == group[0]:
1079 1088
                    resource_groups.pop(gindex)
1080 1089

  
1090
    # filter out resources which user cannot request in a project application
1091
    exclude = resources_meta.get('exclude_from_usage', [])
1092
    for group_index, group_resources in enumerate(list(resource_catalog)):
1093
        group, resources = group_resources
1094
        for index, resource in list(enumerate(resources)):
1095
            if for_project and not resource.get('allow_in_projects'):
1096
                resources.remove(resource)
1097
            if resource.get('str_repr') in exclude and for_usage:
1098
                resources.remove(resource)
1099

  
1100
    # cleanup empty groups
1101
    for group_index, group_resources in enumerate(list(resource_catalog)):
1102
        group, resources = group_resources
1103
        if len(resources) == 0:
1104
            resource_catalog.pop(group_index)
1105
            resource_groups.pop(group)
1106

  
1107

  
1081 1108
    return resource_catalog, resource_groups
1082 1109

  
1083 1110

  
......
1098 1125
                      "end_date", "comments"]
1099 1126
    membership_fields = ["member_join_policy", "member_leave_policy",
1100 1127
                         "limit_on_members_number"]
1101
    resource_catalog, resource_groups = _resources_catalog(request)
1128
    resource_catalog, resource_groups = _resources_catalog(for_project=True)
1129
    if resource_catalog is False:
1130
        # on fail resource_groups contains the result object
1131
        result = resource_groups
1132
        messages.error(request, 'Unable to retrieve system resources: %s' %
1133
                       result.reason)
1102 1134
    extra_context = {
1103 1135
        'resource_catalog': resource_catalog,
1104 1136
        'resource_groups': resource_groups,
......
1205 1237
                      "end_date", "comments"]
1206 1238
    membership_fields = ["member_join_policy", "member_leave_policy",
1207 1239
                         "limit_on_members_number"]
1208
    resource_catalog, resource_groups = _resources_catalog(request)
1240
    resource_catalog, resource_groups = _resources_catalog(for_project=True)
1241
    if resource_catalog is False:
1242
        # on fail resource_groups contains the result object
1243
        result = resource_groups
1244
        messages.error(request, 'Unable to retrieve system resources: %s' %
1245
                       result.reason)
1209 1246
    extra_context = {
1210 1247
        'resource_catalog': resource_catalog,
1211 1248
        'resource_groups': resource_groups,

Also available in: Unified diff