def resource_usage(request): resources_meta = presentation.RESOURCES current_usage = quotas.get_user_quotas(request.user) current_usage = json.dumps(current_usage['system']) resource_catalog, resource_groups = _resources_catalog(for_usage=True) if resource_catalog is False: # on fail resource_groups contains the result object result = resource_groups messages.error( request, 'Unable to retrieve system resources: %s' % result.reason) resource_catalog = json.dumps(resource_catalog) resource_groups = json.dumps(resource_groups) resources_order = json.dumps(resources_meta.get('resources_order')) return render_response( 'im/resource_usage.html', context_instance=get_context(request), resource_catalog=resource_catalog, resource_groups=resource_groups, resources_order=resources_order, current_usage=current_usage, token_cookie_name=settings.COOKIE_NAME, usage_update_interval=settings.USAGE_UPDATE_INTERVAL)
def resource_usage(request): resources_meta = presentation.RESOURCES current_usage = quotas.get_user_quotas(request.user) current_usage = json.dumps(current_usage['system']) resource_catalog, resource_groups = _resources_catalog() if resource_catalog is False: # on fail resource_groups contains the result object result = resource_groups messages.error(request, 'Unable to retrieve system resources: %s' % result.reason) resource_catalog = json.dumps(resource_catalog) resource_groups = json.dumps(resource_groups) resources_order = json.dumps(resources_meta.get('resources_order')) return render_response('im/resource_usage.html', context_instance=get_context(request), resource_catalog=resource_catalog, resource_groups=resource_groups, resources_order=resources_order, current_usage=current_usage, token_cookie_name=settings.COOKIE_NAME, usage_update_interval= settings.USAGE_UPDATE_INTERVAL)
def project_modify(request, application_id): try: app = ProjectApplication.objects.get(id=application_id) except ProjectApplication.DoesNotExist: raise Http404 user = request.user if not (user.owns_application(app) or user.is_project_admin(app.id)): m = _(astakos_messages.NOT_ALLOWED) raise PermissionDenied(m) if not user.is_project_admin(): owner = app.owner ok, limit = check_pending_app_quota(owner, precursor=app) if not ok: m = _(astakos_messages.PENDING_APPLICATION_LIMIT_MODIFY) % limit messages.error(request, m) next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next) details_fields = ["name", "homepage", "description", "start_date", "end_date", "comments"] membership_fields = ["member_join_policy", "member_leave_policy", "limit_on_members_number"] resource_catalog, resource_groups = _resources_catalog(for_project=True) if resource_catalog is False: # on fail resource_groups contains the result object result = resource_groups messages.error(request, 'Unable to retrieve system resources: %s' % result.reason) extra_context = { 'resource_catalog': resource_catalog, 'resource_groups': resource_groups, 'show_form': True, 'details_fields': details_fields, 'update_form': True, 'membership_fields': membership_fields } response = None with ExceptionHandler(request): response = _update_object( request, object_id=application_id, template_name='im/projects/projectapplication_form.html', summary_template_name='im/projects/projectapplication_form_summary.html', extra_context=extra_context, post_save_redirect=reverse('project_list'), form_class=ProjectApplicationForm, msg=_("The %(verbose_name)s has been received and is under " "consideration.")) if response is not None: return response next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next)
def project_modify(request, application_id): try: app = ProjectApplication.objects.get(id=application_id) except ProjectApplication.DoesNotExist: raise Http404 user = request.user if not (user.owns_application(app) or user.is_project_admin(app.id)): m = _(astakos_messages.NOT_ALLOWED) raise PermissionDenied(m) if not user.is_project_admin(): owner = app.owner ok, limit = check_pending_app_quota(owner, precursor=app) if not ok: m = _(astakos_messages.PENDING_APPLICATION_LIMIT_MODIFY) % limit messages.error(request, m) next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next) details_fields = ["name", "homepage", "description", "start_date", "end_date", "comments"] membership_fields = ["member_join_policy", "member_leave_policy", "limit_on_members_number"] resource_catalog, resource_groups = _resources_catalog(for_project=True) if resource_catalog is False: # on fail resource_groups contains the result object result = resource_groups messages.error(request, 'Unable to retrieve system resources: %s' % result.reason) extra_context = { 'resource_catalog': resource_catalog, 'resource_groups': resource_groups, 'show_form': True, 'details_fields': details_fields, 'update_form': True, 'membership_fields': membership_fields } response = None with ExceptionHandler(request): response = _update_object( request, object_id=application_id, template_name='im/projects/projectapplication_form.html', extra_context=extra_context, post_save_redirect=reverse('project_list'), form_class=ProjectApplicationForm, msg=_("The %(verbose_name)s has been received and is under " "consideration.")) if response is not None: return response next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next)
def resource_usage(request): resources_meta = presentation.RESOURCES # resolve uuids of projects the user consumes quota from user = request.user quota_filters = Q(usage_min__gt=0, limit__gt=0) quota_uuids = map( lambda k: k[1], quotas.get_users_quotas_counters([user], flt=quota_filters)[0].keys(), ) # resolve uuids of projects the user is member to user_memberships = request.user.projectmembership_set.actually_accepted() membership_uuids = [m.project.uuid for m in user_memberships] # merge uuids uuids = set(quota_uuids + membership_uuids) uuid_refs = map(quotas.project_ref, uuids) user_quotas = quotas.get_user_quotas(request.user, sources=uuid_refs) projects = Project.objects.filter(uuid__in=uuids) user_projects = projects_api.get_projects_details(projects) resource_catalog, resource_groups = _resources_catalog() if resource_catalog is False: # on fail resource_groups contains the result object result = resource_groups messages.error( request, 'Unable to retrieve system resources: %s' % result.reason) # Exclude projects that are terminated *and* the user has no active # resources (usage>0) non_terminated_projects = [ p["id"] for p in user_projects if p["state"] != "terminated" ] user_quotas = dict([(p_id, p_quotas) for (p_id, p_quotas) in user_quotas.items() if p_id in non_terminated_projects or filter(lambda x: x["usage"] > 0, p_quotas.values()) ]) resource_catalog = json.dumps(resource_catalog) resource_groups = json.dumps(resource_groups) resources_order = json.dumps(resources_meta.get('resources_order')) projects_details = json.dumps(user_projects, default=_dthandler) user_quotas = json.dumps(user_quotas) interval = settings.USAGE_UPDATE_INTERVAL return render_response('im/resource_usage.html', context_instance=get_context(request), resource_catalog=resource_catalog, resource_groups=resource_groups, resources_order=resources_order, projects_details=projects_details, user_quotas=user_quotas, token_cookie_name=settings.COOKIE_NAME, usage_update_interval=interval)
def resource_usage(request): resources_meta = presentation.RESOURCES # resolve uuids of projects the user consumes quota from user = request.user quota_filters = Q(usage_min__gt=0, limit__gt=0) quota_uuids = map(lambda k: k[1], quotas.get_users_quotas_counters([user], flt=quota_filters)[0].keys(),) # resolve uuids of projects the user is member to user_memberships = request.user.projectmembership_set.actually_accepted() membership_uuids = [m.project.uuid for m in user_memberships] # merge uuids uuids = set(quota_uuids + membership_uuids) uuid_refs = map(quotas.project_ref, uuids) user_quotas = quotas.get_user_quotas(request.user, sources=uuid_refs) projects = Project.objects.filter(uuid__in=uuids) user_projects = projects_api.get_projects_details(projects) resource_catalog, resource_groups = _resources_catalog() if resource_catalog is False: # on fail resource_groups contains the result object result = resource_groups messages.error(request, 'Unable to retrieve system resources: %s' % result.reason) # Exclude projects that are terminated *and* the user has no active # resources (usage>0) non_terminated_projects = [p["id"] for p in user_projects if p["state"] != "terminated"] user_quotas = dict([(p_id, p_quotas) for (p_id, p_quotas) in user_quotas.items() if p_id in non_terminated_projects or filter(lambda x: x["usage"] > 0, p_quotas.values())]) resource_catalog = json.dumps(resource_catalog) resource_groups = json.dumps(resource_groups) resources_order = json.dumps(resources_meta.get('resources_order')) projects_details = json.dumps(user_projects, default=_dthandler) user_quotas = json.dumps(user_quotas) interval = settings.USAGE_UPDATE_INTERVAL return render_response('im/resource_usage.html', context_instance=get_context(request), resource_catalog=resource_catalog, resource_groups=resource_groups, resources_order=resources_order, projects_details=projects_details, user_quotas=user_quotas, token_cookie_name=settings.COOKIE_NAME, usage_update_interval=interval)
def project_add(request): user = request.user if not user.is_project_admin(): ok, limit = check_pending_app_quota(user) if not ok: m = _(astakos_messages.PENDING_APPLICATION_LIMIT_ADD) % limit messages.error(request, m) next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next) details_fields = ["name", "homepage", "description", "start_date", "end_date", "comments"] membership_fields = ["member_join_policy", "member_leave_policy", "limit_on_members_number"] resource_catalog, resource_groups = _resources_catalog(for_project=True) if resource_catalog is False: # on fail resource_groups contains the result object result = resource_groups messages.error(request, 'Unable to retrieve system resources: %s' % result.reason) extra_context = { 'resource_catalog': resource_catalog, 'resource_groups': resource_groups, 'show_form': True, 'details_fields': details_fields, 'membership_fields': membership_fields} response = None with ExceptionHandler(request): response = _create_object( request, template_name='im/projects/projectapplication_form.html', summary_template_name='im/projects/projectapplication_form_summary.html', extra_context=extra_context, post_save_redirect=reverse('project_list'), form_class=ProjectApplicationForm, msg=_("The %(verbose_name)s has been received and " "is under consideration."), ) if response is not None: return response next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next)
def project_add(request): user = request.user if not user.is_project_admin(): ok, limit = check_pending_app_quota(user) if not ok: m = _(astakos_messages.PENDING_APPLICATION_LIMIT_ADD) % limit messages.error(request, m) next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next) details_fields = ["name", "homepage", "description", "start_date", "end_date", "comments"] membership_fields = ["member_join_policy", "member_leave_policy", "limit_on_members_number"] resource_catalog, resource_groups = _resources_catalog(for_project=True) if resource_catalog is False: # on fail resource_groups contains the result object result = resource_groups messages.error(request, 'Unable to retrieve system resources: %s' % result.reason) extra_context = { 'resource_catalog': resource_catalog, 'resource_groups': resource_groups, 'show_form': True, 'details_fields': details_fields, 'membership_fields': membership_fields} response = None with ExceptionHandler(request): response = _create_object( request, template_name='im/projects/projectapplication_form.html', extra_context=extra_context, post_save_redirect=reverse('project_list'), form_class=ProjectApplicationForm, msg=_("The %(verbose_name)s has been received and " "is under consideration."), ) if response is not None: return response next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next)
def project_add(request): user = request.user if not user.is_project_admin(): ok, limit = check_pending_app_quota(user) if not ok: m = _(astakos_messages.PENDING_APPLICATION_LIMIT_ADD) % limit messages.error(request, m) next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next) details_fields = ["name", "homepage", "description", "start_date", "end_date", "comments"] membership_fields = ["member_join_policy", "member_leave_policy", "limit_on_members_number"] resource_catalog, resource_groups = _resources_catalog() if resource_catalog is False: # on fail resource_groups contains the result object result = resource_groups messages.error(request, 'Unable to retrieve system resources: %s' % result.reason) extra_context = { 'resource_catalog': resource_catalog, 'resource_groups': resource_groups, 'show_form': True, 'details_fields': details_fields, 'membership_fields': membership_fields} response = None with ExceptionHandler(request): response = create_app_object(request, extra_context=extra_context) if response is not None: return response next = reverse('astakos.im.views.project_list') next = restrict_next(next, domain=settings.COOKIE_DOMAIN) return redirect(next)
def project_add_or_modify(request, project_uuid=None): user = request.user # only check quota for non project admin users if not user.is_project_admin(): ok, limit = check_pending_app_quota(user) if not ok: m = _(astakos_messages.PENDING_APPLICATION_LIMIT_ADD) % limit messages.error(request, m) return redirect(restrict_reverse('astakos.im.views.project_list')) project = None if project_uuid: project = get_object_or_404(Project, uuid=project_uuid) if not user.owns_project(project) and not user.is_project_admin(): m = _(astakos_messages.NOT_ALLOWED) raise PermissionDenied(m) details_fields = [ "name", "homepage", "description", "start_date", "end_date", "comments" ] membership_fields = [ "member_join_policy", "member_leave_policy", "limit_on_members_number" ] resource_catalog, resource_groups = _resources_catalog() resource_catalog_dict, resource_groups_dict = \ _resources_catalog(as_dict=True) extra_context = { 'resource_catalog': resource_catalog, 'resource_groups': resource_groups, 'resource_catalog_dict': resource_catalog_dict, 'resource_groups_dict': resource_groups_dict, 'show_form': True, 'details_fields': details_fields, 'membership_fields': membership_fields, 'object': project } with transaction.atomic(): template_name = 'im/projects/projectapplication_form.html' summary_template_name = \ 'im/projects/projectapplication_form_summary.html' success_msg = _("The project application has been received and " "is under consideration.") form_class = ProjectApplicationForm if project: template_name = 'im/projects/projectmodification_form.html' summary_template_name = \ 'im/projects/projectmodification_form_summary.html' success_msg = _("The project modification has been received and " "is under consideration.") form_class = ProjectModificationForm details_fields.remove('start_date') extra_context['edit'] = 0 if request.method == 'POST': form = form_class(request.POST, request.FILES, instance=project) if form.is_valid(): verify = request.GET.get('verify') edit = request.GET.get('edit') if verify == '1': extra_context['show_form'] = False extra_context['form_data'] = form.cleaned_data template_name = summary_template_name elif edit == '1': extra_context['show_form'] = True else: new_object = form.save() messages.success(request, success_msg, fail_silently=True) return redirect(restrict_reverse('project_list')) else: # handle terminated projects for which the name attribute # has been set to null if project and not project.name: project.name = project.realname form = form_class(instance=project) extra_context['form'] = form return render_to_response(template_name, extra_context, context_instance=RequestContext(request))
def project_add_or_modify(request, project_uuid=None): user = request.user # only check quota for non project admin users if not user.is_project_admin(): ok, limit = check_pending_app_quota(user) if not ok: m = _(astakos_messages.PENDING_APPLICATION_LIMIT_ADD) % limit messages.error(request, m) return redirect(restrict_reverse( 'astakos.im.views.project_list')) project = None if project_uuid: project = get_object_or_404(Project, uuid=project_uuid) if not user.owns_project(project) and not user.is_project_admin(): m = _(astakos_messages.NOT_ALLOWED) raise PermissionDenied(m) details_fields = ["name", "homepage", "description", "start_date", "end_date", "comments"] membership_fields = ["member_join_policy", "member_leave_policy", "limit_on_members_number"] resource_catalog, resource_groups = _resources_catalog() resource_catalog_dict, resource_groups_dict = \ _resources_catalog(as_dict=True) extra_context = { 'resource_catalog': resource_catalog, 'resource_groups': resource_groups, 'resource_catalog_dict': resource_catalog_dict, 'resource_groups_dict': resource_groups_dict, 'show_form': True, 'details_fields': details_fields, 'membership_fields': membership_fields, 'object': project } with transaction.commit_on_success(): template_name = 'im/projects/projectapplication_form.html' summary_template_name = \ 'im/projects/projectapplication_form_summary.html' success_msg = _("The project application has been received and " "is under consideration.") form_class = ProjectApplicationForm if project: template_name = 'im/projects/projectmodification_form.html' summary_template_name = \ 'im/projects/projectmodification_form_summary.html' success_msg = _("The project modification has been received and " "is under consideration.") form_class = ProjectModificationForm details_fields.remove('start_date') extra_context['edit'] = 0 if request.method == 'POST': form = form_class(request.POST, request.FILES, instance=project) if form.is_valid(): verify = request.GET.get('verify') edit = request.GET.get('edit') if verify == '1': extra_context['show_form'] = False extra_context['form_data'] = form.cleaned_data template_name = summary_template_name elif edit == '1': extra_context['show_form'] = True else: new_object = form.save() messages.success(request, success_msg, fail_silently=True) return redirect(restrict_reverse('project_list')) else: form = form_class(instance=project) extra_context['form'] = form return render_to_response(template_name, extra_context, context_instance=RequestContext(request))