Changeset 6347


Ignore:
Timestamp:
Oct 17, 2008, 10:58:33 AM (16 years ago)
Author:
RIck van der Zwet
Message:
  • Various fixes on issues reported by Maarten, remove node, delete interface, etc...
  • included function calling debug information, to allow more easy debugging. E.g. print something like a stack trace
  • Partially implemented Location hander and DnsServerHandler
Location:
trunk/exodus
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/exodus/models.py

    r6324 r6347  
    6161#XXX: Name Domain perhaps?
    6262class DnsServer(ExtendedModel):
    63         ipaddress = models.IPAddressField()
    64         domainname = models.CharField(max_length=50, unique=True)
    65 
    66         def __str__(self):
    67                 return self.ipaddress
     63    ipaddress = models.IPAddressField()
     64    domainname = models.CharField(max_length=50, unique=True)
     65   
     66    class Meta:
     67        verbose_name = 'Dns Server'
     68   
     69    def __str__(self):
     70        return self.ipaddress
    6871
    6972class Network(ExtendedModel):
  • trunk/exodus/urls.py

    r6344 r6347  
    2424
    2525        # Generic urls
    26         (r'^(?P<mode>(add|edit|delete))/(?P<model>.+)/(?P<object>.+)/$', 'exodus.views.genericModel'),
    2726        (r'^(?P<mode>(add|edit|delete))/node/(?P<node>.+)/$', 'exodus.views.genericNode'),
    2827        (r'^(?P<mode>(add|edit|delete))/nic/(?P<node>.+)/(?P<interface>.+)/$', 'exodus.views.genericInterface'),
    2928        (r'^(?P<mode>(add|edit|delete))/dhcp/(?P<node>.+)/(?P<interface>.+)/(?P<publicAP>.+)/$', 'exodus.views.genericPublicAP'),
     29        (r'^(?P<mode>(add|edit|delete))/(?P<model>.+)/(?P<object>.+)/$', 'exodus.views.genericModel'),
    3030
    3131        # 3th party/embedded database browser
  • trunk/exodus/views.py

    r6344 r6347  
    1313from exodus.wllogic import freeMasterIP, newSSIDName, addInterlinkIP, freeInterlinkIP, freePublicAPIP
    1414
    15 
     15def pdebug(level, message):
     16        if level > 0:
     17                print "DEBUG [%s] %s" % (level, message)
    1618
    1719class GenericHandler():
    1820        """Conventions used: type has to to the same name as the dependency object, delet template is named delete<type>.html"""
    1921        def __init__(self, request, mode):
     22                pdebug(100, "Function: GenericHandler.__init__")
    2023                # Strip 'Handler' of name
    2124                type = self.__class__.__name__[:-7:]
     
    2932               
    3033                if request.POST.has_key('cancel'):
     34                        pdebug(100, "Action cancel")
    3135                        self.form_action = 'cancel'
     36                        # Allow overriding cancel call, in particular with regards to the
     37                        # response call
    3238                        self._cancel()
    3339                elif request.POST.has_key('proceed'):
     40                        pdebug(100, "Action proceed")
    3441                        self.form_action = 'proceed'
     42                       
     43                        # Delete does not require a valid form
    3544                        if mode == 'delete':
    3645                                self._delete()
     
    4049                                try:
    4150                                        if self.form.is_valid():
     51                                                pdebug(100, "Form valid")
    4252                                                # Set response on forehand, to allow override in procedure
    4353                                                try:
     
    4959                                                _oldInstance = dict(self.object.as_list())
    5060                                                _instance  = dict(self.form.save(commit=False).as_list())
    51                                                 for key,value in _oldInstance.items():
    52                                                         if value != _instance[key]:
     61                                                for key,value in _instance.items():
     62                                                        if value != _oldInstance[key]:
     63                                                                pdebug(100, "Key %s changed value '%s' -> '%s'" % (key, _oldInstance[key], value))
    5364                                                                self.is_changed[key] = value
    54 
     65                                               
     66                                                # Call override procedure
    5567                                                if mode == 'add':
    5668                                                        self._add()
    5769                                                elif mode == 'edit':
    5870                                                        self._edit()
     71                                                else:
     72                                                        raise ValueError, 'Mode "%s" not defined' % mode
    5973                                        else:
    6074                                                raise ValueError, 'Form error, please edit and resubmit'
     
    8498       
    8599        def _add(self):
     100                pdebug(100, "Function: GenericHandler._add")
    86101                self.form.save()
    87102       
    88103        def _edit(self):
     104                pdebug(100, "Function: GenericHandler._edit")
    89105                self.form.save()
    90106       
    91107        def _delete(self):
     108                pdebug(100, "Function: GenericHandler._delete")
    92109                self.object.delete()
    93110                self.response = HttpResponseRedirect(reverse('exodus.views.viewNode', args=[self.node.name]))
    94111       
    95112        def _cancel(self):
     113                pdebug(100, "Function: GenericHandler._cancel")
    96114                self.response = HttpResponseRedirect(reverse('exodus.views.viewNode', args=[self.node.name]))
    97115                #self.response = HttpResponseRedirect(reverse('exodus.views.viewNodelist'))
    98116       
    99117        def render_to_response(self):
     118                pdebug(100, "Function: GenericHandler.render_to_response")
    100119                return self.response
    101120
     
    111130
    112131        def __init__(self, request, node, interface, publicAP, mode):
     132                pdebug(100, "Function: PublicAPHandler.__init__")
    113133                self.node = Node.objects.get(name=node)
    114134                self.interface = Interface.objects.get(node=self.node, iface=interface)
     
    121141
    122142        def _add(self):
     143                pdebug(100, "Function: PublicAPHandler._add")
    123144                _instance = self.form.save(commit=False)
    124145                # Find IP range inside interface range with disired size/subnet
     
    131152
    132153def genericPublicAP(request, node, interface, publicAP, mode):
     154        pdebug(100, "Function: genericPublicAP")
    133155        handler = PublicAPHandler(request, node, interface, publicAP, mode)
    134156        return handler.render_to_response()
     
    145167class InterfaceHandler(GenericHandler):
    146168        def __init__(self, request, node, interface, mode):
     169                pdebug(100, "Function: nterfaceHandler.__init__")
    147170                self.node = Node.objects.get(name=node)
    148171                if mode == 'add':
     
    153176
    154177        def _add(self):
     178                pdebug(100, "Function: InterfaceHandler._add")
    155179                self._saveInterface()
    156180
    157181        def _edit(self):
     182                pdebug(100, "Function: InterfaceHandler._edit")
    158183                self._saveInterface()
    159184
    160185        def _saveInterface(self):
     186                pdebug(100, "Function: InterfaceHandler._saveInterface")
    161187                _instance  = self.form.save(commit=False)
    162188                if _instance.link and (_instance.type != _instance.link.type):
     
    167193                        _instance.mode = 1 # set to master
    168194               
    169                 # Only change IP if changes in interface link/mask
    170                 if self.is_changed.has_key('link') or self.is_changed.has_key('netmask'):
     195                # Only change IP if changes in interface link/mask or new of course :-)
     196                if self.mode == 'add' or self.is_changed.has_key('link') or self.is_changed.has_key('netmask'):
    171197                        if not _instance.link:
    172198                                _instance.ip = freeInterlinkIP(_instance)
     
    183209
    184210def genericInterface(request, node, interface, mode):
     211        pdebug(100, "Function: genericInterface")
    185212        handler = InterfaceHandler(request, node, interface, mode)
    186213        return handler.render_to_response()
     
    195222class NodeHandler(GenericHandler):
    196223        def __init__(self, request, node, mode):
     224                pdebug(100, "Function: NodeHandler.__init__")
    197225                if mode == 'add':
    198226                        self.node = Node()
     
    202230
    203231        def _add(self):
     232                pdebug(100, "Function: NodeHandler._add")
    204233                # input a valid master ip into new_data
    205234                _instance  = self.form.save(commit=False)
     
    209238
    210239        def _delete(self):
    211                 for _master in Interface.objects.filter(node=_instance):
     240                pdebug(100, "Function: NodeHandler._delete")
     241                for _master in Interface.objects.filter(node=self.object):
    212242                        if _master.link == _master:
    213243                                for _makeMaster in Interface.objects.filter(link=_master):
    214244                                        _makeMaster.link = _makeMaster
    215245                                        _makeMaster.save()
    216                 _instance.delete()
     246                self.object.delete()
    217247                # As node is deleted, goto overview page
    218248                self.response = HttpResponseRedirect(reverse('exodus.views.viewNodelist'))
    219249
    220250        def _cancel(self):
     251                pdebug(100, "Function: NodeHandler._cancel")
    221252                if self.mode == 'new':
    222253                        self.response = HttpResponseRedirect(reverse('exodus.views.viewNodelist'))
     
    225256
    226257def genericNode(request, node, mode):
     258        pdebug(100, "Function: genericNode")
    227259        handler = NodeHandler(request, node, mode)
    228260        return handler.render_to_response()
     
    236268class LocationHandler(GenericHandler):
    237269        def __init__(self, request, location, mode):
     270                pdebug(100, "Function: LocationHandler.__init__")
    238271                if mode == 'add':
    239272                        self.location = Location()
     
    243276
    244277        def _add(self):
     278                pdebug(100, "Function: LocationHandler._add")
    245279                _instance = self.form.save()
    246280                # After adding a location, allow adding a Node with this location
     
    249283
    250284        def _delete(self):
     285                pdebug(100, "Function: LocationHandler._delete")
    251286                self.object.delete()
    252287                self.response = HttpResponseRedirect(reverse('exodus.views.viewNodelist'))
    253288
    254289        def _cancel(self):
     290                pdebug(100, "Function: LocationHandler._cancel")
    255291                self.response = HttpResponseRedirect(reverse('exodus.views.viewNodelist'))
    256 
    257 def genericLocation(request, location, mode):
    258         handler = LocationHandler(request, location, mode)
    259         return handler.render_to_response()
    260 
    261292
    262293#
    263294# Views
    264295def viewNode(request, node):
     296        pdebug(100, "Function: viewNode")
    265297        node = Node.objects.get(name=node)
    266298        return render_to_response('viewNode.html', {'node': node})
    267299
    268300def viewNodelist(request):
     301        pdebug(100, "Function: viewNodelist")
    269302        nodes = Node.objects.all()
    270303        configFiles = (
     
    277310
    278311def configFile(request, version, node, file):
     312        pdebug(100, "Function: configFile")
    279313        node = Node.objects.get(name=node)
    280314       
     
    287321          mimetype='text/plain')
    288322
    289 def genericLocation(request, location, mode):
    290         handler = LocationHandler(request, location, mode)
    291         return handler.render_to_response()
     323#
     324# DnsServer
     325class DnsServerForm(forms.ModelForm):
     326        class Meta:
     327                model = DnsServer
     328
     329class DnsServerHandler(GenericHandler):
     330        def __init__(self, request, dnsServer, mode):
     331                pdebug(100, "Function: DnsServerHandler.__init__")
     332                if mode == 'add':
     333                        self.dnsServer = DnsServer()
     334                else:
     335                        self.dnsServer= DnsServer.objects.get(ipaddress=dnsServer)
     336                GenericHandler.__init__(self, request, mode)
     337
     338        def _add(self):
     339                pdebug(100, "Function: DnsServerHandler._add")
     340                _instance = self.form.save()
     341                self.response = HttpResponseRedirect(reverse('exodus.views.viewList', args=['dnsServer']))
     342
     343        def _delete(self):
     344                pdebug(100, "Function: DnsServerHandler._delete")
     345                self.object.delete()
     346                self.response = HttpResponseRedirect(reverse('exodus.views.viewList', args=['dnsServer']))
     347
     348        def _cancel(self):
     349                pdebug(100, "Function: DnsServerHandler._cancel")
     350                self.response = HttpResponseRedirect(reverse('exodus.views.viewList', args=['dnsServer']))
    292351
    293352def genericModel(request, model, mode, object):
     353        pdebug(100, "Function: genericModel %s, %s, %s" % (model, mode, object))
    294354        """Wrapper, to get to the function needed"""
    295         model = model.capitalize()
     355        model = model[0].upper() + model[1::]
    296356        model = eval(model + 'Handler')
    297357        handler = model(request, object, mode)
     
    299359
    300360def viewList(request, model):
     361        pdebug(100, "Function: viewList")
    301362        """Standard interface for simple overview pages, with view/edit/delete buttons on it"""
    302363        modelURL = model
Note: See TracChangeset for help on using the changeset viewer.