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