Exemple #1
0
 def fields(self, fields):
     fields.email_address = EmailField(label='Email address', required=True)
     fields.text = Field(label='Comment', required=True)
     fields.uploaded_files = FileField(allow_multiple=True,
                                       max_size_bytes=4 * 1000 * 1000,
                                       max_files=4,
                                       accept=['text/*'])
Exemple #2
0
 def size_constrained(self):
     max_size = 13
     self.file_field = FileField(allow_multiple=True,
                                 max_size_bytes=max_size,
                                 label='Attached files')
     self.validation_error_message = 'files should be smaller than 13.0bytes'
     self.valid_file = temp_file_with('c' * max_size,
                                      name='valid_size.html')
     self.invalid_file = temp_file_with('c' * (max_size + 1),
                                        name='invalid_size.html')
Exemple #3
0
    def file_validation_max_files(self, fixture):
        """A maximum can be placed upon the number of files that may be uploaded.
        """

        field = FileField(allow_multiple=True, max_files=1)
        obj = fixture.model_object
        field.bind('file_value', obj)

        files = [UploadedFile('file1', b'stuff 1', '')]
        with expected(NoException):
            field.set_user_input(files)

        files = [UploadedFile('file1', b'stuff 2', ''), UploadedFile('file2', b'stuff 3', '')]
        with expected(MaxFilesConstraint):
            field.set_user_input(files)
Exemple #4
0
    def file_validation_mime_type(self, fixture):
        """A FileField can also limit the mimetype of files allowed to be uploaded.
        """

        field = FileField(allow_multiple=True, accept=['text/*'])
        obj = fixture.model_object
        field.bind('file_value', obj)

        files = [UploadedFile('file1', b'stuff 1', 'text/html'), UploadedFile('file2', b'stuff 2', 'text/xml')]
        with expected(NoException):
            field.set_user_input(files)

        files = [UploadedFile('file1', b'stuff 3', 'text/html'), UploadedFile('file2', b'stuff 4', 'application/java')]
        with expected(MimeTypeConstraint):
            field.set_user_input(files)
Exemple #5
0
    def file_validation_size(self, fixture):
        """A FileField can also limit the size if files uploaded.
        """

        field = FileField(allow_multiple=True, max_size_bytes=100)
        obj = fixture.model_object
        field.bind('file_value', obj)

        files = [UploadedFile('file1', b'.'*100, ''), UploadedFile('file2', b'.'*50, '')]
        with expected(NoException):
            field.set_user_input(files)

        files = [UploadedFile('file1', b'.'*100, ''), UploadedFile('file2', b'.'*200, '')]
        with expected(FileSizeConstraint):
            field.set_user_input(files)
Exemple #6
0
 def fields(self, fields):
     fields.files = FileField(allow_multiple=True,
                              label='Attached files')
Exemple #7
0
 def fields(self, fields):
     fields.files = FileField(allow_multiple=True,
                              label='Attached files')
     fields.files.add_validation_constraint(
         ToggleableConstraint(fixture))
Exemple #8
0
 def new_file_field(self):
     return FileField(allow_multiple=True, max_files=1)
Exemple #9
0
 def type_constrained(self):
     self.file_field = FileField(allow_multiple=True, accept=['text/*'])
     self.validation_error_message = 'files should be of type text/*'
     self.valid_file = temp_file_with('contents', name='valid.html')
     self.invalid_file = temp_file_with('contents', name='invalid.gif')
Exemple #10
0
def test_file_validation(fixture):
    """A FileField needs to check that the right number of files were submitted, depending on the
       setting of allow_multiple and/or required.
    """

    field = FileField()
    obj = fixture.model_object
    field.bind('file_value', obj)

    files = [EmptyStub(), EmptyStub()]

    # Single file only
    with expected(SingleFileConstraint):
        field.set_user_input(files)

    with expected(NoException):
        field.set_user_input(files[:1])

    # Single file that is required
    field = FileField(required=True)
    field.bind('file_value', obj)

    with expected(NoException):
        field.set_user_input(files[:1])

    with expected(RequiredConstraint):
        field.set_user_input([])

    # Multiple files
    field = FileField(allow_multiple=True)
    field.bind('file_value', obj)

    with expected(NoException):
        field.set_user_input(files)
Exemple #11
0
def test_file_marshalling(fixture):
    """A FileField receives as input a list of UploadedFile objects.  Its marshalling job consists
       of merely changing such a list into a single value, or returning it as is depending on
       the setting of its allow_multiple flag.
    """

    field = FileField()
    obj = fixture.model_object
    field.bind('file_value', obj)

    files = [EmptyStub(), EmptyStub()]

    # Single file only
    field.from_input(files[:1])
    assert obj.file_value == files[0]

    obj.file_value = files[0]
    assert field.as_input() == ''

    # Multiple files
    field = FileField(allow_multiple=True)
    field.bind('file_value', obj)

    field.from_input(files)
    assert obj.file_value == files

    obj.file_value = files
    assert field.as_input() == ''
Exemple #12
0
 def fields(self, fields):
     fields.file = FileField(allow_multiple=False, label='Attached files')
     # FailingConstraint is declared in module level scope for it to be pickleable
     fields.file.add_validation_constraint(failing_constraint)