Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 1 | from django.contrib import admin |
| 2 | |
| 3 | from cord.models import * |
| 4 | from django import forms |
| 5 | from django.utils.safestring import mark_safe |
| 6 | from django.contrib.auth.admin import UserAdmin |
| 7 | from django.contrib.admin.widgets import FilteredSelectMultiple |
| 8 | from django.contrib.auth.forms import ReadOnlyPasswordHashField |
| 9 | from django.contrib.auth.signals import user_logged_in |
| 10 | from django.utils import timezone |
| 11 | from django.contrib.contenttypes import generic |
| 12 | from suit.widgets import LinkedSelect |
Scott Baker | 559be72 | 2015-05-15 09:08:19 -0700 | [diff] [blame] | 13 | from core.admin import ServiceAppAdmin,SliceInline,ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, ServicePrivilegeInline |
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 14 | |
| 15 | from functools import update_wrapper |
| 16 | from django.contrib.admin.views.main import ChangeList |
| 17 | from django.core.urlresolvers import reverse |
| 18 | from django.contrib.admin.utils import quote |
| 19 | |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 20 | #----------------------------------------------------------------------------- |
| 21 | # vOLT |
| 22 | #----------------------------------------------------------------------------- |
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 23 | |
| 24 | class VOLTServiceAdmin(ReadOnlyAwareAdmin): |
| 25 | model = VOLTService |
| 26 | verbose_name = "vOLT Service" |
| 27 | verbose_name_plural = "vOLT Service" |
| 28 | list_display = ("backend_status_icon", "name", "enabled") |
| 29 | list_display_links = ('backend_status_icon', 'name', ) |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 30 | fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description',"view_url","icon_url" ], 'classes':['suit-tab suit-tab-general']})] |
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 31 | readonly_fields = ('backend_status_text', ) |
Scott Baker | 559be72 | 2015-05-15 09:08:19 -0700 | [diff] [blame] | 32 | inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline] |
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 33 | |
| 34 | extracontext_registered_admins = True |
| 35 | |
| 36 | user_readonly_fields = ["name", "enabled", "versionNumber", "description"] |
| 37 | |
| 38 | suit_form_tabs =(('general', 'vOLT Service Details'), |
| 39 | ('administration', 'Administration'), |
| 40 | #('tools', 'Tools'), |
| 41 | ('slices','Slices'), |
| 42 | ('serviceattrs','Additional Attributes'), |
Scott Baker | 559be72 | 2015-05-15 09:08:19 -0700 | [diff] [blame] | 43 | ('serviceprivileges','Privileges'), |
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 44 | ) |
| 45 | |
| 46 | suit_form_includes = (('voltadmin.html', 'top', 'administration'), |
| 47 | ) #('hpctools.html', 'top', 'tools') ) |
| 48 | |
| 49 | def queryset(self, request): |
| 50 | return VOLTService.get_service_objects() |
| 51 | |
| 52 | class VOLTTenantForm(forms.ModelForm): |
Scott Baker | 800f9c1 | 2015-07-13 13:08:07 -0700 | [diff] [blame] | 53 | vlan_id = forms.CharField() |
| 54 | creator = forms.ModelChoiceField(queryset=User.objects.all()) |
| 55 | |
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 56 | def __init__(self,*args,**kwargs):
|
| 57 | super (VOLTTenantForm,self ).__init__(*args,**kwargs)
|
| 58 | self.fields['kind'].default = "vOLT"
|
| 59 | self.fields['kind'].widget.attrs['readonly'] = True
|
| 60 | self.fields['provider_service'].queryset = VOLTService.get_service_objects().all()
|
Scott Baker | 800f9c1 | 2015-07-13 13:08:07 -0700 | [diff] [blame] | 61 | if self.instance:
|
| 62 | # fields for the attributes
|
| 63 | self.fields['vlan_id'].initial = self.instance.vlan_id
|
| 64 | self.fields['creator'].initial = self.instance.creator
|
| 65 |
|
| 66 | def save(self, commit=True):
|
| 67 | self.instance.vlan_id = self.cleaned_data.get("vlan_id")
|
| 68 | self.instance.creator = self.cleaned_data.get("creator")
|
| 69 | return super(VOLTTenantForm, self).save(commit=commit)
|
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 70 |
|
| 71 | class Meta:
|
| 72 | model = VOLTTenant |
| 73 | |
| 74 | class VOLTTenantAdmin(ReadOnlyAwareAdmin): |
Scott Baker | 0588e50 | 2015-07-06 17:20:37 -0700 | [diff] [blame] | 75 | list_display = ('backend_status_icon', 'id', 'service_specific_id', 'vlan_id', 'subscriber_root' ) |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 76 | list_display_links = ('backend_status_icon', 'id') |
Scott Baker | 800f9c1 | 2015-07-13 13:08:07 -0700 | [diff] [blame] | 77 | fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'subscriber_root', 'service_specific_id', 'service_specific_attribute', 'vlan_id', 'creator'], 'classes':['suit-tab suit-tab-general']})] |
| 78 | readonly_fields = ('backend_status_text', 'service_specific_attribute') |
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 79 | form = VOLTTenantForm |
| 80 | |
| 81 | suit_form_tabs = (('general','Details'),) |
| 82 | |
| 83 | def queryset(self, request): |
| 84 | return VOLTTenant.get_tenant_objects() |
| 85 | |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 86 | #----------------------------------------------------------------------------- |
| 87 | # vCPE |
| 88 | #----------------------------------------------------------------------------- |
| 89 | |
Scott Baker | 7ba272e | 2015-07-13 14:30:25 -0700 | [diff] [blame] | 90 | class VCPEServiceForm(forms.ModelForm): |
Scott Baker | 3d2493b | 2015-07-15 17:42:43 -0700 | [diff] [blame] | 91 | bbs_url = forms.CharField(required=False) |
| 92 | bbs_server = forms.CharField(required=False) |
| 93 | backend_network_label = forms.CharField(required=False) |
| 94 | bbs_slice = forms.ModelChoiceField(queryset=Slice.objects.all(), required=False) |
Scott Baker | 7ba272e | 2015-07-13 14:30:25 -0700 | [diff] [blame] | 95 | |
| 96 | def __init__(self,*args,**kwargs):
|
| 97 | super (VCPEServiceForm,self ).__init__(*args,**kwargs)
|
| 98 | if self.instance:
|
| 99 | self.fields['bbs_url'].initial = self.instance.bbs_url
|
Scott Baker | 3d2493b | 2015-07-15 17:42:43 -0700 | [diff] [blame] | 100 | self.fields['bbs_server'].initial = self.instance.bbs_server
|
Scott Baker | cec6a70 | 2015-07-15 18:04:22 -0700 | [diff] [blame^] | 101 | self.fields['backend_network_label'].initial = self.instance.backend_network_label
|
Scott Baker | 3d2493b | 2015-07-15 17:42:43 -0700 | [diff] [blame] | 102 | self.fields['bbs_slice'].initial = self.instance.bbs_slice
|
Scott Baker | 7ba272e | 2015-07-13 14:30:25 -0700 | [diff] [blame] | 103 |
|
| 104 | def save(self, commit=True):
|
| 105 | self.instance.bbs_url = self.cleaned_data.get("bbs_url")
|
Scott Baker | 3d2493b | 2015-07-15 17:42:43 -0700 | [diff] [blame] | 106 | self.instance.bbs_server = self.cleaned_data.get("bbs_server")
|
Scott Baker | cec6a70 | 2015-07-15 18:04:22 -0700 | [diff] [blame^] | 107 | self.instance.backend_network_label = self.cleaned_data.get("backend_network_label")
|
Scott Baker | 3d2493b | 2015-07-15 17:42:43 -0700 | [diff] [blame] | 108 | self.instance.bbs_slice = self.cleaned_data.get("bbs_slice")
|
Scott Baker | 7ba272e | 2015-07-13 14:30:25 -0700 | [diff] [blame] | 109 | return super(VCPEServiceForm, self).save(commit=commit)
|
| 110 |
|
| 111 | class Meta:
|
| 112 | model = VCPEService |
| 113 | |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 114 | class VCPEServiceAdmin(ReadOnlyAwareAdmin): |
| 115 | model = VCPEService |
| 116 | verbose_name = "vCPE Service" |
| 117 | verbose_name_plural = "vCPE Service" |
| 118 | list_display = ("backend_status_icon", "name", "enabled") |
| 119 | list_display_links = ('backend_status_icon', 'name', ) |
Scott Baker | 3d2493b | 2015-07-15 17:42:43 -0700 | [diff] [blame] | 120 | fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description', "view_url", "icon_url", "service_specific_attribute",], |
| 121 | 'classes':['suit-tab suit-tab-general']}), |
| 122 | ("backend config", {'fields': [ "backend_network_label", "bbs_url", "bbs_server", "bbs_slice"], |
| 123 | 'classes':['suit-tab suit-tab-backend']}) ] |
Scott Baker | 7ba272e | 2015-07-13 14:30:25 -0700 | [diff] [blame] | 124 | readonly_fields = ('backend_status_text', "service_specific_attribute") |
Scott Baker | 559be72 | 2015-05-15 09:08:19 -0700 | [diff] [blame] | 125 | inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline] |
Scott Baker | 7ba272e | 2015-07-13 14:30:25 -0700 | [diff] [blame] | 126 | form = VCPEServiceForm |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 127 | |
| 128 | extracontext_registered_admins = True |
| 129 | |
| 130 | user_readonly_fields = ["name", "enabled", "versionNumber", "description"] |
| 131 | |
Scott Baker | 3d2493b | 2015-07-15 17:42:43 -0700 | [diff] [blame] | 132 | suit_form_tabs =(('general', 'Service Details'), |
| 133 | ('backend', 'Backend Config'), |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 134 | ('administration', 'Administration'), |
| 135 | #('tools', 'Tools'), |
| 136 | ('slices','Slices'), |
| 137 | ('serviceattrs','Additional Attributes'), |
Scott Baker | 559be72 | 2015-05-15 09:08:19 -0700 | [diff] [blame] | 138 | ('serviceprivileges','Privileges') , |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 139 | ) |
| 140 | |
| 141 | suit_form_includes = (('vcpeadmin.html', 'top', 'administration'), |
| 142 | ) #('hpctools.html', 'top', 'tools') ) |
| 143 | |
| 144 | def queryset(self, request): |
| 145 | return VCPEService.get_service_objects() |
| 146 | |
| 147 | class VCPETenantForm(forms.ModelForm): |
| 148 | def __init__(self,*args,**kwargs):
|
| 149 | super (VCPETenantForm,self ).__init__(*args,**kwargs)
|
| 150 | self.fields['kind'].default = "vCPE"
|
| 151 | self.fields['kind'].widget.attrs['readonly'] = True
|
| 152 | self.fields['provider_service'].queryset = VCPEService.get_service_objects().all()
|
| 153 |
|
| 154 | class Meta:
|
| 155 | model = VCPETenant |
| 156 | |
| 157 | class VCPETenantAdmin(ReadOnlyAwareAdmin): |
Scott Baker | 1b06b6c | 2015-07-06 14:40:20 -0700 | [diff] [blame] | 158 | list_display = ('backend_status_icon', 'id', 'subscriber_tenant' ) |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 159 | list_display_links = ('backend_status_icon', 'id') |
Scott Baker | 1b06b6c | 2015-07-06 14:40:20 -0700 | [diff] [blame] | 160 | fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'subscriber_tenant', 'service_specific_id', 'service_specific_attribute',], 'classes':['suit-tab suit-tab-general']})] |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 161 | readonly_fields = ('backend_status_text', ) |
| 162 | form = VCPETenantForm |
| 163 | |
| 164 | suit_form_tabs = (('general','Details'),) |
| 165 | |
| 166 | def queryset(self, request): |
| 167 | return VCPETenant.get_tenant_objects() |
| 168 | |
| 169 | #----------------------------------------------------------------------------- |
| 170 | # vBNG |
| 171 | #----------------------------------------------------------------------------- |
| 172 | |
| 173 | class VBNGServiceAdmin(ReadOnlyAwareAdmin): |
| 174 | model = VBNGService |
| 175 | verbose_name = "vBNG Service" |
| 176 | verbose_name_plural = "vBNG Service" |
| 177 | list_display = ("backend_status_icon", "name", "enabled") |
| 178 | list_display_links = ('backend_status_icon', 'name', ) |
| 179 | fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description', "view_url","icon_url" ], 'classes':['suit-tab suit-tab-general']})] |
| 180 | readonly_fields = ('backend_status_text', ) |
Scott Baker | 559be72 | 2015-05-15 09:08:19 -0700 | [diff] [blame] | 181 | inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline] |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 182 | |
| 183 | extracontext_registered_admins = True |
| 184 | |
| 185 | user_readonly_fields = ["name", "enabled", "versionNumber", "description"] |
| 186 | |
| 187 | suit_form_tabs =(('general', 'vBNG Service Details'), |
| 188 | ('administration', 'Administration'), |
| 189 | #('tools', 'Tools'), |
| 190 | ('slices','Slices'), |
| 191 | ('serviceattrs','Additional Attributes'), |
Scott Baker | 559be72 | 2015-05-15 09:08:19 -0700 | [diff] [blame] | 192 | ('serviceprivileges','Privileges'), |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 193 | ) |
| 194 | |
| 195 | suit_form_includes = (('vbngadmin.html', 'top', 'administration'), |
| 196 | ) #('hpctools.html', 'top', 'tools') ) |
| 197 | |
| 198 | def queryset(self, request): |
| 199 | return VBNGService.get_service_objects() |
| 200 | |
| 201 | class VBNGTenantForm(forms.ModelForm): |
| 202 | def __init__(self,*args,**kwargs):
|
| 203 | super (VBNGTenantForm,self ).__init__(*args,**kwargs)
|
| 204 | self.fields['kind'].default = "vBNG"
|
| 205 | self.fields['kind'].widget.attrs['readonly'] = True
|
| 206 | self.fields['provider_service'].queryset = VBNGService.get_service_objects().all()
|
| 207 |
|
| 208 | class Meta:
|
| 209 | model = VBNGTenant |
| 210 | |
| 211 | class VBNGTenantAdmin(ReadOnlyAwareAdmin): |
Scott Baker | 1b06b6c | 2015-07-06 14:40:20 -0700 | [diff] [blame] | 212 | list_display = ('backend_status_icon', 'id', 'subscriber_tenant' ) |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 213 | list_display_links = ('backend_status_icon', 'id') |
Scott Baker | 1b06b6c | 2015-07-06 14:40:20 -0700 | [diff] [blame] | 214 | fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'subscriber_tenant', 'service_specific_id', 'service_specific_attribute',], 'classes':['suit-tab suit-tab-general']})] |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 215 | readonly_fields = ('backend_status_text', ) |
| 216 | form = VBNGTenantForm |
| 217 | |
| 218 | suit_form_tabs = (('general','Details'),) |
| 219 | |
| 220 | def queryset(self, request): |
| 221 | return VBNGTenant.get_tenant_objects() |
| 222 | |
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 223 | admin.site.register(VOLTService, VOLTServiceAdmin) |
| 224 | admin.site.register(VOLTTenant, VOLTTenantAdmin) |
Scott Baker | 932a16c | 2015-04-21 17:15:18 -0700 | [diff] [blame] | 225 | admin.site.register(VCPEService, VCPEServiceAdmin) |
| 226 | admin.site.register(VCPETenant, VCPETenantAdmin) |
| 227 | admin.site.register(VBNGService, VBNGServiceAdmin) |
| 228 | admin.site.register(VBNGTenant, VBNGTenantAdmin) |
Scott Baker | 2986b1e | 2015-04-21 16:59:04 -0700 | [diff] [blame] | 229 | |