class ApplicationSerializerMixin(serializers.Serializer): attrs = MethodSerializer() def get_attrs_serializer(self): default_serializer = serializers.Serializer(read_only=True) if isinstance(self.instance, models.Application): _type = self.instance.type _category = self.instance.category else: _type = self.context['request'].query_params.get('type') _category = self.context['request'].query_params.get('category') if _type: serializer_class = type_serializer_classes_mapping.get(_type) elif _category: serializer_class = category_serializer_classes_mapping.get( _category) else: serializer_class = default_serializer if not serializer_class: serializer_class = default_serializer if isinstance(serializer_class, type): serializer = serializer_class() else: serializer = serializer_class return serializer
class CommandStorageSerializer(serializers.ModelSerializer): meta = MethodSerializer() class Meta: model = CommandStorage fields = ['id', 'name', 'type', 'meta', 'comment'] def validate_meta(self, meta): _meta = self.instance.meta if self.instance else {} _meta.update(meta) return _meta def get_meta_serializer(self): default_serializer = serializers.Serializer(read_only=True) if isinstance(self.instance, CommandStorage): _type = self.instance.type else: _type = self.context['request'].query_params.get('type') if _type: serializer_class = command_storage_type_serializer_classes_mapping.get( _type) else: serializer_class = default_serializer if not serializer_class: serializer_class = default_serializer if isinstance(serializer_class, type): serializer = serializer_class() else: serializer = serializer_class return serializer
class TicketSerializer(OrgResourceModelSerializerMixin): type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type display')) status_display = serializers.ReadOnlyField(source='get_status_display', label=_('Status display')) meta = MethodSerializer() class Meta: model = Ticket fields_mini = ['id', 'title'] fields_small = fields_mini + [ 'type', 'type_display', 'meta', 'state', 'approval_step', 'status', 'status_display', 'applicant_display', 'process_map', 'date_created', 'date_updated', 'comment', 'org_id', 'org_name', 'body' ] fields_fk = [ 'applicant', ] fields = fields_small + fields_fk def get_meta_serializer(self): default_serializer = serializers.Serializer(read_only=True) if isinstance(self.instance, Ticket): _type = self.instance.type else: _type = self.context['request'].query_params.get('type') if _type: action_serializer_classes_mapping = type_serializer_classes_mapping.get( _type) if action_serializer_classes_mapping: query_action = self.context['request'].query_params.get( 'action') action = query_action if query_action else self.context[ 'view'].action serializer_class = action_serializer_classes_mapping.get( action) if not serializer_class: serializer_class = action_serializer_classes_mapping.get( 'default') else: serializer_class = default_serializer else: serializer_class = default_serializer if not serializer_class: serializer_class = default_serializer if isinstance(serializer_class, type): serializer = serializer_class() else: serializer = serializer_class return serializer
class LoginACLSerializer(BulkModelSerializer): user_display = serializers.ReadOnlyField(source='user.username', label=_('Username')) reviewers_display = serializers.SerializerMethodField(label=_('Reviewers')) action_display = serializers.ReadOnlyField(source='get_action_display', label=_('Action')) reviewers_amount = serializers.IntegerField(read_only=True, source='reviewers.count') rules = MethodSerializer() class Meta: model = LoginACL fields_mini = ['id', 'name'] fields_small = fields_mini + [ 'priority', 'rules', 'action', 'action_display', 'is_active', 'user', 'user_display', 'date_created', 'date_updated', 'reviewers_amount', 'comment', 'created_by' ] fields_fk = ['user', 'user_display'] fields_m2m = ['reviewers', 'reviewers_display'] fields = fields_small + fields_fk + fields_m2m extra_kwargs = { 'priority': { 'default': 50 }, 'is_active': { 'default': True }, "reviewers": { 'allow_null': False, 'required': True }, } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.set_action_choices() def set_action_choices(self): from xpack.plugins.license.models import License action = self.fields.get('action') if not action: return choices = action._choices if not License.has_valid_license(): choices.pop(LoginACL.ActionChoices.confirm, None) action._choices = choices def get_rules_serializer(self): return RuleSerializer() def get_reviewers_display(self, obj): return ','.join([str(user) for user in obj.reviewers.all()])
class AppSerializerMixin(serializers.Serializer): attrs = MethodSerializer() @property def app(self): if isinstance(self.instance, models.Application): instance = self.instance else: instance = None return instance def get_attrs_serializer(self): default_serializer = serializers.Serializer(read_only=True) instance = self.app if instance: _type = instance.type _category = instance.category else: _type = self.context['request'].query_params.get('type') _category = self.context['request'].query_params.get('category') if _type: if isinstance(self, AppAccountSecretSerializer): serializer_class = type_secret_serializer_classes_mapping.get( _type) else: serializer_class = type_serializer_classes_mapping.get(_type) elif _category: serializer_class = category_serializer_classes_mapping.get( _category) else: serializer_class = default_serializer if not serializer_class: serializer_class = default_serializer if isinstance(serializer_class, type): serializer = serializer_class() else: serializer = serializer_class return serializer def create(self, validated_data): return super().create(validated_data) def update(self, instance, validated_data): return super().update(instance, validated_data)
class TicketSerializer(OrgResourceModelSerializerMixin): type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type')) action_display = serializers.ReadOnlyField(source='get_action_display', label=_('Action')) status_display = serializers.ReadOnlyField(source='get_status_display', label=_('Status')) meta = MethodSerializer() class Meta: model = Ticket fields = [ 'id', 'title', 'type', 'type_display', 'meta', 'action', 'action_display', 'status', 'status_display', 'applicant', 'applicant_display', 'processor', 'processor_display', 'assignees', 'assignees_display', 'comment', 'date_created', 'date_updated', 'org_id', 'org_name', 'body' ] def get_meta_serializer(self): request = self.context['request'] default_serializer_class = serializers.Serializer if isinstance(self.instance, Ticket): _type = self.instance.type else: _type = request.query_params.get('type') if not _type: return default_serializer_class() action_serializer_classes_mapping = type_serializer_classes_mapping.get( _type) if not action_serializer_classes_mapping: return default_serializer_class() query_action = request.query_params.get('action') _action = query_action if query_action else self.context['view'].action serializer_class = action_serializer_classes_mapping.get(_action) if serializer_class: return serializer_class() serializer_class = action_serializer_classes_mapping.get('default') if serializer_class: return serializer_class() return default_serializer_class()
class BaseStorageSerializer(serializers.ModelSerializer): storage_type_serializer_classes_mapping = {} meta = MethodSerializer() class Meta: model = None fields = ['id', 'name', 'type', 'meta', 'is_default', 'comment'] def validate_meta(self, meta): _meta = self.instance.meta if self.instance else {} _meta.update(meta) return _meta def get_meta_serializer(self): default_serializer = serializers.Serializer(read_only=True) if isinstance(self.instance, self.__class__.Meta.model): _type = self.instance.type else: _type = self.context['request'].query_params.get('type') if _type: serializer_class = self.storage_type_serializer_classes_mapping.get( _type) else: serializer_class = default_serializer if not serializer_class: serializer_class = default_serializer if isinstance(serializer_class, type): serializer = serializer_class() else: serializer = serializer_class return serializer def save(self, **kwargs): instance = super().save(**kwargs) if self.validated_data.get('is_default', False): instance.set_to_default() return instance
class LoginACLSerializer(BulkModelSerializer): user_display = serializers.ReadOnlyField(source='user.name', label=_('Username')) reviewers_display = serializers.SerializerMethodField(label=_('Reviewers')) action_display = serializers.ReadOnlyField(source='get_action_display', label=_('Action')) reviewers_amount = serializers.IntegerField(read_only=True, source='reviewers.count') rules = MethodSerializer() class Meta: model = LoginACL fields_mini = ['id', 'name'] fields_small = fields_mini + [ 'priority', 'rules', 'action', 'action_display', 'is_active', 'user', 'user_display', 'date_created', 'date_updated', 'reviewers_amount', 'comment', 'created_by' ] fields_fk = ['user', 'user_display'] fields_m2m = ['reviewers', 'reviewers_display'] fields = fields_small + fields_fk + fields_m2m extra_kwargs = { 'priority': { 'default': 50 }, 'is_active': { 'default': True }, "reviewers": { 'allow_null': False, 'required': True }, } def get_rules_serializer(self): return RuleSerializer() def get_reviewers_display(self, obj): return ','.join([str(user) for user in obj.reviewers.all()])
class ApplicationSerializerMixin(serializers.Serializer): attrs = MethodSerializer() def get_attrs_serializer(self): serializer_class = None if isinstance(self.instance, models.Application): instance_type = self.instance.type serializer_class = type_serializer_classes_mapping.get( instance_type) else: request = self.context['request'] query_type = request.query_params.get('type') query_category = request.query_params.get('category') if query_type: serializer_class = type_serializer_classes_mapping.get( query_type) elif query_category: serializer_class = category_serializer_classes_mapping.get( query_category) if serializer_class is None: serializer_class = serializers.Serializer serializer = serializer_class() return serializer
class CommandStorageSerializer(serializers.ModelSerializer): meta = MethodSerializer() class Meta: model = CommandStorage fields = ['id', 'name', 'type', 'meta', 'comment'] def validate_meta(self, meta): _meta = self.instance.meta if self.instance else {} _meta.update(meta) return _meta def get_meta_serializer(self): serializer_class = None query_type = self.context['request'].query_params.get('type') if query_type: serializer_class = command_storage_type_serializer_classes_mapping.get(query_type) if isinstance(self.instance, CommandStorage): instance_type = self.instance.type serializer_class = command_storage_type_serializer_classes_mapping.get(instance_type) if serializer_class is None: serializer_class = serializers.Serializer serializer = serializer_class() return serializer