8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-24 12:23:11 +00:00
re2o/topologie/api/serializers.py
histausse 62d5139784 Add building to the room serialiser
Add dormitory to the building serialiser

Add dormitory to the building serialiser

Add dormitory to the building serialiser

Add dormitory to the building serialiser

Add building to the room serialiser

Add dormitory to the building serialiser

Add dormitory to the building serialiser

Add dormitory to the building serialiser

Add dormitory to the building serialiser
2020-09-01 17:20:37 +02:00

329 lines
8.7 KiB
Python

# -*- mode: python; coding: utf-8 -*-
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2018 Maël Kervella
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# 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.
from rest_framework import serializers
import topologie.models as topologie
import machines.models as machines
from machines.api.serializers import VlanSerializer, Ipv6ListSerializer
from api.serializers import NamespacedHRField, NamespacedHIField, NamespacedHMSerializer
class StackSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.Stack` objects
"""
class Meta:
model = topologie.Stack
fields = (
"name",
"stack_id",
"details",
"member_id_min",
"member_id_max",
"api_url",
)
class AccessPointSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.AccessPoint` objects
"""
class Meta:
model = topologie.AccessPoint
fields = ("user", "name", "active", "location", "api_url")
class SwitchSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.Switch` objects
"""
port_amount = serializers.IntegerField(source="number")
class Meta:
model = topologie.Switch
fields = (
"user",
"name",
"active",
"port_amount",
"stack",
"stack_member_id",
"model",
"switchbay",
"api_url",
)
class ServerSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.Server` objects
"""
class Meta:
model = topologie.Server
fields = ("user", "name", "active", "api_url")
class ModelSwitchSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.ModelSwitch` objects
"""
class Meta:
model = topologie.ModelSwitch
fields = ("reference", "constructor", "api_url")
class ConstructorSwitchSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.ConstructorSwitch` objects
"""
class Meta:
model = topologie.ConstructorSwitch
fields = ("name", "api_url")
class SwitchBaySerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.SwitchBay` objects
"""
class Meta:
model = topologie.SwitchBay
fields = ("name", "building", "info", "api_url")
class BuildingSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.Building` objects
"""
class Meta:
model = topologie.Building
fields = ("name", "dormitory", "api_url")
class DormitorySerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.Dormitory` objects
"""
class Meta:
model = topologie.Dormitory
fields = ("name", "api_url")
class SwitchPortSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.Port` objects
"""
get_port_profile = NamespacedHIField(view_name="portprofile-detail", read_only=True)
class Meta:
model = topologie.Port
fields = (
"switch",
"port",
"room",
"machine_interface",
"related",
"custom_profile",
"state",
"get_port_profile",
"details",
"api_url",
)
extra_kwargs = {
"related": {"view_name": "switchport-detail"},
"api_url": {"view_name": "switchport-detail"},
}
class PortProfileSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.Room` objects
"""
class Meta:
model = topologie.PortProfile
fields = (
"name",
"profil_default",
"vlan_untagged",
"vlan_tagged",
"radius_type",
"radius_mode",
"speed",
"mac_limit",
"flow_control",
"dhcp_snooping",
"dhcpv6_snooping",
"dhcpv6_snooping",
"arp_protect",
"ra_guard",
"loop_protect",
"api_url",
)
class RoomSerializer(NamespacedHMSerializer):
"""Serialize `topologie.models.Room` objects
"""
class Meta:
model = topologie.Room
fields = ("name", "building", "details", "api_url")
class PortProfileSerializer(NamespacedHMSerializer):
vlan_untagged = VlanSerializer(read_only=True)
class Meta:
model = topologie.PortProfile
fields = (
"name",
"profil_default",
"vlan_untagged",
"vlan_tagged",
"radius_type",
"radius_mode",
"speed",
"mac_limit",
"flow_control",
"dhcp_snooping",
"dhcpv6_snooping",
"arp_protect",
"ra_guard",
"loop_protect",
"vlan_untagged",
"vlan_tagged",
)
class InterfaceVlanSerializer(NamespacedHMSerializer):
domain = serializers.CharField(read_only=True)
ipv4 = serializers.CharField(read_only=True)
ipv6 = Ipv6ListSerializer(read_only=True, many=True)
vlan_id = serializers.IntegerField(
source="machine_type.ip_type.vlan.vlan_id", read_only=True
)
class Meta:
model = machines.Interface
fields = ("ipv4", "ipv6", "domain", "vlan_id")
class InterfaceRoleSerializer(NamespacedHMSerializer):
interface = InterfaceVlanSerializer(
source="machine.interface_set", read_only=True, many=True
)
class Meta:
model = machines.Interface
fields = ("interface",)
class RoleSerializer(NamespacedHMSerializer):
"""Serialize `machines.models.OuverturePort` objects.
"""
servers = InterfaceRoleSerializer(read_only=True, many=True)
class Meta:
model = machines.Role
fields = ("role_type", "servers", "specific_role")
class VlanPortSerializer(NamespacedHMSerializer):
class Meta:
model = machines.Vlan
fields = ("vlan_id", "name")
class ProfilSerializer(NamespacedHMSerializer):
vlan_untagged = VlanSerializer(read_only=True)
vlan_tagged = VlanPortSerializer(read_only=True, many=True)
class Meta:
model = topologie.PortProfile
fields = (
"name",
"profil_default",
"vlan_untagged",
"vlan_tagged",
"radius_type",
"radius_mode",
"speed",
"mac_limit",
"flow_control",
"dhcp_snooping",
"dhcpv6_snooping",
"arp_protect",
"ra_guard",
"loop_protect",
"vlan_untagged",
"vlan_tagged",
)
class ModelSwitchSerializer(NamespacedHMSerializer):
constructor = serializers.CharField(read_only=True)
class Meta:
model = topologie.ModelSwitch
fields = ("reference", "firmware", "constructor")
class SwitchBaySerializer(NamespacedHMSerializer):
class Meta:
model = topologie.SwitchBay
fields = ("name",)
class PortsSerializer(NamespacedHMSerializer):
"""Serialize `machines.models.Ipv6List` objects.
"""
get_port_profile = ProfilSerializer(read_only=True)
class Meta:
model = topologie.Port
fields = ("state", "port", "pretty_name", "get_port_profile")
class SwitchPortSerializer(serializers.ModelSerializer):
"""Serialize the data about the switches"""
ports = PortsSerializer(many=True, read_only=True)
model = ModelSwitchSerializer(read_only=True)
switchbay = SwitchBaySerializer(read_only=True)
class Meta:
model = topologie.Switch
fields = (
"short_name",
"model",
"switchbay",
"ports",
"ipv4",
"ipv6",
"interfaces_subnet",
"interfaces6_subnet",
"automatic_provision",
"rest_enabled",
"web_management_enabled",
"get_radius_key_value",
"get_management_cred_value",
"get_radius_servers",
"list_modules",
)