From 4b1a3cd8b09dab5a5bdd254c5b4a1937d0435a39 Mon Sep 17 00:00:00 2001 From: TehomCD Date: Sat, 14 Mar 2020 00:36:27 -0400 Subject: [PATCH] Convert serializer to use attributes/nickhandlers --- evennia/web/api/serializers.py | 62 ++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/evennia/web/api/serializers.py b/evennia/web/api/serializers.py index a1d265f3b7..6fab237da4 100644 --- a/evennia/web/api/serializers.py +++ b/evennia/web/api/serializers.py @@ -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"]