Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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()])
Esempio n. 5
0
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)
Esempio n. 6
0
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()
Esempio n. 7
0
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
Esempio n. 8
0
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()])
Esempio n. 9
0
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
Esempio n. 10
0
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