from django.utils.translation import gettext_lazy as _ from accounts.const import AutomationTypes from accounts.models import GatherAccountsAutomation from accounts.models import GatheredAccount from accounts.serializers.account.account import AccountAssetSerializer as _AccountAssetSerializer from accounts.serializers.account.base import BaseAccountSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer from .base import BaseAutomationSerializer __all__ = [ 'GatheredAccountSerializer', 'GatheredAccountActionSerializer', 'GatherAccountAutomationSerializer', ] class GatherAccountAutomationSerializer(BaseAutomationSerializer): class Meta: model = GatherAccountsAutomation read_only_fields = BaseAutomationSerializer.Meta.read_only_fields fields = (BaseAutomationSerializer.Meta.fields + ['is_sync_account', 'check_risk', 'recipients'] + read_only_fields) extra_kwargs = { 'check_risk': { 'help_text': _('Whether to check the risk of the gathered accounts.'), }, **BaseAutomationSerializer.Meta.extra_kwargs } @property def model_type(self): return AutomationTypes.gather_accounts class AccountAssetSerializer(_AccountAssetSerializer): class Meta(_AccountAssetSerializer.Meta): fields = [f for f in _AccountAssetSerializer.Meta.fields if f != 'auto_config'] class GatheredAccountSerializer(BulkOrgResourceModelSerializer): asset = AccountAssetSerializer(label=_('Asset')) class Meta(BaseAccountSerializer.Meta): model = GatheredAccount fields = [ 'id', 'asset', 'username', 'date_last_login', 'address_last_login', 'remote_present', 'present', 'date_updated', 'status', ] read_only_fields = fields @classmethod def setup_eager_loading(cls, queryset): """ Perform necessary eager loading of data. """ queryset = queryset.prefetch_related('asset', 'asset__platform') return queryset class GatheredAccountActionSerializer(GatheredAccountSerializer): class Meta(GatheredAccountSerializer.Meta): read_only_fields = list(set(GatheredAccountSerializer.Meta.read_only_fields) - {'status'})