|
|
|
@ -19,7 +19,20 @@ |
|
|
|
# You should have received a copy of the GNU General Public License along |
|
|
|
# with this program; if not, write to the Free Software Foundation, Inc., |
|
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|
|
|
""" |
|
|
|
Page des vues de l'application topologie |
|
|
|
|
|
|
|
Permet de créer, modifier et supprimer : |
|
|
|
- un port (add_port, edit_port, del_port) |
|
|
|
- un switch : les vues d'ajout et d'édition font appel aux forms de creation |
|
|
|
de switch, mais aussi aux forms de machines.forms (domain, interface et |
|
|
|
machine). Le views les envoie et les save en même temps. TODO : rationaliser |
|
|
|
et faire que la creation de machines (interfaces, domain etc) soit gérée |
|
|
|
coté models et forms de topologie |
|
|
|
- une chambre (new_room, edit_room, del_room) |
|
|
|
- une stack |
|
|
|
- l'historique de tous les objets cités |
|
|
|
""" |
|
|
|
from __future__ import unicode_literals |
|
|
|
|
|
|
|
from django.shortcuts import render, redirect |
|
|
|
@ -33,11 +46,12 @@ from reversion import revisions as reversion |
|
|
|
from reversion.models import Version |
|
|
|
|
|
|
|
from topologie.models import Switch, Port, Room, Stack |
|
|
|
from topologie.forms import EditPortForm, NewSwitchForm, EditSwitchForm, AddPortForm, EditRoomForm, StackForm |
|
|
|
from topologie.forms import EditPortForm, NewSwitchForm, EditSwitchForm |
|
|
|
from topologie.forms import AddPortForm, EditRoomForm, StackForm |
|
|
|
from users.views import form |
|
|
|
from users.models import User |
|
|
|
|
|
|
|
from machines.forms import AliasForm, NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm |
|
|
|
from machines.forms import AliasForm, NewMachineForm, EditMachineForm |
|
|
|
from machines.forms import EditInterfaceForm, AddInterfaceForm |
|
|
|
from preferences.models import AssoOption, GeneralOption |
|
|
|
|
|
|
|
|
|
|
|
@ -45,41 +59,52 @@ from preferences.models import AssoOption, GeneralOption |
|
|
|
@permission_required('cableur') |
|
|
|
def index(request): |
|
|
|
""" Vue d'affichage de tous les swicthes""" |
|
|
|
switch_list = Switch.objects.order_by('stack','stack_member_id','location').select_related('switch_interface__domain__extension').select_related('switch_interface__ipv4').select_related('switch_interface__domain').select_related('stack') |
|
|
|
return render(request, 'topologie/index.html', {'switch_list': switch_list}) |
|
|
|
switch_list = Switch.objects.order_by( |
|
|
|
'stack', |
|
|
|
'stack_member_id', |
|
|
|
'location' |
|
|
|
)\ |
|
|
|
.select_related('switch_interface__domain__extension')\ |
|
|
|
.select_related('switch_interface__ipv4')\ |
|
|
|
.select_related('switch_interface__domain')\ |
|
|
|
.select_related('stack') |
|
|
|
return render(request, 'topologie/index.html', { |
|
|
|
'switch_list': switch_list |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('cableur') |
|
|
|
def history(request, object, id): |
|
|
|
def history(request, object_name, object_id): |
|
|
|
""" Vue générique pour afficher l'historique complet d'un objet""" |
|
|
|
if object == 'switch': |
|
|
|
if object_name == 'switch': |
|
|
|
try: |
|
|
|
object_instance = Switch.objects.get(pk=id) |
|
|
|
object_instance = Switch.objects.get(pk=object_id) |
|
|
|
except Switch.DoesNotExist: |
|
|
|
messages.error(request, "Switch inexistant") |
|
|
|
return redirect("/topologie/") |
|
|
|
elif object == 'port': |
|
|
|
messages.error(request, "Switch inexistant") |
|
|
|
return redirect("/topologie/") |
|
|
|
elif object_name == 'port': |
|
|
|
try: |
|
|
|
object_instance = Port.objects.get(pk=id) |
|
|
|
object_instance = Port.objects.get(pk=object_id) |
|
|
|
except Port.DoesNotExist: |
|
|
|
messages.error(request, "Port inexistant") |
|
|
|
return redirect("/topologie/") |
|
|
|
elif object == 'room': |
|
|
|
messages.error(request, "Port inexistant") |
|
|
|
return redirect("/topologie/") |
|
|
|
elif object_name == 'room': |
|
|
|
try: |
|
|
|
object_instance = Room.objects.get(pk=id) |
|
|
|
object_instance = Room.objects.get(pk=object_id) |
|
|
|
except Room.DoesNotExist: |
|
|
|
messages.error(request, "Chambre inexistante") |
|
|
|
return redirect("/topologie/") |
|
|
|
elif object == 'stack': |
|
|
|
messages.error(request, "Chambre inexistante") |
|
|
|
return redirect("/topologie/") |
|
|
|
elif object_name == 'stack': |
|
|
|
try: |
|
|
|
object_instance = Stack.objects.get(pk=id) |
|
|
|
object_instance = Stack.objects.get(pk=object_id) |
|
|
|
except Room.DoesNotExist: |
|
|
|
messages.error(request, "Stack inexistante") |
|
|
|
return redirect("/topologie/") |
|
|
|
messages.error(request, "Stack inexistante") |
|
|
|
return redirect("/topologie/") |
|
|
|
else: |
|
|
|
messages.error(request, "Objet inconnu") |
|
|
|
return redirect("/topologie/") |
|
|
|
options, created = GeneralOption.objects.get_or_create() |
|
|
|
options, _created = GeneralOption.objects.get_or_create() |
|
|
|
pagination_number = options.pagination_number |
|
|
|
reversions = Version.objects.get_for_object(object_instance) |
|
|
|
paginator = Paginator(reversions, pagination_number) |
|
|
|
@ -92,7 +117,11 @@ def history(request, object, id): |
|
|
|
except EmptyPage: |
|
|
|
# If page is out of range (e.g. 9999), deliver last page of results. |
|
|
|
reversions = paginator.page(paginator.num_pages) |
|
|
|
return render(request, 're2o/history.html', {'reversions': reversions, 'object': object_instance}) |
|
|
|
return render(request, 're2o/history.html', { |
|
|
|
'reversions': reversions, |
|
|
|
'object': object_instance |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('cableur') |
|
|
|
@ -103,15 +132,25 @@ def index_port(request, switch_id): |
|
|
|
except Switch.DoesNotExist: |
|
|
|
messages.error(request, u"Switch inexistant") |
|
|
|
return redirect("/topologie/") |
|
|
|
port_list = Port.objects.filter(switch = switch).select_related('room').select_related('machine_interface__domain__extension').select_related('related').select_related('switch').order_by('port') |
|
|
|
return render(request, 'topologie/index_p.html', {'port_list':port_list, 'id_switch':switch_id, 'nom_switch':switch}) |
|
|
|
port_list = Port.objects.filter(switch=switch)\ |
|
|
|
.select_related('room')\ |
|
|
|
.select_related('machine_interface__domain__extension')\ |
|
|
|
.select_related('related')\ |
|
|
|
.select_related('switch')\ |
|
|
|
.order_by('port') |
|
|
|
return render(request, 'topologie/index_p.html', { |
|
|
|
'port_list': port_list, |
|
|
|
'id_switch': switch_id, |
|
|
|
'nom_switch': switch |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('cableur') |
|
|
|
def index_room(request): |
|
|
|
""" Affichage de l'ensemble des chambres""" |
|
|
|
room_list = Room.objects.order_by('name') |
|
|
|
options, created = GeneralOption.objects.get_or_create() |
|
|
|
options, _created = GeneralOption.objects.get_or_create() |
|
|
|
pagination_number = options.pagination_number |
|
|
|
paginator = Paginator(room_list, pagination_number) |
|
|
|
page = request.GET.get('page') |
|
|
|
@ -123,13 +162,20 @@ def index_room(request): |
|
|
|
except EmptyPage: |
|
|
|
# If page is out of range (e.g. 9999), deliver last page of results. |
|
|
|
room_list = paginator.page(paginator.num_pages) |
|
|
|
return render(request, 'topologie/index_room.html', {'room_list': room_list}) |
|
|
|
return render(request, 'topologie/index_room.html', { |
|
|
|
'room_list': room_list |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
def index_stack(request): |
|
|
|
stack_list = Stack.objects.order_by('name').prefetch_related('switch_set__switch_interface__domain__extension') |
|
|
|
return render(request, 'topologie/index_stack.html', {'stack_list': stack_list}) |
|
|
|
"""Affichage de la liste des stacks (affiche l'ensemble des switches)""" |
|
|
|
stack_list = Stack.objects.order_by('name')\ |
|
|
|
.prefetch_related('switch_set__switch_interface__domain__extension') |
|
|
|
return render(request, 'topologie/index_stack.html', { |
|
|
|
'stack_list': stack_list |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@ -152,16 +198,24 @@ def new_port(request, switch_id): |
|
|
|
reversion.set_comment("Création") |
|
|
|
messages.success(request, "Port ajouté") |
|
|
|
except IntegrityError: |
|
|
|
messages.error(request,"Ce port existe déjà" ) |
|
|
|
messages.error(request, "Ce port existe déjà") |
|
|
|
return redirect("/topologie/switch/" + switch_id) |
|
|
|
return form({'topoform':port}, 'topologie/topo.html', request) |
|
|
|
return form({'topoform': port}, 'topologie/topo.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
def edit_port(request, port_id): |
|
|
|
""" Edition d'un port. Permet de changer le switch parent et l'affectation du port""" |
|
|
|
""" Edition d'un port. Permet de changer le switch parent et |
|
|
|
l'affectation du port""" |
|
|
|
try: |
|
|
|
port_object = Port.objects.select_related('switch__switch_interface__domain__extension').select_related('machine_interface__domain__extension').select_related('machine_interface__switch').select_related('room').select_related('related').get(pk=port_id) |
|
|
|
port_object = Port.objects\ |
|
|
|
.select_related('switch__switch_interface__domain__extension')\ |
|
|
|
.select_related('machine_interface__domain__extension')\ |
|
|
|
.select_related('machine_interface__switch')\ |
|
|
|
.select_related('room')\ |
|
|
|
.select_related('related')\ |
|
|
|
.get(pk=port_id) |
|
|
|
except Port.DoesNotExist: |
|
|
|
messages.error(request, u"Port inexistant") |
|
|
|
return redirect("/topologie/") |
|
|
|
@ -170,14 +224,17 @@ def edit_port(request, port_id): |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
port.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in port.changed_data)) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join( |
|
|
|
field for field in port.changed_data |
|
|
|
)) |
|
|
|
messages.success(request, "Le port a bien été modifié") |
|
|
|
return redirect("/topologie/switch/" + str(port_object.switch.id)) |
|
|
|
return form({'topoform':port}, 'topologie/topo.html', request) |
|
|
|
return form({'topoform': port}, 'topologie/topo.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
def del_port(request,port_id): |
|
|
|
def del_port(request, port_id): |
|
|
|
""" Supprime le port""" |
|
|
|
try: |
|
|
|
port = Port.objects.get(pk=port_id) |
|
|
|
@ -192,30 +249,30 @@ def del_port(request,port_id): |
|
|
|
reversion.set_comment("Destruction") |
|
|
|
messages.success(request, "Le port a eté détruit") |
|
|
|
except ProtectedError: |
|
|
|
messages.error(request, "Le port %s est affecté à un autre objet, impossible de le supprimer" % port) |
|
|
|
messages.error(request, "Le port %s est affecté à un autre objet,\ |
|
|
|
impossible de le supprimer" % port) |
|
|
|
return redirect('/topologie/switch/' + str(port.switch.id)) |
|
|
|
return form({'objet':port}, 'topologie/delete.html', request) |
|
|
|
return form({'objet': port}, 'topologie/delete.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
def new_stack(request): |
|
|
|
"""Ajoute un nouveau stack : stack_id_min, max, et nombre de switches""" |
|
|
|
stack = StackForm(request.POST or None) |
|
|
|
#if stack.is_valid(): |
|
|
|
if request.POST: |
|
|
|
try: |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
stack.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Création") |
|
|
|
messages.success(request, "Stack crée") |
|
|
|
except: |
|
|
|
messages.error(request, "Cette stack existe déjà") |
|
|
|
return form({'topoform':stack}, 'topologie/topo.html', request) |
|
|
|
if stack.is_valid(): |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
stack.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Création") |
|
|
|
messages.success(request, "Stack crée") |
|
|
|
return form({'topoform': stack}, 'topologie/topo.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
def edit_stack(request,stack_id): |
|
|
|
def edit_stack(request, stack_id): |
|
|
|
"""Edition d'un stack (nombre de switches, nom...)""" |
|
|
|
try: |
|
|
|
stack = Stack.objects.get(pk=stack_id) |
|
|
|
except Stack.DoesNotExist: |
|
|
|
@ -226,13 +283,19 @@ def edit_stack(request,stack_id): |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
stack.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in stack.changed_data)) |
|
|
|
reversion.set_comment( |
|
|
|
"Champs modifié(s) : %s" % ', '.join( |
|
|
|
field for field in stack.changed_data |
|
|
|
) |
|
|
|
) |
|
|
|
return redirect('/topologie/index_stack') |
|
|
|
return form({'topoform':stack}, 'topologie/topo.html', request) |
|
|
|
return form({'topoform': stack}, 'topologie/topo.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
def del_stack(request,stack_id): |
|
|
|
def del_stack(request, stack_id): |
|
|
|
"""Supprime un stack""" |
|
|
|
try: |
|
|
|
stack = Stack.objects.get(pk=stack_id) |
|
|
|
except Stack.DoesNotExist: |
|
|
|
@ -246,13 +309,16 @@ def del_stack(request,stack_id): |
|
|
|
reversion.set_comment("Destruction") |
|
|
|
messages.success(request, "La stack a eté détruite") |
|
|
|
except ProtectedError: |
|
|
|
messages.error(request, "La stack %s est affectée à un autre objet, impossible de la supprimer" % stack) |
|
|
|
messages.error(request, "La stack %s est affectée à un autre\ |
|
|
|
objet, impossible de la supprimer" % stack) |
|
|
|
return redirect('/topologie/index_stack') |
|
|
|
return form({'objet':stack}, 'topologie/delete.html', request) |
|
|
|
return form({'objet': stack}, 'topologie/delete.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
def edit_switchs_stack(request,stack_id): |
|
|
|
def edit_switchs_stack(request, stack_id): |
|
|
|
"""Permet d'éditer la liste des switches dans une stack et l'ajouter""" |
|
|
|
try: |
|
|
|
stack = Stack.objects.get(pk=stack_id) |
|
|
|
except Stack.DoesNotExist: |
|
|
|
@ -264,30 +330,36 @@ def edit_switchs_stack(request,stack_id): |
|
|
|
context = {'stack': stack} |
|
|
|
context['switchs_stack'] = stack.switchs_set.all() |
|
|
|
context['switchs_autres'] = Switch.object.filter(stack=None) |
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
def new_switch(request): |
|
|
|
""" Creation d'un switch. Cree en meme temps l'interface et la machine associée. |
|
|
|
Vue complexe. Appelle successivement les 4 models forms adaptés : machine, |
|
|
|
interface, domain et switch""" |
|
|
|
""" Creation d'un switch. Cree en meme temps l'interface et la machine |
|
|
|
associée. Vue complexe. Appelle successivement les 4 models forms |
|
|
|
adaptés : machine, interface, domain et switch""" |
|
|
|
switch = NewSwitchForm(request.POST or None) |
|
|
|
machine = NewMachineForm(request.POST or None) |
|
|
|
interface = AddInterfaceForm(request.POST or None, infra=request.user.has_perms(('infra',))) |
|
|
|
domain = AliasForm(request.POST or None, infra=request.user.has_perms(('infra',))) |
|
|
|
interface = AddInterfaceForm( |
|
|
|
request.POST or None, |
|
|
|
infra=request.user.has_perms(('infra',)) |
|
|
|
) |
|
|
|
domain = AliasForm( |
|
|
|
request.POST or None, |
|
|
|
infra=request.user.has_perms(('infra',)) |
|
|
|
) |
|
|
|
if switch.is_valid() and machine.is_valid() and interface.is_valid(): |
|
|
|
options, created = AssoOption.objects.get_or_create() |
|
|
|
options, _created = AssoOption.objects.get_or_create() |
|
|
|
user = options.utilisateur_asso |
|
|
|
if not user: |
|
|
|
messages.error(request, "L'user association n'existe pas encore, veuillez le créer ou le linker dans preferences") |
|
|
|
messages.error(request, "L'user association n'existe pas encore,\ |
|
|
|
veuillez le créer ou le linker dans preferences") |
|
|
|
return redirect("/topologie/") |
|
|
|
new_machine = machine.save(commit=False) |
|
|
|
new_machine.user = user |
|
|
|
new_interface = interface.save(commit=False) |
|
|
|
new_switch = switch.save(commit=False) |
|
|
|
new_domain = domain.save(commit=False) |
|
|
|
new_switch_instance = switch.save(commit=False) |
|
|
|
new_domain_instance = domain.save(commit=False) |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
new_machine.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
@ -297,58 +369,91 @@ def new_switch(request): |
|
|
|
new_interface.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Création") |
|
|
|
new_domain.interface_parent = new_interface |
|
|
|
new_domain_instance.interface_parent = new_interface |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
new_domain.save() |
|
|
|
new_domain_instance.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Création") |
|
|
|
new_switch.switch_interface = new_interface |
|
|
|
new_switch_instance.switch_interface = new_interface |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
new_switch.save() |
|
|
|
new_switch_instance.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Création") |
|
|
|
messages.success(request, "Le switch a été crée") |
|
|
|
return redirect("/topologie/") |
|
|
|
return form({'topoform':switch, 'machineform': machine, 'interfaceform': interface, 'domainform': domain}, 'topologie/switch.html', request) |
|
|
|
return form({ |
|
|
|
'topoform': switch, |
|
|
|
'machineform': machine, |
|
|
|
'interfaceform': interface, |
|
|
|
'domainform': domain |
|
|
|
}, 'topologie/switch.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
def edit_switch(request, switch_id): |
|
|
|
""" Edition d'un switch. Permet de chambre nombre de ports, place dans le stack, |
|
|
|
interface et machine associée""" |
|
|
|
""" Edition d'un switch. Permet de chambre nombre de ports, |
|
|
|
place dans le stack, interface et machine associée""" |
|
|
|
try: |
|
|
|
switch = Switch.objects.get(pk=switch_id) |
|
|
|
except Switch.DoesNotExist: |
|
|
|
messages.error(request, u"Switch inexistant") |
|
|
|
return redirect("/topologie/") |
|
|
|
switch_form = EditSwitchForm(request.POST or None, instance=switch) |
|
|
|
machine_form = EditMachineForm(request.POST or None, instance=switch.switch_interface.machine) |
|
|
|
interface_form = EditInterfaceForm(request.POST or None, instance=switch.switch_interface) |
|
|
|
domain_form = AliasForm(request.POST or None, infra=request.user.has_perms(('infra',)), instance=switch.switch_interface.domain) |
|
|
|
if switch_form.is_valid() and machine_form.is_valid() and interface_form.is_valid(): |
|
|
|
machine_form = EditMachineForm( |
|
|
|
request.POST or None, |
|
|
|
instance=switch.switch_interface.machine |
|
|
|
) |
|
|
|
interface_form = EditInterfaceForm( |
|
|
|
request.POST or None, |
|
|
|
instance=switch.switch_interface |
|
|
|
) |
|
|
|
domain_form = AliasForm( |
|
|
|
request.POST or None, |
|
|
|
infra=request.user.has_perms(('infra',)), |
|
|
|
instance=switch.switch_interface.domain |
|
|
|
) |
|
|
|
if switch_form.is_valid() and machine_form.is_valid()\ |
|
|
|
and interface_form.is_valid(): |
|
|
|
new_interface = interface_form.save(commit=False) |
|
|
|
new_machine = machine_form.save(commit=False) |
|
|
|
new_switch = switch_form.save(commit=False) |
|
|
|
new_switch_instance = switch_form.save(commit=False) |
|
|
|
new_domain = domain_form.save(commit=False) |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
new_machine.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in machine_form.changed_data)) |
|
|
|
reversion.set_comment( |
|
|
|
"Champs modifié(s) : %s" % ', '.join( |
|
|
|
field for field in machine_form.changed_data |
|
|
|
) |
|
|
|
) |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
new_interface.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in interface_form.changed_data)) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join( |
|
|
|
field for field in interface_form.changed_data) |
|
|
|
) |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
new_domain.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in domain_form.changed_data)) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join( |
|
|
|
field for field in domain_form.changed_data) |
|
|
|
) |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
new_switch.save() |
|
|
|
new_switch_instance.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in switch_form.changed_data)) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join( |
|
|
|
field for field in switch_form.changed_data) |
|
|
|
) |
|
|
|
messages.success(request, "Le switch a bien été modifié") |
|
|
|
return redirect("/topologie/") |
|
|
|
return form({'topoform':switch_form, 'machineform': machine_form, 'interfaceform': interface_form, 'domainform': domain_form}, 'topologie/switch.html', request) |
|
|
|
return form({ |
|
|
|
'topoform': switch_form, |
|
|
|
'machineform': machine_form, |
|
|
|
'interfaceform': interface_form, |
|
|
|
'domainform': domain_form |
|
|
|
}, 'topologie/switch.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
@ -362,7 +467,8 @@ def new_room(request): |
|
|
|
reversion.set_comment("Création") |
|
|
|
messages.success(request, "La chambre a été créé") |
|
|
|
return redirect("/topologie/index_room/") |
|
|
|
return form({'topoform':room}, 'topologie/topo.html', request) |
|
|
|
return form({'topoform': room}, 'topologie/topo.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
@ -378,10 +484,13 @@ def edit_room(request, room_id): |
|
|
|
with transaction.atomic(), reversion.create_revision(): |
|
|
|
room.save() |
|
|
|
reversion.set_user(request.user) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in room.changed_data)) |
|
|
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join( |
|
|
|
field for field in room.changed_data) |
|
|
|
) |
|
|
|
messages.success(request, "La chambre a bien été modifiée") |
|
|
|
return redirect("/topologie/index_room/") |
|
|
|
return form({'topoform':room}, 'topologie/topo.html', request) |
|
|
|
return form({'topoform': room}, 'topologie/topo.html', request) |
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
@permission_required('infra') |
|
|
|
@ -390,7 +499,7 @@ def del_room(request, room_id): |
|
|
|
try: |
|
|
|
room = Room.objects.get(pk=room_id) |
|
|
|
except Room.DoesNotExist: |
|
|
|
messages.error(request, u"Chambre inexistante" ) |
|
|
|
messages.error(request, u"Chambre inexistante") |
|
|
|
return redirect("/topologie/index_room/") |
|
|
|
if request.method == "POST": |
|
|
|
try: |
|
|
|
@ -400,6 +509,10 @@ def del_room(request, room_id): |
|
|
|
reversion.set_comment("Destruction") |
|
|
|
messages.success(request, "La chambre/prise a été détruite") |
|
|
|
except ProtectedError: |
|
|
|
messages.error(request, "La chambre %s est affectée à un autre objet, impossible de la supprimer (switch ou user)" % room) |
|
|
|
messages.error(request, "La chambre %s est affectée à un autre objet,\ |
|
|
|
impossible de la supprimer (switch ou user)" % room) |
|
|
|
return redirect("/topologie/index_room/") |
|
|
|
return form({'objet': room, 'objet_name': 'Chambre'}, 'topologie/delete.html', request) |
|
|
|
return form({ |
|
|
|
'objet': room, |
|
|
|
'objet_name': 'Chambre' |
|
|
|
}, 'topologie/delete.html', request) |
|
|
|
|