old_console/console/serializers.py
2024-11-02 14:12:45 +03:00

68 lines
2.1 KiB
Python

import logging
import re
from django.contrib.auth.models import Group, Permission
from django.utils.translation import gettext
from rest_framework import serializers
from assets.models.assets import Asset
from console.models import (Connection)
from core.serializers import ModelLocalizedSerializer, DateTimeLocalizedField
RE_GROUPNAME = re.compile('[@+!#$%^&*()<>?/|}{~:]')
logger_info = logging.getLogger('console.user.info')
_log = logging.getLogger()
class AllPermsSerializer(ModelLocalizedSerializer):
name = serializers.SerializerMethodField('get_name')
class Meta:
model = Permission
fields = ['codename', 'name', 'content_type']
def get_name(self, obj):
return gettext(obj.name)
class GroupNameSerializer(ModelLocalizedSerializer):
class Meta:
model = Group
fields = ['name']
def validate_name(self, value):
""" Method for validating the name, which was passed to the serializer
@param value: name from the serializer (pass through: serializer.data)
@return: name of the group
"""
# Check for special symbols in group name
if RE_GROUPNAME.search(value) is not None:
raise serializers.ValidationError(gettext('Incorrect group name format. Try another'))
return value
class CelerySerializer(serializers.Serializer):
task_id = serializers.UUIDField()
finished = serializers.BooleanField(required=False)
result = serializers.IntegerField(required=False)
# Network map serializers for ConnectionInfoSerializer
# Asset connection info serializer
class ConnectionAssetInfoSerializer(serializers.ModelSerializer):
class Meta:
model = Asset
fields = ['pk', 'name', 'ip']
# Connection serializer
class ConnectionSerializer(serializers.ModelSerializer):
src_asset = ConnectionAssetInfoSerializer()
dst_asset = ConnectionAssetInfoSerializer()
updated = DateTimeLocalizedField()
created = DateTimeLocalizedField()
class Meta:
model = Connection
fields = ['src_asset', 'dst_asset', 'connection_protocol', 'created', 'updated']