admin.py 3.82 KB
Newer Older
Dudás Ádám committed
1 2 3 4 5 6 7
from django.contrib import messages
from django.core.exceptions import ValidationError
from django import contrib
from django.utils.translation import ugettext_lazy as _
from one import models
import string

8 9 10 11 12
def owner_person(obj):
    p = obj.owner
    return "%s %s (%s)" % (p.last_name, p.first_name, p.username)
owner_person.short_description = _('owner')

Dudás Ádám committed
13 14 15 16 17 18 19 20 21 22 23 24 25
class PersonInline(contrib.admin.StackedInline):
    model = models.Person
    max_num = 1
    can_delete = False
class SshKeyInline(contrib.admin.TabularInline):
    model = models.SshKey
    extra = 2
class DetailsInline(contrib.admin.StackedInline):
    model = models.UserCloudDetails
    max_num = 1
    can_delete = False

class MyUserAdmin(contrib.auth.admin.UserAdmin):
26 27 28
    list_display = ('username', 'full_name', 'email', 'date_joined', 'instance_count', 'course_groups')
    list_filter = ('is_superuser', 'is_active', 'groups', 'person__course_groups', )

Dudás Ádám committed
29 30 31 32
    try:
        inlines = inlines + (PersonInline, SshKeyInline, DetailsInline)
    except NameError:
        inlines = (PersonInline, SshKeyInline, DetailsInline)
33

cloud committed
34
    def instance_count(self, obj):
35 36
        return _("%(sum)d (%(active)d active)") % { 'sum': obj.instance_set.count(),
                'active' :obj.instance_set.filter(state='ACTIVE').count(), }
37 38 39 40 41 42 43

    def course_groups(self, obj):
        try:
            return ", ".join(obj.person_set.all()[0].course_groups.all())
        except:
            return None

cloud committed
44 45 46
    def full_name(self, obj):
        return u"%s %s" % (obj.last_name, obj.first_name)
    full_name.admin_order_field = 'last_name'
Dudás Ádám committed
47

48 49
    ordering = ["-date_joined"]

Dudás Ádám committed
50 51 52 53 54 55 56 57 58 59 60 61 62


contrib.admin.site.unregister(contrib.auth.models.User)
contrib.admin.site.register(contrib.auth.models.User, MyUserAdmin)

def update_state(modeladmin, request, queryset):
    for i in queryset.all():
        i.update_state()
update_state.short_description = _('Update status')

def submit_vm(modeladmin, request, queryset):
    for i in queryset.all():
        i.submit(request.user)
63
        i.update_state()
Dudás Ádám committed
64 65
submit_vm.short_description = _('Submit VM')

66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
def delete_vm(modeladmin, request, queryset):
    for i in queryset.exclude(state='DONE').all():
        i.one_delete()
        i.update_state()
delete_vm.short_description = _('Delete VM')

def suspend_vm(modeladmin, request, queryset):
    for i in queryset.filter(state='ACTIVE').all():
        i.stop()
        i.update_state()
suspend_vm.short_description = _('Suspend VM')

def resume_vm(modeladmin, request, queryset):
    for i in queryset.filter(state__in=('STOPPED', 'SUSPENDED')).all():
        i.resume()
        i.update_state()
resume_vm.short_description = _('Resume VM')

Dudás Ádám committed
84 85 86

class TemplateAdmin(contrib.admin.ModelAdmin):
    model=models.Template
87
    list_display = ('name', 'state', owner_person, 'system', 'public')
88
    list_filter = ('owner', 'public')
Dudás Ádám committed
89 90 91

class InstanceAdmin(contrib.admin.ModelAdmin):
    model=models.Instance
92
    actions = [update_state, submit_vm, delete_vm, suspend_vm, resume_vm]
93
    list_display = ('id', 'name', owner_person, 'state')
94 95
    readonly_fields = ('ip', 'active_since', 'pw', 'template')
    list_filter = ('owner', 'template', 'state')
96 97
    def queryset(self, request):
        return super(InstanceAdmin, self).queryset(request)
cloud committed
98 99 100 101 102

class DiskAdmin(contrib.admin.ModelAdmin):
    model=models.Disk
class NetworkAdmin(contrib.admin.ModelAdmin):
    model=models.Network
Őry Máté committed
103 104
class ShareAdmin(contrib.admin.ModelAdmin):
    model=models.Network
105
    list_filter = ('group', 'template', )
106
    list_display = ('name', owner_person, 'template', 'group', )
cloud committed
107

Dudás Ádám committed
108 109
contrib.admin.site.register(models.Template, TemplateAdmin)
contrib.admin.site.register(models.Instance, InstanceAdmin)
cloud committed
110 111
contrib.admin.site.register(models.Network, NetworkAdmin)
contrib.admin.site.register(models.Disk, DiskAdmin)
Őry Máté committed
112
contrib.admin.site.register(models.Share, ShareAdmin)
113
contrib.admin.site.register(models.InstanceType)
Dudás Ádám committed
114