pipermerriam / flex

Swagger schema validator
MIT License
150 stars 76 forks source link

Is "multipart/form-data" request supported? #202

Closed mishbahr closed 5 years ago

mishbahr commented 6 years ago

Calling flex.validation.request.validate_request for a multipart-form/data POST request raises NotImplementedError: No parser for content type

# tests.py

from django.test import TestCase, RequestFactory
from django.core.files.uploadedfile import SimpleUploadedFile

from flex.core import normalize_request, validate_request

class TestFlexRequestValidation(TestCase):

    schema = {
        'paths': {
            '/api/': {
                'post': {
                    'operationId': 'SomeOperationId',
                    'consumes': [
                        'multipart-form/data'
                    ],
                    'parameters': [
                        {
                            'in': 'formData',
                            'name': 'form_input',
                            'type': 'string'
                        },
                        {
                            'in': 'formData',
                            'name': 'file_input',
                            'type': 'file',
                        },
                    ],
                },
                'responses': {}
            }
        }
    }

    def test_flex_validate_request(self):
        factory = RequestFactory()
        payload = {
            'form_input': 'value',
            'file_input': SimpleUploadedFile('my_file.pdf', 'file-content', content_type='application/pdf')
        }
        request = factory.post('/api/', data=payload, content_type='multipart/form-data; boundary=boundary')

        flex_request = normalize_request(request)
        # raises NotImplementedError: No parser for content type
        validate_request(flex_request, self.schema)

or am I doing something silly?

blag commented 5 years ago

Doesn't look like this is supported: #10.

I'd certainly accept a PR to handle this though.