Changeset 6430
- Timestamp:
- Dec 10, 2008, 2:11:32 PM (17 years ago)
- File:
-
- 1 edited
-
trunk/exodus/views.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/exodus/views.py
r6371 r6430 1 1 # (c) Roland van Laar 2006 2 2 3 from django.db import models 4 from django.http import HttpResponse, HttpResponseRedirect 5 from django.template import Context, loader 3 from django.http import HttpResponseRedirect 6 4 from django.shortcuts import render_to_response 7 5 from django.core.urlresolvers import reverse, NoReverseMatch 8 from django.forms.formsets import formset_factory9 6 from django import forms 10 7 from socket import gethostname … … 12 9 from exodus.models import * 13 10 from exodus.wllogic import free_masterip, newSSIDName, addInterlinkIP, \ 14 freeInterlinkIP, freePublicAPIP11 freeInterlinkIP, freePublicAPIP 15 12 16 13 from exodus.utils import pdebug 17 14 18 15 class GenericHandler(object): 19 """Conventions used: type has to to the same name as the dependency20 object, delet template is named delete<type>.html21 """22 def __init__(self, request, mode):23 pdebug(100, "Function: GenericHandler.__init__")24 # Strip 'Handler' of name25 type = self.__class__.__name__[:-7:]26 formClass = eval(type + 'Form')27 28 self.object = eval('self.' + type[0].lower() + type[1::])29 self.title = self.object._meta.verbose_name30 self.request = request31 self.mode = mode32 self.is_changed = {}33 34 if request.POST.has_key('cancel'):35 pdebug(100, "Action cancel")36 self.form_action = 'cancel'37 # Allow overriding cancel call, in particular with regards to the38 # response call39 self._cancel()40 elif request.POST.has_key('proceed'):41 pdebug(100, "Action proceed")42 self.form_action = 'proceed'43 44 # Delete does not require a valid form45 if mode == 'delete':46 self._delete()47 else:48 # First checking whether form is valid, then add/edit actions49 self.form = formClass(request.POST, instance=self.object)50 try:51 if self.form.is_valid():52 pdebug(100, "Form valid")53 # Set response on forehand, to allow override \54 # in procedure55 try:56 self.response = HttpResponseRedirect(reverse( \57 'exodus.views.viewNode', args=[self.node.name]))58 except (AttributeError, NoReverseMatch):59 self.response = HttpResponseRedirect(reverse( \60 'exodus.views.viewNodelist'))61 62 #Checking whether data did change63 _oldInstance = dict(self.object.as_list())64 _instance = dict(self.form.save(commit=False).as_list())65 for key,value in _instance.items():66 if value != _oldInstance[key]:67 pdebug(100, "Key %s changed value '%s' -> '%s'"\68 % (key, _oldInstance[key], value))69 self.is_changed[key] = value70 71 # Call override procedure72 if mode == 'add':73 self._add()74 elif mode == 'edit':75 self._edit()76 else:77 raise ValueError, 'Mode "%s" not defined' % mode78 else:79 raise ValueError, 'Form error, please edit and resubmit'80 except ValueError, message:81 self.response = render_to_response('genericForm.html', {82 'form': self.form, 'message' : message,83 'title' : self.title, 'mode' : mode,84 'type' : type, 'object': self.object,85 'delInclude' : "delete" + type.capitalize() + ".html",86 'addInclude' : "add" + type.capitalize() + ".html",87 'editInclude' : "edit" + type.capitalize() + ".html" })88 else:89 message = 'Please edit and submit'90 91 # Dirty? hack to allow initial form to be filled with date \92 # for GET request, no errors raised93 if request.GET and mode == 'add':94 self.form = formClass(request.GET, instance=self.object)95 self.form._errors = {}96 else:97 self.form = formClass(instance=self.object)98 99 self.response = render_to_response('genericForm.html', {100 'form': self.form, 'message' : message, 'title' : self.title,101 'mode' : mode, 'type' : type, 'object': self.object,102 'delInclude' : "delete" + type.capitalize() + ".html",103 'addInclude' : "add" + type.capitalize() + ".html",104 'editInclude' : "edit" + type.capitalize() + ".html" })105 106 def _add(self):107 pdebug(100, "Function: GenericHandler._add")108 self.form.save()109 110 def _edit(self):111 pdebug(100, "Function: GenericHandler._edit")112 self.form.save()113 114 def _delete(self):115 pdebug(100, "Function: GenericHandler._delete")116 self.object.delete()117 self.response = HttpResponseRedirect(reverse('exodus.views.viewNode',\118 args=[self.node.name]))119 120 def _cancel(self):121 pdebug(100, "Function: GenericHandler._cancel")122 self.response = HttpResponseRedirect(reverse('exodus.views.viewNode',\123 args=[self.node.name]))124 #self.response = HttpResponseRedirect(reverse('exodus.views.viewNodelist'))125 126 def render_to_response(self):127 pdebug(100, "Function: GenericHandler.render_to_response")128 return self.response16 """Conventions used: type has to to the same name as the dependency 17 object, delet template is named delete<type>.html 18 """ 19 def __init__(self, request, mode): 20 pdebug(100, "Function: GenericHandler.__init__") 21 # Strip 'Handler' of name 22 type = self.__class__.__name__[:-7:] 23 formClass = eval(type + 'Form') 24 25 self.object = eval('self.' + type[0].lower() + type[1::]) 26 self.title = self.object._meta.verbose_name 27 self.request = request 28 self.mode = mode 29 self.is_changed = {} 30 31 if request.POST.has_key('cancel'): 32 pdebug(100, "Action cancel") 33 self.form_action = 'cancel' 34 # Allow overriding cancel call, in particular with regards to the 35 # response call 36 self._cancel() 37 elif request.POST.has_key('proceed'): 38 pdebug(100, "Action proceed") 39 self.form_action = 'proceed' 40 41 # Delete does not require a valid form 42 if mode == 'delete': 43 self._delete() 44 else: 45 # First checking whether form is valid, then add/edit actions 46 self.form = formClass(request.POST, instance=self.object) 47 try: 48 if self.form.is_valid(): 49 pdebug(100, "Form valid") 50 # Set response on forehand, to allow override \ 51 # in procedure 52 try: 53 self.response = HttpResponseRedirect(reverse( \ 54 'exodus.views.viewNode', args=[self.node.name])) 55 except (AttributeError, NoReverseMatch): 56 self.response = HttpResponseRedirect(reverse( \ 57 'exodus.views.viewNodelist')) 58 59 #Checking whether data did change 60 _oldInstance = dict(self.object.as_list()) 61 _instance = dict(self.form.save(commit=False).as_list()) 62 for key,value in _instance.items(): 63 if value != _oldInstance[key]: 64 pdebug(100, "Key %s changed value '%s' -> '%s'"\ 65 % (key, _oldInstance[key], value)) 66 self.is_changed[key] = value 67 68 # Call override procedure 69 if mode == 'add': 70 self._add() 71 elif mode == 'edit': 72 self._edit() 73 else: 74 raise ValueError, 'Mode "%s" not defined' % mode 75 else: 76 raise ValueError, 'Form error, please edit and resubmit' 77 except ValueError, message: 78 self.response = render_to_response('genericForm.html', { 79 'form': self.form, 'message' : message, 80 'title' : self.title, 'mode' : mode, 81 'type' : type, 'object': self.object, 82 'delInclude' : "delete" + type.capitalize() + ".html", 83 'addInclude' : "add" + type.capitalize() + ".html", 84 'editInclude' : "edit" + type.capitalize() + ".html" }) 85 else: 86 message = 'Please edit and submit' 87 88 # Dirty? hack to allow initial form to be filled with date \ 89 # for GET request, no errors raised 90 if request.GET and mode == 'add': 91 self.form = formClass(request.GET, instance=self.object) 92 self.form._errors = {} 93 else: 94 self.form = formClass(instance=self.object) 95 96 self.response = render_to_response('genericForm.html', { 97 'form': self.form, 'message' : message, 'title' : self.title, 98 'mode' : mode, 'type' : type, 'object': self.object, 99 'delInclude' : "delete" + type.capitalize() + ".html", 100 'addInclude' : "add" + type.capitalize() + ".html", 101 'editInclude' : "edit" + type.capitalize() + ".html" }) 102 103 def _add(self): 104 pdebug(100, "Function: GenericHandler._add") 105 self.form.save() 106 107 def _edit(self): 108 pdebug(100, "Function: GenericHandler._edit") 109 self.form.save() 110 111 def _delete(self): 112 pdebug(100, "Function: GenericHandler._delete") 113 self.object.delete() 114 self.response = HttpResponseRedirect(reverse('exodus.views.viewNode',\ 115 args=[self.node.name])) 116 117 def _cancel(self): 118 pdebug(100, "Function: GenericHandler._cancel") 119 self.response = HttpResponseRedirect(reverse('exodus.views.viewNode',\ 120 args=[self.node.name])) 121 #self.response = HttpResponseRedirect(reverse('exodus.views.viewNodelist')) 122 123 def render_to_response(self): 124 pdebug(100, "Function: GenericHandler.render_to_response") 125 return self.response 129 126 130 127 … … 132 129 # PublicAP 133 130 class PublicAPForm(forms.ModelForm): 134 class Meta:135 model = PublicAP136 exclude = ('shortdesc', 'desc', 'ip', 'dhcpstart', 'dhcpstop')131 class Meta: 132 model = PublicAP 133 exclude = ('shortdesc', 'desc', 'ip', 'dhcpstart', 'dhcpstop') 137 134 138 135 class PublicAPHandler(GenericHandler): 139 136 140 def __init__(self, request, node, interface, publicAP, mode):141 pdebug(100, "Function: PublicAPHandler.__init__")142 self.node = Node.objects.get(name=node)143 self.interface = Interface.objects.get(node=self.node, iface=interface)144 if mode == 'add':145 self.publicAP = PublicAP(iface=self.interface)146 else:147 self.publicAP = PublicAP.objects.get(iface=self.interface, \148 pk=publicAP)149 super(PublicAPHandler, self).__init__(request, mode)150 151 def _add(self):152 pdebug(100, "Function: PublicAPHandler._add")153 _instance = self.form.save(commit=False)154 # Find IP range inside interface range with disired size/subnet155 _instance.ip = freePublicAPIP(_instance.iface, _instance.netmask)156 _instance.dhcpstart = 1157 _instance.dhcpstop = 2158 # If wireless generate ssid name159 _instance.ssid = newSSIDName(_instance.iface.node, _instance.iface, \160 'omni')161 _instance.save()137 def __init__(self, request, node, interface, publicAP, mode): 138 pdebug(100, "Function: PublicAPHandler.__init__") 139 self.node = Node.objects.get(name=node) 140 self.interface = Interface.objects.get(node=self.node, iface=interface) 141 if mode == 'add': 142 self.publicAP = PublicAP(iface=self.interface) 143 else: 144 self.publicAP = PublicAP.objects.get(iface=self.interface, \ 145 pk=publicAP) 146 super(PublicAPHandler, self).__init__(request, mode) 147 148 def _add(self): 149 pdebug(100, "Function: PublicAPHandler._add") 150 _instance = self.form.save(commit=False) 151 # Find IP range inside interface range with disired size/subnet 152 _instance.ip = freePublicAPIP(_instance.iface, _instance.netmask) 153 _instance.dhcpstart = 1 154 _instance.dhcpstop = 2 155 # If wireless generate ssid name 156 _instance.ssid = newSSIDName(_instance.iface.node, _instance.iface, \ 157 'omni') 158 _instance.save() 162 159 163 160 def genericPublicAP(request, node, interface, publicAP, mode): 164 pdebug(100, "Function: genericPublicAP")165 handler = PublicAPHandler(request, node, interface, publicAP, mode)166 return handler.render_to_response()161 pdebug(100, "Function: genericPublicAP") 162 handler = PublicAPHandler(request, node, interface, publicAP, mode) 163 return handler.render_to_response() 167 164 168 165 # 169 166 # Interface 170 167 class InterfaceForm(forms.ModelForm): 171 class Meta:172 model = Interface173 exclude = ( 'ip', 'ssid', 'mode', 'channel', 'shortdesc', \174 'netmask' )168 class Meta: 169 model = Interface 170 exclude = ( 'ip', 'ssid', 'mode', 'channel', 'shortdesc', \ 171 'netmask' ) 175 172 176 173 class InterfaceHandler(GenericHandler): 177 def __init__(self, request, node, interface, mode):178 pdebug(100, "Function: InterfaceHandler.__init__")179 self.node = Node.objects.get(name=node)180 if mode == 'add':181 self.interface = Interface(node=self.node)182 else:183 self.interface = Interface.objects.get(node=self.node, \184 iface=interface)185 super(InterfaceHandler, self).__init__(request, mode)186 187 def _add(self):188 pdebug(100, "Function: InterfaceHandler._add")189 self._saveInterface()190 191 def _edit(self):192 pdebug(100, "Function: InterfaceHandler._edit")193 self._saveInterface()194 195 def _saveInterface(self):196 pdebug(100, "Function: InterfaceHandler._saveInterface")197 _instance = self.form.save(commit=False)198 if _instance.link and (_instance.type != _instance.link.type):199 raise ValueError,'Type of local and remote interface needs to match'200 if str(_instance.type) != "eth":201 _instance.ssid = newSSIDName(_instance.node, _instance.iface, \202 'unused')203 _instance.channel = '1'204 _instance.mode = 1 # set to master205 206 # Only change IP if changes in interface link/mask or new of course :-)207 if self.mode == 'add' or self.is_changed.has_key('link') or \208 self.is_changed.has_key('netmask'):209 if not _instance.link:210 _instance.ip = freeInterlinkIP(_instance)211 else:212 _instance.ip = addInterlinkIP(_instance.link)213 214 # XXX: Change in netmask requires full range of netmask changes \215 # on slaves216 _instance.save()217 #Dirty to hack to get reference to self working218 if not _instance.link:219 _instance.link = _instance220 _instance.save()174 def __init__(self, request, node, interface, mode): 175 pdebug(100, "Function: InterfaceHandler.__init__") 176 self.node = Node.objects.get(name=node) 177 if mode == 'add': 178 self.interface = Interface(node=self.node) 179 else: 180 self.interface = Interface.objects.get(node=self.node, \ 181 iface=interface) 182 super(InterfaceHandler, self).__init__(request, mode) 183 184 def _add(self): 185 pdebug(100, "Function: InterfaceHandler._add") 186 self._saveInterface() 187 188 def _edit(self): 189 pdebug(100, "Function: InterfaceHandler._edit") 190 self._saveInterface() 191 192 def _saveInterface(self): 193 pdebug(100, "Function: InterfaceHandler._saveInterface") 194 _instance = self.form.save(commit=False) 195 if _instance.link and (_instance.type != _instance.link.type): 196 raise ValueError,'Type of local and remote interface needs to match' 197 if str(_instance.type) != "eth": 198 _instance.ssid = newSSIDName(_instance.node, _instance.iface, \ 199 'unused') 200 _instance.channel = '1' 201 _instance.mode = 1 # set to master 202 203 # Only change IP if changes in interface link/mask or new of course :-) 204 if self.mode == 'add' or self.is_changed.has_key('link') or \ 205 self.is_changed.has_key('netmask'): 206 if not _instance.link: 207 _instance.ip = freeInterlinkIP(_instance) 208 else: 209 _instance.ip = addInterlinkIP(_instance.link) 210 211 # XXX: Change in netmask requires full range of netmask changes \ 212 # on slaves 213 _instance.save() 214 #Dirty to hack to get reference to self working 215 if not _instance.link: 216 _instance.link = _instance 217 _instance.save() 221 218 222 219 def genericInterface(request, node, interface, mode): 223 pdebug(100, "Function: genericInterface")224 handler = InterfaceHandler(request, node, interface, mode)225 return handler.render_to_response()220 pdebug(100, "Function: genericInterface") 221 handler = InterfaceHandler(request, node, interface, mode) 222 return handler.render_to_response() 226 223 227 224 # 228 225 # Node 229 226 class NodeForm(forms.ModelForm): 230 class Meta:231 model = Node232 exclude = ( 'masterip' )227 class Meta: 228 model = Node 229 exclude = ( 'masterip' ) 233 230 234 231 class NodeHandler(GenericHandler): 235 def __init__(self, request, node, mode):236 pdebug(100, "Function: NodeHandler.__init__")237 if mode == 'add':238 self.node = Node()239 else:240 self.node = Node.objects.get(name=node)241 super(NodeHandler, self).__init__(request, mode)242 243 def _add(self):244 pdebug(100, "Function: NodeHandler._add")245 # input a valid master ip into new_data246 _instance = self.form.save(commit=False)247 _instance.masterip = free_masterip(_instance.network)248 _instance.save()249 self.response = HttpResponseRedirect(reverse('exodus.views.viewNode', \250 args=[_instance.name]))251 252 def _delete(self):253 pdebug(100, "Function: NodeHandler._delete")254 for _master in Interface.objects.filter(node=self.object):255 if _master.link == _master:256 for _makeMaster in Interface.objects.filter(link=_master):257 _makeMaster.link = _makeMaster258 _makeMaster.save()259 self.object.delete()260 # As node is deleted, goto overview page261 self.response = HttpResponseRedirect(reverse( \262 'exodus.views.viewNodelist'))263 264 def _cancel(self):265 pdebug(100, "Function: NodeHandler._cancel")266 if self.mode == 'new':267 self.response = HttpResponseRedirect(reverse( \268 'exodus.views.viewNodelist'))269 else:270 self.response = HttpResponseRedirect(reverse( \271 'exodus.views.viewNode', args=[self.node.name]))232 def __init__(self, request, node, mode): 233 pdebug(100, "Function: NodeHandler.__init__") 234 if mode == 'add': 235 self.node = Node() 236 else: 237 self.node = Node.objects.get(name=node) 238 super(NodeHandler, self).__init__(request, mode) 239 240 def _add(self): 241 pdebug(100, "Function: NodeHandler._add") 242 # input a valid master ip into new_data 243 _instance = self.form.save(commit=False) 244 _instance.masterip = free_masterip(_instance.network) 245 _instance.save() 246 self.response = HttpResponseRedirect(reverse('exodus.views.viewNode', \ 247 args=[_instance.name])) 248 249 def _delete(self): 250 pdebug(100, "Function: NodeHandler._delete") 251 for _master in Interface.objects.filter(node=self.object): 252 if _master.link == _master: 253 for _makeMaster in Interface.objects.filter(link=_master): 254 _makeMaster.link = _makeMaster 255 _makeMaster.save() 256 self.object.delete() 257 # As node is deleted, goto overview page 258 self.response = HttpResponseRedirect(reverse( \ 259 'exodus.views.viewNodelist')) 260 261 def _cancel(self): 262 pdebug(100, "Function: NodeHandler._cancel") 263 if self.mode == 'new': 264 self.response = HttpResponseRedirect(reverse( \ 265 'exodus.views.viewNodelist')) 266 else: 267 self.response = HttpResponseRedirect(reverse( \ 268 'exodus.views.viewNode', args=[self.node.name])) 272 269 273 270 def genericNode(request, node, mode): 274 pdebug(100, "Function: genericNode")275 handler = NodeHandler(request, node, mode)276 return handler.render_to_response()271 pdebug(100, "Function: genericNode") 272 handler = NodeHandler(request, node, mode) 273 return handler.render_to_response() 277 274 278 275 # 279 276 # location 280 277 class LocationForm(forms.ModelForm): 281 class Meta:282 model = Location278 class Meta: 279 model = Location 283 280 284 281 class LocationHandler(GenericHandler): 285 def __init__(self, request, location, mode):286 pdebug(100, "Function: LocationHandler.__init__")287 if mode == 'add':288 self.location = Location()289 else:290 self.location = Location.objects.get(description=location)291 292 super(LocationHandler,self).__init__(request, mode)293 294 def _add(self):295 pdebug(100, "Function: LocationHandler._add")296 _instance = self.form.save()297 # After adding a location, allow adding a Node with this location298 self.response = HttpResponseRedirect( \299 reverse('exodus.views.genericNode', args=["add", "new"]) + \300 "?location=%i" % _instance.pk)301 302 def _delete(self):303 pdebug(100, "Function: LocationHandler._delete")304 self.object.delete()305 self.response = HttpResponseRedirect(reverse( \306 'exodus.views.viewNodelist'))307 308 def _cancel(self):309 pdebug(100, "Function: LocationHandler._cancel")310 self.response = HttpResponseRedirect(reverse( \311 'exodus.views.viewNodelist'))282 def __init__(self, request, location, mode): 283 pdebug(100, "Function: LocationHandler.__init__") 284 if mode == 'add': 285 self.location = Location() 286 else: 287 self.location = Location.objects.get(description=location) 288 289 super(LocationHandler,self).__init__(request, mode) 290 291 def _add(self): 292 pdebug(100, "Function: LocationHandler._add") 293 _instance = self.form.save() 294 # After adding a location, allow adding a Node with this location 295 self.response = HttpResponseRedirect( \ 296 reverse('exodus.views.genericNode', args=["add", "new"]) + \ 297 "?location=%i" % _instance.pk) 298 299 def _delete(self): 300 pdebug(100, "Function: LocationHandler._delete") 301 self.object.delete() 302 self.response = HttpResponseRedirect(reverse( \ 303 'exodus.views.viewNodelist')) 304 305 def _cancel(self): 306 pdebug(100, "Function: LocationHandler._cancel") 307 self.response = HttpResponseRedirect(reverse( \ 308 'exodus.views.viewNodelist')) 312 309 313 310 # 314 311 # Views 315 312 def viewNode(request, node): 316 pdebug(100, "Function: viewNode")317 node = Node.objects.get(name=node)318 return render_to_response('viewNode.html', {'node': node})313 pdebug(100, "Function: viewNode") 314 node = Node.objects.get(name=node) 315 return render_to_response('viewNode.html', {'node': node}) 319 316 320 317 def viewNodelist(request): 321 pdebug(100, "Function: viewNodelist")322 nodes = Node.objects.all()323 configFiles = (324 'rc.local',325 'rc.node.local',326 'dhcpd.conf',327 'named.conf',328 'resolv.conf' )329 return render_to_response('viewNodelist.html', {'nodes' : nodes, \330 'configFiles' : configFiles})318 pdebug(100, "Function: viewNodelist") 319 nodes = Node.objects.all() 320 configFiles = ( 321 'rc.local', 322 'rc.node.local', 323 'dhcpd.conf', 324 'named.conf', 325 'resolv.conf' ) 326 return render_to_response('viewNodelist.html', {'nodes' : nodes, \ 327 'configFiles' : configFiles}) 331 328 332 329 def configFile(request, version, node, file): 333 pdebug(100, "Function: configFile")334 node = Node.objects.get(name=node)335 336 # Extra statictics information for use of generation337 server = {}338 server['host'] = gethostname()339 340 templateFile = version + '/' + file341 return render_to_response(templateFile, {'node' : node, 'server' : server},\342 mimetype='text/plain')330 pdebug(100, "Function: configFile") 331 node = Node.objects.get(name=node) 332 333 # Extra statictics information for use of generation 334 server = {} 335 server['host'] = gethostname() 336 337 templateFile = version + '/' + file 338 return render_to_response(templateFile, {'node' : node, 'server' : server},\ 339 mimetype='text/plain') 343 340 344 341 # 345 342 # DnsServer 346 343 class DnsServerForm(forms.ModelForm): 347 class Meta:348 model = DnsServer344 class Meta: 345 model = DnsServer 349 346 350 347 class DnsServerHandler(GenericHandler): 351 def __init__(self, request, dnsServer, mode):352 pdebug(100, "Function: DnsServerHandler.__init__")353 if mode == 'add':354 self.dnsServer = DnsServer()355 else:356 self.dnsServer= DnsServer.objects.get(ipaddress=dnsServer)357 super(DnsServerHandler, self).__init__(request, mode)358 359 def _add(self):360 pdebug(100, "Function: DnsServerHandler._add")361 _instance = self.form.save()362 self.response = HttpResponseRedirect(reverse('exodus.views.viewList', \363 args=['dnsServer']))364 365 def _delete(self):366 pdebug(100, "Function: DnsServerHandler._delete")367 self.object.delete()368 self.response = HttpResponseRedirect(reverse('exodus.views.viewList', \369 args=['dnsServer']))370 371 def _cancel(self):372 pdebug(100, "Function: DnsServerHandler._cancel")373 self.response = HttpResponseRedirect(reverse('exodus.views.viewList', \374 args=['dnsServer']))348 def __init__(self, request, dnsServer, mode): 349 pdebug(100, "Function: DnsServerHandler.__init__") 350 if mode == 'add': 351 self.dnsServer = DnsServer() 352 else: 353 self.dnsServer= DnsServer.objects.get(ipaddress=dnsServer) 354 super(DnsServerHandler, self).__init__(request, mode) 355 356 def _add(self): 357 pdebug(100, "Function: DnsServerHandler._add") 358 _instance = self.form.save() 359 self.response = HttpResponseRedirect(reverse('exodus.views.viewList', \ 360 args=['dnsServer'])) 361 362 def _delete(self): 363 pdebug(100, "Function: DnsServerHandler._delete") 364 self.object.delete() 365 self.response = HttpResponseRedirect(reverse('exodus.views.viewList', \ 366 args=['dnsServer'])) 367 368 def _cancel(self): 369 pdebug(100, "Function: DnsServerHandler._cancel") 370 self.response = HttpResponseRedirect(reverse('exodus.views.viewList', \ 371 args=['dnsServer'])) 375 372 376 373 def genericModel(request, model, mode, object): 377 pdebug(100, "Function: genericModel %s, %s, %s" % (model, mode, object))378 """Wrapper, to get to the function needed"""379 model = model[0].upper() + model[1::]380 model = eval(model + 'Handler')381 handler = model(request, object, mode)382 return handler.render_to_response()374 pdebug(100, "Function: genericModel %s, %s, %s" % (model, mode, object)) 375 """Wrapper, to get to the function needed""" 376 model = model[0].upper() + model[1::] 377 model = eval(model + 'Handler') 378 handler = model(request, object, mode) 379 return handler.render_to_response() 383 380 384 381 def viewList(request, model): 385 pdebug(100, "Function: viewList")386 """Standard interface for simple overview pages, with view/edit/delete387 buttons on it388 """389 modelURL = model390 model = model[0].upper() + model[1::]391 modelName = model392 model = eval(model)393 objects = model.objects.all()394 return render_to_response('viewList.html', {'objects': objects, \395 'modelURL' : modelURL, 'modelName' : modelName})382 pdebug(100, "Function: viewList") 383 """Standard interface for simple overview pages, with view/edit/delete 384 buttons on it 385 """ 386 modelURL = model 387 model = model[0].upper() + model[1::] 388 modelName = model 389 model = eval(model) 390 objects = model.objects.all() 391 return render_to_response('viewList.html', {'objects': objects, \ 392 'modelURL' : modelURL, 'modelName' : modelName})
Note:
See TracChangeset
for help on using the changeset viewer.
