Source code for api.serializers

"""Module containing api app's serializers."""

from algosdk.constants import ADDRESS_LEN
from drf_spectacular.utils import OpenApiExample, extend_schema_serializer
from rest_framework.serializers import (
    BooleanField,
    CharField,
    ChoiceField,
    DecimalField,
    IntegerField,
    ListField,
    Serializer,
    StringRelatedField,
    URLField,
)

from api.data import (
    API_EXAMPLE_ADDRESS1,
    API_EXAMPLE_ADDRESS2,
    API_EXAMPLE_ADDRESS3,
    API_EXAMPLE_BUNDLE1,
    API_EXAMPLE_NFD_NAME1,
    API_EXAMPLE_NFD_NAME2,
    NFT_SALE_TYPES,
)


# # INPUT
[docs] @extend_schema_serializer( component_name="AddressesInput", examples=[ OpenApiExample("Single address", value={"addresses": API_EXAMPLE_ADDRESS1}), OpenApiExample( "Addresses", value={"addresses": f"{API_EXAMPLE_ADDRESS1};{API_EXAMPLE_ADDRESS2}"}, ), OpenApiExample( "NFD name", value={"addresses": f"{API_EXAMPLE_NFD_NAME1}"}, ), OpenApiExample( "Addresses and names", value={ "addresses": ( f"{API_EXAMPLE_ADDRESS1} {API_EXAMPLE_NFD_NAME1} " f"{API_EXAMPLE_ADDRESS2}" ) }, ), OpenApiExample( "NFD names", value={"addresses": f"{API_EXAMPLE_NFD_NAME1},{API_EXAMPLE_NFD_NAME2}"}, ), ], ) class BundleHashFromAddressesSerializer(Serializer): """Serialize collection of addresses and .algo names. :var BundleRetrieveSerializer.addresses: collection of public Algorand addresses :type BundleRetrieveSerializer.addresses: :class:`CharField` """ addresses = CharField()
[docs] @extend_schema_serializer( component_name="Bundle", examples=[ OpenApiExample("Regular bundle", value={"bundle": API_EXAMPLE_BUNDLE1}), OpenApiExample("From address", value={"bundle": API_EXAMPLE_ADDRESS1}), OpenApiExample("From NFD name", value={"bundle": API_EXAMPLE_ADDRESS3}), ], ) class BundleHashSerializer(Serializer): """Serialize bundle hash. :var BundleRetrieveSerializer.bundle: unique hash for public Algorand addresses :type BundleRetrieveSerializer.bundle: :class:`CharField` """ bundle = CharField(min_length=40, max_length=40)
[docs] @extend_schema_serializer(component_name="NfdName") class NfdNameSerializer(Serializer): """Serialize .algo name. :var NfdNameSerializer.nfd_name: NFD .algo name :type NfdNameSerializer.nfd_name: :class:`CharField` """ nfd_name = CharField(max_length=ADDRESS_LEN)
[docs] @extend_schema_serializer(component_name="NftSaleType") class NftSaleTypeQuerySerializer(Serializer): type = ChoiceField(required=False, choices=NFT_SALE_TYPES)
# # PROVIDERS
[docs] @extend_schema_serializer(component_name="Provider") class ProviderSerializer(Serializer): """Serialize dApp provider. :var ProviderSerializer.name: provider's unique name :type ProviderSerializer.name: :class:`CharField` :var ProviderSerializer.info: provider's information :type ProviderSerializer.info: :class:`CharField` """ name = CharField(max_length=20) info = CharField(max_length=100)
[docs] def to_representation(self, instance): """Return collection of non-empty field-value pairs. :param instance: provider's serializer instance :type instance: :class:`ProviderSerializer` :var result: provider serializer's field name and value pairs :type result: dict :return: dict """ result = super().to_representation(instance) return {key: value for key, value in result.items() if value is not None}
# # ASA
[docs] @extend_schema_serializer(component_name="AsaProgram") class AsaProgramSerializer(Serializer): """Serialize dApp program object. :var AsaProgramSerializer.type: program's type :type AsaProgramSerializer.type: :class:`CharField` :var AsaProgramSerializer.name: program's name :type AsaProgramSerializer.name: :class:`CharField` :var AsaProgramSerializer.provider: program's provider :type AsaProgramSerializer.provider: :class:`ProviderSerializer` :var AsaProgramSerializer.url: program's URL :type AsaProgramSerializer.url: :class:`URLField` :var AsaProgramSerializer.code: unique program's code :type AsaProgramSerializer.code: :class:`CharField` """ type = CharField(max_length=20) name = CharField(max_length=30) provider = ProviderSerializer() url = URLField() code = CharField(max_length=5)
[docs] def to_representation(self, instance): """Return collection of non-empty field-value pairs. :param instance: ASA program's serializer instance :type instance: :class:`AsaProgramSerializer` :var result: ASA program serializer's field name and value pairs :type result: dict :return: dict """ result = super().to_representation(instance) return {key: value for key, value in result.items() if value is not None}
[docs] @extend_schema_serializer(component_name="UserAsaProgramDistributionLink") class DistributionLinkSerializer(Serializer): """Serialize dApp program distribution link object. :var DistributionLinkSerializer.provider: program distribution's provider :type DistributionLinkSerializer.provider: :class:`ProviderSerializer` :var DistributionLinkSerializer.text: program distribution's link text :type DistributionLinkSerializer.text: :class:`CharField` :var DistributionLinkSerializer.url: program distribution's URL :type DistributionLinkSerializer.url: :class:`URLField` """ provider = ProviderSerializer() text = CharField(max_length=30) url = URLField()
[docs] @extend_schema_serializer(component_name="UserAsaProgramDistribution") class DistributionSerializer(Serializer): """Serialize asset dApp program distribution object. :var DistributionSerializer.value: asset's value in ALGO :type DistributionSerializer.value: :class:`DecimalField` :var DistributionSerializer.amount: asset's amount :type DistributionSerializer.amount: :class:`IntegerField` :var DistributionSerializer.links: program distribution link serializer :type DistributionSerializer.links: :class:`DistributionLinkSerializer` """ value = DecimalField(max_digits=20, decimal_places=6) amount = IntegerField() link = DistributionLinkSerializer()
[docs] @extend_schema_serializer(component_name="LinkedData") class LinkedDataSerializer(Serializer): """Serialize data linked to ASA program item. :var LinkedDataSerializer.provider: linked data's provider serializer :type LinkedDataSerializer.provider: :class:`ProviderSerializer` :var LinkedDataSerializer.text: linked data accompanied text :type LinkedDataSerializer.text: str :var LinkedDataSerializer.link: link to provider's website :type LinkedDataSerializer.link: :class:`URLField` :var LinkedDataSerializer.value: asset's value in ALGO :type LinkedDataSerializer.value: :class:`DecimalField` :var LinkedDataSerializer.amount: asset's amount :type LinkedDataSerializer.amount: :class:`IntegerField` :var LinkedDataSerializer.balance: asset's balance :type LinkedDataSerializer.balance: :class:`IntegerField` :var LinkedDataSerializer.info: addintional information for linked data :type LinkedDataSerializer.info: str :var LinkedDataSerializer.id: unique identifier for linked data :type LinkedDataSerializer.id: str """ provider = ProviderSerializer() text = CharField() link = URLField() value = DecimalField(max_digits=20, decimal_places=6) amount = IntegerField() balance = IntegerField() info = CharField() id = IntegerField()
[docs] def to_representation(self, instance): """Return collection of non-empty field-value pairs. :param instance: linked data's serializer instance :type instance: :class:`LinkedDataSerializer` :var result: linked data serializer's field name and value pairs :type result: dict :return: dict """ result = super().to_representation(instance) return {key: value for key, value in result.items() if value is not None}
[docs] @extend_schema_serializer(component_name="UserAsaProgram") class AsaItemProgramSerializer(Serializer): """Serialize asset dApp program object. :var AsaItemProgramSerializer.program: program's serializer :type AsaItemProgramSerializer.program: :class:`ProgramSerializer` :var AsaItemProgramSerializer.value: asset's value in ALGO :type AsaItemProgramSerializer.value: :class:`DecimalField` :var AsaItemProgramSerializer.amount: asset's amount :type AsaItemProgramSerializer.amount: :class:`IntegerField` :var AsaItemProgramSerializer.proxy: placeholder :type AsaItemProgramSerializer.proxy: :class:`StringRelatedField` :var AsaItemProgramSerializer.distribution: user's program distribution serializer :type AsaItemProgramSerializer.distribution: :class:`DistributionSerializer` :var AsaItemProgramSerializer.linked: serilazer of data linked to ASA item program :type AsaItemProgramSerializer.linked: :class:`LinkedDataSerializer` """ program = AsaProgramSerializer() value = DecimalField(max_digits=20, decimal_places=6) amount = IntegerField() proxy = StringRelatedField(many=True) distribution = DistributionSerializer(many=True) linked = LinkedDataSerializer(many=True)
[docs] def to_representation(self, instance): """Return collection of non-empty field-value pairs. :param instance: ASA item program's serializer instance :type instance: :class:`AsaItemProgramSerializer` :var result: ASA item program serializer's field name and value pairs :type result: dict :return: dict """ result = super().to_representation(instance) return {key: value for key, value in result.items() if value is not None}
[docs] @extend_schema_serializer(component_name="OffchainLink") class AsaLinkSerializer(Serializer): """Serialize dApp program object. :var AsaLinkSerializer.provider: link's provider serializer :type AsaLinkSerializer.provider: :class:`ProviderSerializer` :var AsaLinkSerializer.link: link to ASA page on provider's website :type AsaLinkSerializer.link: :class:`URLField` :var AsaLinkSerializer.title: link's description :type AsaLinkSerializer.title: :class:`URLField` """ provider = ProviderSerializer() link = URLField() title = CharField(max_length=32)
[docs] @extend_schema_serializer(component_name="Asa") class AsaSerializer(Serializer): """Serialize ASA object. :var AsaSerializer.id: asset's unique identifier :type AsaSerializer.id: :class:`IntegerField` :var AsaSerializer.name: asset's name :type AsaSerializer.name: :class:`CharField` :var AsaSerializer.unit: asset's unit name :type AsaSerializer.unit: :class:`CharField` :var AsaSerializer.total: asset's total supply :type AsaSerializer.total: :class:`IntegerField` :var AsaSerializer.decimals: asset's number of digits after decimal point :type AsaSerializer.decimals: :class:`IntegerField` :var AsaSerializer.url: asset's URL field :type AsaSerializer.url: :class:`CharField` :var AsaSerializer.links: asset's offchain links :type AsaSerializer.links: :class:`AsaLinkSerializer` """ id = IntegerField() name = CharField(max_length=32) unit = CharField(max_length=8) total = IntegerField() decimals = IntegerField() url = CharField(max_length=96) links = AsaLinkSerializer(many=True)
[docs] @extend_schema_serializer(component_name="AsaItem") class AsaItemSerializer(Serializer): """Serialize account's ASA item. :var AsaItemSerializer.value: asset's total value in ALGO :type AsaItemSerializer.value: :class:`DecimalField` :var AsaItemSerializer.asset: asset's serializer :type AsaItemSerializer.asset: :class:`AsaSerializer` :var AsaItemSerializer.amount: asset's total amount :type AsaItemSerializer.amount: :class:`IntegerField` :var AsaItemSerializer.price: ASA's price in ALGO :type AsaItemSerializer.price: :class:`DecimalField` :var AsaItemSerializer.programs: collection of asset's program serializers :type AsaItemSerializer.programs: :class:`AsaItemProgramSerializer` """ value = DecimalField(max_digits=20, decimal_places=6) asset = AsaSerializer() amount = IntegerField() price = DecimalField(max_digits=20, decimal_places=6) programs = AsaItemProgramSerializer(many=True)
# # NFT
[docs] @extend_schema_serializer(component_name="NftCurrency") class NftCurrencySerializer(Serializer): """Serialize NFT currency object. :var NftCurrencySerializer.amount: currency's amount :type NftCurrencySerializer.amount: :class:`IntegerField` :var NftCurrencySerializer.asset: asset's serializer :type NftCurrencySerializer.asset: :class:`AsaSerializer` """ amount = IntegerField() asset = AsaSerializer()
[docs] @extend_schema_serializer(component_name="NftListing") class NftListingSerializer(Serializer): """Serialize NFT listing object. :var NftListingSerializer.price: NFT's listed price in ALGO :type NftListingSerializer.price: :class:`DecimalField` :var NftListingSerializer.market: NFT market provider's serializer :type NftListingSerializer.market: :class:`ProviderSerializer` :var NftListingSerializer.link: link to listed NFT's page on NFT market website :type NftListingSerializer.link: :class:`URLField` :var NftListingSerializer.currency: NFT listing's currency object :type NftListingSerializer.currency: :class:`NftCurrencySerializer` """ price = DecimalField(max_digits=20, decimal_places=6) market = ProviderSerializer() link = URLField() currency = NftCurrencySerializer()
[docs] @extend_schema_serializer(component_name="NftPurchase") class NftPurchaseSerializer(Serializer): """Serialize NFT purchase object. :var NftPurchaseSerializer.price: NFT's listed price in ALGO :type NftPurchaseSerializer.price: :class:`DecimalField` :var NftPurchaseSerializer.market: NFT market provider's serializer :type NftPurchaseSerializer.market: :class:`ProviderSerializer` :var NftPurchaseSerializer.link: link to transaction's page in blockchain explorer :type NftPurchaseSerializer.link: :class:`URLField` :var NftPurchaseSerializer.epoch: seconds since epoch when purchase happened :type NftPurchaseSerializer.epoch: :class:`IntegerField` :var NftPurchaseSerializer.currency: NFT purchase's currency object :type NftPurchaseSerializer.currency: :class:`NftCurrencySerializer` """ price = DecimalField(max_digits=20, decimal_places=6) market = ProviderSerializer() link = URLField() epoch = IntegerField() currency = NftCurrencySerializer()
[docs] @extend_schema_serializer(component_name="NftTrait") class NftTraitSerializer(Serializer): """Serialize NFT trait object. :var NftTraitSerializer.name: NFT trait name :type NftTraitSerializer.name: :class:`CharField` :var NftTraitSerializer.value: NFT trait value :type NftTraitSerializer.value: :class:`CharField` """ name = CharField(max_length=40) value = CharField(max_length=40)
[docs] @extend_schema_serializer(component_name="NftUrl") class NftUrlSerializer(Serializer): """Serialize NFT URL object. :var NftUrlSerializer.typ: NFT URL type :type NftUrlSerializer.typ: :class:`CharField` :var NftUrlSerializer.url: URL value :type NftUrlSerializer.url: :class:`URLField` """ typ = CharField(max_length=32) url = URLField()
[docs] @extend_schema_serializer(component_name="Nft") class NftSerializer(Serializer): """Serialize NFT object. :var NftSerializer.id: unique NFT identifier :type NftSerializer.id: :class:`IntegerField` :var NftSerializer.name: NFT's name :type NftSerializer.name: :class:`CharField` :var NftSerializer.unit: NFT's unit name :type NftSerializer.unit: :class:`CharField` :var NftSerializer.total: NFT's total supply :type NftSerializer.total: :class:`IntegerField` :var NftSerializer.decimals: NFT's number of digits after decimal point :type NftSerializer.decimals: :class:`IntegerField` :var NftSerializer.creator: NFT's creator address :type NftSerializer.creator: :class:`CharField` :var NftSerializer.image: relative path to NFT's image representation :type NftSerializer.image: :class:`CharField` :var NftSerializer.thumbnail: relative path to NFT's thumbnail :type NftSerializer.thumbnail: :class:`CharField` :var NftSerializer.urls: NFTs URL serializers :type NftSerializer.urls: :class:`NftUrlSerializer` :var NftSerializer.listings: NFT's listing serializer :type NftSerializer.listings: :class:`NftListingSerializer` :var NftSerializer.last_purchase: NFT's last purchase serializer :type NftSerializer.last_purchase: :class:`NftPurchaseSerializer` :var NftSerializer.max_purchase: NFT's maximum purchase serializer :type NftSerializer.max_purchase: :class:`NftPurchaseSerializer` :var NftSerializer.title: NFT's title metadata :type NftSerializer.title: :class:`CharField` :var NftSerializer.description: NFT's description attribute :type NftSerializer.description: :class:`CharField` :var NftSerializer.rarity: NFT's rarity attribute :type NftSerializer.rarity: :class:`CharField` :var NftSerializer.traits: NFT's traits serializers :type NftSerializer.traits: :class:`NftTraitSerializer` """ id = IntegerField() name = CharField(max_length=32) unit = CharField(max_length=8) total = IntegerField() decimals = IntegerField() creator = CharField(max_length=32) image = CharField(max_length=40) thumbnail = CharField(max_length=40) urls = NftUrlSerializer(many=True) listings = NftListingSerializer(many=True) floor = NftListingSerializer(many=True) # TODO: will be removed from here last_purchase = NftPurchaseSerializer() max_purchase = NftPurchaseSerializer() title = CharField(max_length=30) description = CharField(max_length=200) rarity = CharField(max_length=30) traits = NftTraitSerializer(many=True)
[docs] def to_representation(self, instance): """Return collection of non-empty field-value pairs. :param instance: ASA item program's serializer instance :type instance: :class:`AsaItemProgramSerializer` :var result: ASA item program serializer's field name and value pairs :type result: dict :return: dict """ result = super().to_representation(instance) return { key: value for key, value in result.items() if value is not None or key == "unit" }
[docs] @extend_schema_serializer(component_name="NftItem") class NftItemSerializer(Serializer): """Serialize user's NFT item object. :var NftItemSerializer.value: NFT's value in ALGO :type NftItemSerializer.value: :class:`DecimalField` :var NftItemSerializer.nft: NFT serializer :type NftItemSerializer.nft: :class:`NftSerializer` :var NftItemSerializer.amount: NFT's amount :type NftItemSerializer.amount: :class:`IntegerField` :var NftItemSerializer.price: NFT's price in ALGO :type NftItemSerializer.price: :class:`DecimalField` """ value = DecimalField(max_digits=20, decimal_places=6) nft = NftSerializer() amount = IntegerField() price = DecimalField(max_digits=20, decimal_places=6)
[docs] @extend_schema_serializer(component_name="NftCollection") class NftCollectionSerializer(Serializer): """Serialize NFT object. :var NftCollectionSerializer.value: NFT collection's value in ALGO :type NftCollectionSerializer.value: :class:`DecimalField` :var NftCollectionSerializer.name: NFT's collection name :type NftCollectionSerializer.name: :class:`CharField` :var NftCollectionSerializer.amount: total number of NFTs in collection :type NftCollectionSerializer.amount: :class:`IntegerField` :var NftCollectionSerializer.nfts: collection's NFT item serializers :type NftCollectionSerializer.nfts: :class:`NftItemSerializer` :var NftCollectionSerializer.floor: collection's minimum price listing :type NftCollectionSerializer.floor: :class:`NftListingSerializer` """ value = DecimalField(max_digits=20, decimal_places=6) name = CharField(max_length=100) amount = IntegerField() nfts = NftItemSerializer(many=True)
# floor = NftListingSerializer() # TODO: will be moved here # # ACCOUNT
[docs] @extend_schema_serializer(component_name="EntitiesSerializer") class EntitiesSerializer(Serializer): """Serialize account's programs, providers, and markets. :var EntitiesSerializer.programs: account's dApp programs :type EntitiesSerializer.programs: :class:`AsaProgramSerializer` :var EntitiesSerializer.providers: account's dApp providers :type EntitiesSerializer.providers: :class:`ProviderSerializer` :var EntitiesSerializer.markets: account's NFT markets :type EntitiesSerializer.markets: :class:`ProviderSerializer` """ programs = AsaProgramSerializer(many=True) providers = ProviderSerializer(many=True) markets = ProviderSerializer(many=True)
[docs] @extend_schema_serializer(component_name="NotEvaluatedItem") class NotevalItemSerializer(Serializer): """Serialize not-evaluated asset object. :var NotevalItemSerializer.asset: asset's serializer :type NotevalItemSerializer.asset: :class:`AsaSerializer` :var NotevalItemSerializer.amount: asset's amount :type NotevalItemSerializer.amount: :class:`IntegerField` :var NotevalItemSerializer.programs: collection of asset's program serializers :type NotevalItemSerializer.programs: :class:`AsaItemProgramSerializer` """ asset = AsaSerializer() amount = IntegerField() programs = AsaItemProgramSerializer(many=True)
[docs] @extend_schema_serializer(component_name="Total") class TotalSerializer(Serializer): """Serialize total object. :var TotalSerializer.algo: total ALGO amount :type TotalSerializer.algo: :class:`DecimalField` :var TotalSerializer.asa: total value of ASAs in ALGO :type TotalSerializer.asa: :class:`DecimalField` :var TotalSerializer.nft: total value of NFTs in ALGO :type TotalSerializer.nft: :class:`DecimalField` :var TotalSerializer.total: total account value in ALGO :type TotalSerializer.total: :class:`DecimalField` :var TotalSerializer.totalusdc: total account value in USDC :type TotalSerializer.totalusdc: :class:`DecimalField` :var TotalSerializer.priceusdc: current ALGO price in USDC :type TotalSerializer.priceusdc: :class:`DecimalField` :var TotalSerializer.pricealgo: current USDC price in ALGO :type TotalSerializer.pricealgo: :class:`DecimalField` :var TotalSerializer.noteval: total number of not evaluated assets :type TotalSerializer.noteval: :class:`IntegerField` :var TotalSerializer.totalwonft: account's total value without NFTs in ALGO :type TotalSerializer.totalwonft: :class:`DecimalField` :var TotalSerializer.totalwonftusdc: account's total value without NFTs in USDC :type TotalSerializer.totalwonftusdc: :class:`DecimalField` """ algo = DecimalField(max_digits=20, decimal_places=6) asa = DecimalField(max_digits=20, decimal_places=6) nft = DecimalField(max_digits=20, decimal_places=6) total = DecimalField(max_digits=20, decimal_places=6) totalusdc = DecimalField(max_digits=20, decimal_places=6) priceusdc = DecimalField(max_digits=20, decimal_places=6) pricealgo = DecimalField(max_digits=20, decimal_places=6) noteval = IntegerField() totalwonft = DecimalField(max_digits=20, decimal_places=6) totalwonftusdc = DecimalField(max_digits=20, decimal_places=6)
[docs] @extend_schema_serializer(component_name="AccountInfo") class AccountInfoSerializer(Serializer): """Serialize account information object. :var AccountInfoSerializer.addresses: collection of public addresses :type AccountInfoSerializer.addresses: :class:`CharField` :var AccountInfoSerializer.bundle: unique hash for public Algorand addresses :type AccountInfoSerializer.bundle: :class:`CharField` :var AccountInfoSerializer.values_in: currency of all serialized values fields :type AccountInfoSerializer.values_in: :class:`ChoiceField` :var AccountInfoSerializer.online: does any address participate in consensus :type AccountInfoSerializer.online: :class:`BooleanField` :var AccountInfoSerializer.points: total number of Algoland points :type AccountInfoSerializer.points: :class:`IntegerField` """ addresses = ListField( child=CharField(min_length=ADDRESS_LEN, max_length=ADDRESS_LEN) ) bundle = CharField(min_length=40, max_length=40) values_in = ChoiceField(choices=["ALGO", "USD"]) online = BooleanField() points = IntegerField()
[docs] @extend_schema_serializer(component_name="SystemInfo") class SystemInfoSerializer(Serializer): """Serialize system information object. :var SystemInfoSerializer.warning: system's warning message :type SystemInfoSerializer.warning: :class:`DecimalField` :var SystemInfoSerializer.information: system's information message :type SystemInfoSerializer.information: :class:`DecimalField` """ warning = CharField(max_length=50) information = CharField(max_length=50)
[docs] def to_representation(self, instance): """Return collection of non-empty field-value pairs. :param instance: system information's serializer instance :type instance: :class:`SystemInfoSerializer` :var result: system information serializer's field name and value pairs :type result: dict :return: dict """ result = super().to_representation(instance) return {key: value for key, value in result.items() if value is not None}
[docs] @extend_schema_serializer(component_name="EvaluatedAccount") class EvaluatedAccountSerializer(Serializer): """Serialize evaluated account. :var EvaluatedAccountSerializer.account_info: extra account data serializer :type EvaluatedAccountSerializer.account_info: :class:`AccountInfoSerializer` :var EvaluatedAccountSerializer.system_info: system info object serializer :type EvaluatedAccountSerializer.system_info: :class:`SystemInfoSerializer` :var EvaluatedAccountSerializer.total: total values and prices serializer :type EvaluatedAccountSerializer.total: :class:`TotalSerializer` :var EvaluatedAccountSerializer.asaitems: collection of ASA item serializers :type EvaluatedAccountSerializer.asaitems: :class:`AsaItemSerializer` :var EvaluatedAccountSerializer.nfts: NFT collection serializers :type EvaluatedAccountSerializer.nfts: :class:`NftCollectionSerializer` :var EvaluatedAccountSerializer.notevals: collection of Noteval serializers :type EvaluatedAccountSerializer.notevals: :class:`NotevalItemSerializer` """ account_info = AccountInfoSerializer() system_info = SystemInfoSerializer() total = TotalSerializer() asaitems = AsaItemSerializer(many=True) nftcollections = NftCollectionSerializer(many=True) notevals = NotevalItemSerializer(many=True)