Convert serializer to use attributes/nickhandlers

This commit is contained in:
TehomCD 2020-03-14 00:36:27 -04:00
parent 4157975969
commit 4b1a3cd8b0

View file

@ -62,9 +62,10 @@ class TypeclassSerializerMixin(object):
not have them render PK-related fields.
"""
shared_fields = ["id", "db_key", "db_attributes", "db_typeclass_path", "aliases", "tags", "permissions"]
shared_fields = ["id", "db_key", "attributes", "db_typeclass_path", "aliases", "tags", "permissions"]
def get_tags(self, obj):
@staticmethod
def get_tags(obj):
"""
Serializes tags from the object's Tagshandler
Args:
@ -75,7 +76,8 @@ class TypeclassSerializerMixin(object):
"""
return TagSerializer(obj.tags.get(return_tagobj=True, return_list=True), many=True).data
def get_aliases(self, obj):
@staticmethod
def get_aliases(obj):
"""
Serializes tags from the object's Aliashandler
Args:
@ -86,7 +88,8 @@ class TypeclassSerializerMixin(object):
"""
return TagSerializer(obj.aliases.get(return_tagobj=True, return_list=True), many=True).data
def get_permissions(self, obj):
@staticmethod
def get_permissions(obj):
"""
Serializes tags from the object's Permissionshandler
Args:
@ -97,9 +100,34 @@ class TypeclassSerializerMixin(object):
"""
return TagSerializer(obj.permissions.get(return_tagobj=True, return_list=True), many=True).data
@staticmethod
def get_attributes(obj):
"""
Serializes attributes from the object's AttributeHandler
Args:
obj: Typeclassed object being serialized
Returns:
List of AttributeSerializer data
"""
return AttributeSerializer(obj.attributes.all(), many=True).data
@staticmethod
def get_nicks(obj):
"""
Serializes attributes from the object's NicksHandler
Args:
obj: Typeclassed object being serialized
Returns:
List of AttributeSerializer data
"""
return AttributeSerializer(obj.nicks.all(), many=True).data
class ObjectDBSerializer(TypeclassSerializerMixin, serializers.ModelSerializer):
db_attributes = AttributeSerializer(many=True, read_only=True)
attributes = serializers.SerializerMethodField()
nicks = serializers.SerializerMethodField()
contents = serializers.SerializerMethodField()
exits = serializers.SerializerMethodField()
tags = serializers.SerializerMethodField()
@ -108,10 +136,11 @@ class ObjectDBSerializer(TypeclassSerializerMixin, serializers.ModelSerializer):
class Meta:
model = DefaultObject
fields = ["db_location", "db_home", "contents", "exits"] + TypeclassSerializerMixin.shared_fields
read_only_fields = ["id", "db_attributes"]
fields = ["db_location", "db_home", "contents", "exits", "nicks"] + TypeclassSerializerMixin.shared_fields
read_only_fields = ["id"]
def get_exits(self, obj):
@staticmethod
def get_exits(obj):
"""
Gets exits for the object
Args:
@ -123,7 +152,8 @@ class ObjectDBSerializer(TypeclassSerializerMixin, serializers.ModelSerializer):
exits = [ob for ob in obj.contents if ob.destination]
return SimpleObjectDBSerializer(exits, many=True).data
def get_contents(self, obj):
@staticmethod
def get_contents(obj):
"""
Gets non-exits for the object
Args:
@ -138,14 +168,16 @@ class ObjectDBSerializer(TypeclassSerializerMixin, serializers.ModelSerializer):
class AccountSerializer(TypeclassSerializerMixin, serializers.ModelSerializer):
"""This uses the DefaultAccount object to have access to the sessions property"""
db_attributes = AttributeSerializer(many=True, read_only=True)
attributes = serializers.SerializerMethodField()
nicks = serializers.SerializerMethodField()
db_key = serializers.CharField(required=False)
session_ids = serializers.SerializerMethodField()
tags = serializers.SerializerMethodField()
aliases = serializers.SerializerMethodField()
permissions = serializers.SerializerMethodField()
def get_session_ids(self, obj):
@staticmethod
def get_session_ids(obj):
"""
Gets a list of session IDs connected to this Account
Args:
@ -158,12 +190,12 @@ class AccountSerializer(TypeclassSerializerMixin, serializers.ModelSerializer):
class Meta:
model = DefaultAccount
fields = ["username", "session_ids"] + TypeclassSerializerMixin.shared_fields
read_only_fields = ["id", "db_attributes", "db_tags", "session_ids"]
fields = ["username", "session_ids", "nicks"] + TypeclassSerializerMixin.shared_fields
read_only_fields = ["id"]
class ScriptDBSerializer(TypeclassSerializerMixin, serializers.ModelSerializer):
db_attributes = AttributeSerializer(many=True, read_only=True)
attributes = serializers.SerializerMethodField()
tags = serializers.SerializerMethodField()
aliases = serializers.SerializerMethodField()
permissions = serializers.SerializerMethodField()
@ -172,4 +204,4 @@ class ScriptDBSerializer(TypeclassSerializerMixin, serializers.ModelSerializer):
model = ScriptDB
fields = ["db_interval", "db_persistent", "db_start_delay",
"db_is_active", "db_repeats"] + TypeclassSerializerMixin.shared_fields
read_only_fields = ["id", "db_attributes", "db_tags"]
read_only_fields = ["id"]