Files
centurion_erp/app/itam/serializers/inventory.py

144 lines
3.8 KiB
Python

from django.db.models import Q
from rest_framework import serializers
from core import exceptions as centurion_exceptions
from itam.models.device import Device
class InventorySerializer(serializers.Serializer):
""" Serializer for Inventory Upload """
class DetailsSerializer(serializers.Serializer):
name = serializers.CharField(
help_text = 'Host name',
required = True
)
serial_number = serializers.CharField(
default = None,
help_text = 'Devices serial number',
required = False
)
uuid = serializers.CharField(
default = None,
help_text = 'Device system UUID',
required = False
)
def validate(self, data):
if(
data['serial_number'] is None
and data['uuid'] is None
):
raise centurion_exceptions.ValidationError(
detail = 'Serial Number and/or UUID is required',
code = 'no_serial_or_uuid'
)
obj = Device.objects.filter(
Q(
name=str(data['name']).lower(),
serial_number = str(data['serial_number']).lower()
)
|
Q(
name = str(data['name']).lower(),
uuid = str(data['uuid']).lower()
)
|
Q(
serial_number = str(data['serial_number']).lower()
)
|
Q(
uuid = str(data['uuid']).lower()
)
)
if len(obj) > 1:
raise centurion_exceptions.ValidationError(
detail = {
'detail': 'Object is not unique. Confirm that uuid and/or serial number is unique'
},
code = 'not_unique'
)
elif len(obj) == 1:
obj = obj[0]
if obj.name == str(data['name']).lower():
if(
obj.serial_number != str(data['serial_number']).lower()
and obj.uuid != str(data['uuid']).lower()
):
raise centurion_exceptions.ValidationError(
detail = {
'detail': 'Device exists, however the serial number and/or UUID dont match'
},
code = 'not_unique'
)
return data
class OperatingSystemSerializer(serializers.Serializer):
name = serializers.CharField(
help_text='Name of the operating system installed on the device',
required = True,
)
version_major = serializers.IntegerField(
help_text='Major semver version number of the OS version',
required = True,
)
version = serializers.CharField(
help_text='semver version number of the OS',
required = True
)
class SoftwareSerializer(serializers.Serializer):
name = serializers.CharField(
help_text='Name of the software',
required = True
)
category = serializers.CharField(
help_text='Category of the software',
default = None,
required = False
)
version = serializers.CharField(
default = None,
help_text='semver version number of the software',
required = False
)
details = DetailsSerializer()
os = OperatingSystemSerializer( required = False )
software = SoftwareSerializer( many = True, required = False )