def update(request, project_id, image_id):
    project = shortcuts.get_project_or_404(request, project_id)
    ami = project.get_image(image_id)

    if request.method == 'POST':
        form = forms.UpdateImageForm(ami, request.POST)
        if form.is_valid():
            try:
                project.update_image(image_id,
                                     form.cleaned_data['nickname'],
                                     form.cleaned_data['description'])
            except exceptions.NovaApiError, e:
                messages.error(request,
                               'Unable to update image: %s' % e.message)
            else:
                messages.success(request,
                                 'Image %s has been updated.' % image_id)

            return redirect('nova_images_detail', project_id, image_id)

        # TODO(devcamcar): This needs to be cleaned up. Can make
        # one of the render_to_response blocks go away.
        else:
            form = forms.UpdateImageForm(ami)
            return render_to_response('django_nova/images/edit.html', {
                'form': form,
                'region': project.region,
                'project': project,
                'ami': ami,
            }, context_instance = template.RequestContext(request))
def detail(request, project_id, image_id):
    project = shortcuts.get_project_or_404(request, project_id)
    images = project.get_images()

    ami = project.get_image(image_id)

    if not ami:
        raise http.Http404()
    return render_to_response('django_nova/images/index.html', {
        'form': forms.LaunchInstanceForm(project),
        'region': project.region,
        'project': project,
        'image_lists': _image_lists(images, project_id),
        'ami': ami,
    }, context_instance = template.RequestContext(request))
def privacy(request, project_id, image_id):
    project = shortcuts.get_project_or_404(request, project_id)

    if request.method == 'POST':
        ami = project.get_image(image_id)

        if ami.is_public:
            try:
                project.modify_image_attribute(image_id,
                                               attribute='launchPermission',
                                               operation='remove')
            except exceptions.NovaApiError, e:
                messages.error(request,
                               'Unable to make image private: %s' % e.message)
        else:
            try:
                project.modify_image_attribute(image_id,
                                               attribute='launchPermission',
                                               operation='add')
            except exceptions.NovaApiError, e:
                messages.error(request,
                               'Unable to make image public: %s' % e.message)
                    max_count=form.cleaned_data['count']
                )
            except exceptions.NovaApiError, e:
                messages.error(request,
                               'Unable to launch: %s' % e.message)
            except exceptions.NovaUnauthorizedError, e:
                messages.error(request, 'Permission Denied')
            else:
                for instance in reservation.instances:
                    messages.success(request,
                                     'Instance %s launched.' % instance.id)
            return redirect('nova_instances', project_id)
    else:
        form = forms.LaunchInstanceForm(project)

    ami = project.get_image(image_id)

    return render_to_response('django_nova/images/launch.html', {
        'form': form,
        'region': project.region,
        'project': project,
        'ami': ami,
    }, context_instance = template.RequestContext(request))


@login_required
@handle_nova_error
def detail(request, project_id, image_id):
    project = shortcuts.get_project_or_404(request, project_id)
    images = project.get_images()