Beispiel #1
0
    def test_comment_file_upload_unique(self):
        user_files_parts = ('spirit', 'files', str(self.user.pk))
        user_files_base = os.path.join(*user_files_parts)
        user_media = os.path.join(settings.MEDIA_ROOT, user_files_base)
        self.assertFalse(os.path.isdir(user_media))

        utils.login(self)
        pdf = BytesIO(
            b'%PDF-1.0\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1'
            b'>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj\nxref\n0 4\n0000000000 65535 f\n000000'
            b'0010 00000 n\n0000000053 00000 n\n0000000102 00000 n\ntrailer<</Size 4/Root 1 0 R>>\nstartxre'
            b'f\n149\n%EOF\n')
        file_name = 'foo.pdf'
        file = SimpleUploadedFile(
            file_name, pdf.read(), content_type='application/pdf')
        response = self.client.post(
            reverse('spirit:comment:file-upload-ajax'),
            HTTP_X_REQUESTED_WITH='XMLHttpRequest',
            data={'file': file})
        res = json.loads(response.content.decode('utf-8'))

        self.assertTrue(os.path.isdir(user_media))

        url_parts = res['url'].split('/')
        self.assertEqual(
            url_parts[:-2],
            (settings.MEDIA_URL + '/'.join(user_files_parts)).split('/'))
        self.assertEqual(len(url_parts[-2]), 32)  # uuid
        self.assertEqual(url_parts[-1], file_name)

        self.assertEqual(len(os.listdir(user_media)), 1)
        self.assertTrue(os.path.join(
            user_media, os.listdir(user_media)[0], file_name))
        shutil.rmtree(settings.MEDIA_ROOT)  # cleanup
Beispiel #2
0
 def create_dump(self):
     path = self.connection.settings_dict['NAME']
     dump = BytesIO()
     with open(path, 'rb') as db_file:
         copyfileobj(db_file, dump)
     dump.seek(0)
     return dump
 def test_write_dump(self):
     dump_file = BytesIO()
     connector = SqliteConnector()
     connector._write_dump(dump_file)
     dump_file.seek(0)
     for line in dump_file:
         self.assertTrue(line.strip().endswith(b';'))
Beispiel #4
0
    def test_comment_image_upload(self):
        """
        Image upload
        """
        content = (
            b"GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00"
            b"\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;"
        )
        img = BytesIO(content)
        files = {"image": SimpleUploadedFile("image.gif", img.read(), content_type="image/gif")}

        form = CommentImageForm(user=self.user, data={}, files=files)
        self.assertTrue(form.is_valid())
        image = form.save()
        self.assertEqual(image.name, "bf21c3043d749d5598366c26e7e4ab44.gif")
        image_url = os.path.join(settings.MEDIA_URL, "spirit", "images", str(self.user.pk), image.name).replace(
            "\\", "/"
        )
        self.assertEqual(image.url, image_url)
        image_path = os.path.join(settings.MEDIA_ROOT, "spirit", "images", str(self.user.pk), image.name)
        self.assertTrue(os.path.isfile(image_path))

        with open(image_path, "rb") as fh:
            self.assertEqual(fh.read(), content)

        os.remove(image_path)
Beispiel #5
0
def html_to_pdf(content, encoding="utf-8",
                link_callback=fetch_resources, **kwargs):
    """
    Converts html ``content`` into PDF document.

    :param unicode content: html content
    :returns: PDF content
    :rtype: :class:`bytes`
    :raises: :exc:`~easy_pdf.exceptions.PDFRenderingError`
    """
    src = BytesIO(content.encode(encoding))
    dest = BytesIO()

    pdf = pisa.pisaDocument(src, dest, encoding=encoding,
                            link_callback=link_callback, **kwargs)
    if pdf.err:
        logger.error("Error rendering PDF document")
        for entry in pdf.log:
            if entry[0] == xhtml2pdf.default.PML_ERROR:
                logger_x2p.error("line %s, msg: %s, fragment: %s", entry[1], entry[2], entry[3])
        raise PDFRenderingError("Errors rendering PDF", content=content, log=pdf.log)

    if pdf.warn:
        for entry in pdf.log:
            if entry[0] == xhtml2pdf.default.PML_WARNING:
                logger_x2p.warning("line %s, msg: %s, fragment: %s", entry[1], entry[2], entry[3])

    return dest.getvalue()
Beispiel #6
0
def printer_label(sample):
    """Generate the PDF of a sample for the label printer.

    :param sample: the sample the label of which should be generated

    :type sample: `samples.models.Sample`

    :return:
      the PDF as a byte stream

    :rtype: str
    """
    output = BytesIO()
    text = sample.name
    c = canvas.Canvas(output, pagesize=(width, height))
    c.setAuthor("JuliaBase samples database")
    c.setTitle(text)
    c.setSubject("Label of {0} for the label printer".format(text))
    try:
        print_line(c, 0, fontsize, text)
    except ExcessException:
        first, second = best_split(text)
        print_line(c, height / 2, fontsize_half, first, force=True)
        print_line(c, 0, fontsize_half, second, force=True)
    c.drawImage(ImageReader("http://chart.googleapis.com/chart?chs=116x116&cht=qr&chl={0}&chld=H|1".format(sample.id)),
                width - height, 0, height, height)
    c.showPage()
    c.save()
    return output.getvalue()
Beispiel #7
0
    def test_document_version_download_user_view(self):
        self.login(
            username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
        )

        self.assertEqual(Document.objects.count(), 1)

        response = self.post(
            'documents:document_version_download', args=(
                self.document.latest_version.pk,
            )
        )

        self.assertEqual(response.status_code, 302)

        self.role.permissions.add(
            permission_document_download.stored_permission
        )

        response = self.post(
            'documents:document_version_download', args=(
                self.document.latest_version.pk,
            )
        )

        self.assertEqual(response.status_code, 200)

        buf = BytesIO()
        buf.write(response.content)

        self.assertEqual(
            HASH_FUNCTION(buf.getvalue()), TEST_SMALL_DOCUMENT_CHECKSUM
        )

        del(buf)
Beispiel #8
0
class SFTPStorageFile(File):
    def __init__(self, name, storage, mode):
        self._name = name
        self._storage = storage
        self._mode = mode
        self._is_dirty = False
        self.file = BytesIO()
        self._is_read = False

    @property
    def size(self):
        if not hasattr(self, '_size'):
            self._size = self._storage.size(self._name)
        return self._size

    def read(self, num_bytes=None):
        if not self._is_read:
            self.file = self._storage._read(self._name)
            self._is_read = True

        return self.file.read(num_bytes)

    def write(self, content):
        if 'w' not in self._mode:
            raise AttributeError("File was opened for read-only access.")
        self.file = BytesIO(content)
        self._is_dirty = True
        self._is_read = True

    def close(self):
        if self._is_dirty:
            self._storage._save(self._name, self)
        self.file.close()
Beispiel #9
0
    def test_comment_image_upload_unique_no_duplication(self):
        utils.login(self)
        img = BytesIO(
            b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00'
            b'\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;')
        image_name = 'foo_image.gif'
        file = SimpleUploadedFile(
            image_name, img.read(), content_type='image/gif')

        response = self.client.post(
            reverse('spirit:comment:image-upload-ajax'),
            HTTP_X_REQUESTED_WITH='XMLHttpRequest',
            data={'image': file})
        res = json.loads(response.content.decode('utf-8'))
        first_url = res['url']

        utils.cache_clear()
        file.seek(0)
        response = self.client.post(
            reverse('spirit:comment:image-upload-ajax'),
            HTTP_X_REQUESTED_WITH='XMLHttpRequest',
            data={'image': file})
        res = json.loads(response.content.decode('utf-8'))
        second_url = res['url']

        self.assertNotEqual(first_url, second_url)
Beispiel #10
0
    def test_comment_file_upload_tmp_file(self):
        """
        Check (tmp) upload files are checked
        """
        utils.login(self)
        file = BytesIO(
            b'%PDF-1.0\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1'
            b'>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj\nxref\n0 4\n0000000000 65535 f\n000000'
            b'0010 00000 n\n0000000053 00000 n\n0000000102 00000 n\ntrailer<</Size 4/Root 1 0 R>>\nstartxre'
            b'f\n149\n%EOF\n')
        files = {
            'file': SimpleUploadedFile(
                'file_large.pdf', file.read(), content_type='application/pdf'),}
        response = self.client.post(
            reverse('spirit:comment:file-upload-ajax'),
            HTTP_X_REQUESTED_WITH='XMLHttpRequest',
            data=files)

        res = json.loads(response.content.decode('utf-8'))
        file_url = os.path.join(
            settings.MEDIA_URL, 'spirit', 'files', str(self.user.pk), "fadcb2389bb2b69b46bc54185de0ae91.pdf"
        ).replace("\\", "/")
        self.assertEqual(res['url'], file_url)
        file_path = os.path.join(
            settings.MEDIA_ROOT, 'spirit', 'files', str(self.user.pk), "fadcb2389bb2b69b46bc54185de0ae91.pdf"
        )

        with open(file_path, 'rb') as fh:
            file.seek(0)
            self.assertEqual(fh.read(), file.read())

        shutil.rmtree(settings.MEDIA_ROOT)  # cleanup
Beispiel #11
0
    def test_comment_image_upload_unique(self):
        user_images_parts = ('spirit', 'images', str(self.user.pk))
        user_images_base = os.path.join(*user_images_parts)
        user_media = os.path.join(settings.MEDIA_ROOT, user_images_base)
        self.assertFalse(os.path.isdir(user_media))

        utils.login(self)
        img = BytesIO(
            b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00'
            b'\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;')
        image_name = 'foo_image.gif'
        file = SimpleUploadedFile(
            image_name, img.read(), content_type='image/gif')
        response = self.client.post(
            reverse('spirit:comment:image-upload-ajax'),
            HTTP_X_REQUESTED_WITH='XMLHttpRequest',
            data={'image': file})
        res = json.loads(response.content.decode('utf-8'))

        self.assertTrue(os.path.isdir(user_media))

        url_parts = res['url'].split('/')
        self.assertEqual(
            url_parts[:-2],
            (settings.MEDIA_URL + '/'.join(user_images_parts)).split('/'))
        self.assertEqual(len(url_parts[-2]), 32)  # uuid
        self.assertEqual(url_parts[-1], image_name)

        self.assertEqual(len(os.listdir(user_media)), 1)
        self.assertTrue(os.path.join(
            user_media, os.listdir(user_media)[0], image_name))
        shutil.rmtree(settings.MEDIA_ROOT)  # cleanup
Beispiel #12
0
 def test_comment_image_upload(self):
     """
     comment image upload
     """
     utils.login(self)
     img = BytesIO(
         b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00'
         b'\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;')
     files = {'image': SimpleUploadedFile(
         'image.gif', img.read(), content_type='image/gif'), }
     response = self.client.post(
         reverse('spirit:comment:image-upload-ajax'),
         HTTP_X_REQUESTED_WITH='XMLHttpRequest',
         data=files)
     res = json.loads(response.content.decode('utf-8'))
     image_url = os.path.join(
         settings.MEDIA_URL, 'spirit', 'images', str(self.user.pk),
         "bf21c3043d749d5598366c26e7e4ab44.gif"
     ).replace("\\", "/")
     self.assertEqual(res['url'], image_url)
     image_path = os.path.join(
         settings.MEDIA_ROOT, 'spirit', 'images', str(self.user.pk),
         "bf21c3043d749d5598366c26e7e4ab44.gif"
     )
     self.assertTrue(os.path.isfile(image_path))
     shutil.rmtree(settings.MEDIA_ROOT)  # cleanup
Beispiel #13
0
def package_foirequest(foirequest):
    zfile_obj = BytesIO()
    with override(settings.LANGUAGE_CODE):
        zfile = zipfile.ZipFile(zfile_obj, 'w')
        last_date = None
        date_count = 1
        for message in foirequest.messages:
            current_date = message.timestamp.date()
            date_prefix = current_date.isoformat()
            if current_date == last_date:
                date_count += 1
            else:
                date_count = 1
            date_prefix += '_%d' % date_count
            last_date = current_date

            att_queryset = message.foiattachment_set.filter(
                is_redacted=False,
                is_converted=False
            )
            if message.is_response:
                filename = '%s_%s.txt' % (date_prefix, ugettext('publicbody'))
            else:
                filename = '%s_%s.txt' % (date_prefix, ugettext('requester'))

            zfile.writestr(filename, message.get_formated(att_queryset).encode('utf-8'))

            for attachment in att_queryset:
                if not attachment.file:
                    continue
                filename = '%s-%s' % (date_prefix, attachment.name)
                zfile.write(attachment.file.path, arcname=filename)
        zfile.close()
    return zfile_obj.getvalue()
Beispiel #14
0
    def test_comment_file_upload_unique_no_duplication(self):
        utils.login(self)
        pdf = BytesIO(
            b'%PDF-1.0\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1'
            b'>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj\nxref\n0 4\n0000000000 65535 f\n000000'
            b'0010 00000 n\n0000000053 00000 n\n0000000102 00000 n\ntrailer<</Size 4/Root 1 0 R>>\nstartxre'
            b'f\n149\n%EOF\n')
        file_name = 'foo.pdf'
        file = SimpleUploadedFile(
            file_name, pdf.read(), content_type='application/pdf')

        response = self.client.post(
            reverse('spirit:comment:file-upload-ajax'),
            HTTP_X_REQUESTED_WITH='XMLHttpRequest',
            data={'file': file})
        res = json.loads(response.content.decode('utf-8'))
        first_url = res['url']

        utils.cache_clear()
        file.seek(0)
        response = self.client.post(
            reverse('spirit:comment:file-upload-ajax'),
            HTTP_X_REQUESTED_WITH='XMLHttpRequest',
            data={'file': file})
        res = json.loads(response.content.decode('utf-8'))
        second_url = res['url']

        self.assertNotEqual(first_url, second_url)
Beispiel #15
0
 def test_comment_image_upload_invalid(self):
     """
     Image upload, bad image
     """
     img = BytesIO(b"bad\x00;")
     files = {"image": SimpleUploadedFile("image.gif", img.read(), content_type="image/gif")}
     form = CommentImageForm(data={}, files=files)
     self.assertFalse(form.is_valid())
Beispiel #16
0
 def test_comment_image_upload_invalid(self):
     """
     Image upload with bad content but good extension should raise an error
     """
     img = BytesIO(b'bad\x00;')
     files = {'image': SimpleUploadedFile('image.gif', img.read(), content_type='image/gif'), }
     form = CommentImageForm(data={}, files=files)
     self.assertFalse(form.is_valid())
Beispiel #17
0
 def test_comment_image_upload_invalid(self):
     """
     Image upload, bad image
     """
     img = BytesIO(b'bad\x00;')
     files = {'image': SimpleUploadedFile('image.gif', img.read(), content_type='image/gif'), }
     form = CommentImageForm(data={}, files=files)
     self.assertFalse(form.is_valid())
Beispiel #18
0
 def test_comment_image_upload_not_allowed_ext(self):
     """
     Image upload with good mime but not allowed extension should raise an error
     """
     img = BytesIO(b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00'
                   b'\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;')
     files = {'image': SimpleUploadedFile('image.png', img.read(), content_type='image/png'), }
     form = CommentImageForm(user=self.user, data={}, files=files)
     self.assertFalse(form.is_valid())
Beispiel #19
0
def generate(source_file, storage, prefix=None, replace=False, fill=None):
    """
    Creates favicons from a source file and upload into storage.
    This also create the ieconfig.xml file.

    :param source_file: File to use as string (local path) or filelike object
    :type source_file: str or file
    :param storage: Storage where upload files
    :type storage: :class:`django.core.files.storage.Storage`
    :param prefix: Prefix included in new files' names
    :type prefix: str
    :param replace: Delete file is already existing.
    :type replace: bool
    :param fill: Background color for generated precomposed-* icons
    :type fill: tuple of length 3, as returned by PIL.ImageColor.getrgb(color)
    """
    prefix = prefix or ''

    def write_file(output_file, name, replace=False):
        """Upload to storage."""
        name = prefix + name
        if storage.exists(name):
            if replace:
                storage.delete(name)
            else:
                return
        content = File(output_file, name)
        storage._save(name, content)

    def save_png(img, output_name, size):
        img.thumbnail(size=size, resample=Image.ANTIALIAS)
        output_file = BytesIO()
        img.save(output_file, format='PNG')
        write_file(output_file, output_name)
    # Save ICO
    img = Image.open(source_file)
    output_file = BytesIO()
    img.save(fp=output_file, format='ICO', sizes=ICO_SIZES)
    write_file(output_file, 'favicon.ico')
    # Save PNG
    for size in PNG_SIZES:
        img = Image.open(source_file)
        save_png(img, 'favicon-%s.png' % size, (size, size))
    for size, output_name in WINDOWS_PNG_SIZES:
        img = Image.open(source_file)
        save_png(img, output_name, size)
    for size in FILLED_SIZES:
        img = alpha_to_color(Image.open(source_file), fill)
        save_png(img, 'favicon-precomposed-%s.png' % size, (size, size))
    # Create ieconfig.xml
    output_name = 'ieconfig.xml'
    output_file = StringIO()
    template = get_template('favicon/ieconfig.xml')
    output_content = template.render({'tile_color': 'FFFFFF'})
    output_file.write(output_content)
    write_file(output_file, 'ieconfig.xml')
Beispiel #20
0
 def test_comment_image_upload_not_allowed_format(self):
     """
     Image upload, invalid format
     """
     img = BytesIO(b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00'
                   b'\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;')
     # fake png extension
     files = {'image': SimpleUploadedFile('image.png', img.read(), content_type='image/png'), }
     form = CommentImageForm(data={}, files=files)
     self.assertFalse(form.is_valid())
Beispiel #21
0
def get_qrcode(request, content):
    '''返回字符串编码后的二维码图片'''
    # 加入节点信息等级判断
    ss_img = qrcode.make(content)
    buf = BytesIO()
    ss_img.save(buf)
    image_stream = buf.getvalue()
    # 构造图片reponse
    response = HttpResponse(image_stream, content_type="image/png")
    return response
Beispiel #22
0
 def _process_raster(image, extension):
     """
     Processing of raster graphic image.
     """
     # File needs to be uploaded and saved temporarily in
     # the memory for additional processing using PIL.
     thumb_io = BytesIO()
     preped_image = scale_and_crop(image, **MARKDOWNX_IMAGE_MAX_SIZE)
     preped_image.save(thumb_io, extension)
     thumb_io.seek(0, SEEK_END)
     return thumb_io
Beispiel #23
0
 def _read(self, name):
     memory_file = BytesIO()
     try:
         pwd = self._connection.pwd()
         self._connection.cwd(os.path.dirname(name))
         self._connection.retrbinary("RETR " + os.path.basename(name), memory_file.write)
         self._connection.cwd(pwd)
         memory_file.seek(0)
         return memory_file
     except ftplib.all_errors:
         raise FTPStorageException("Error reading file %s" % name)
Beispiel #24
0
    def test_document_version_download(self):
        with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
            document = self.document_type.new_document(file_object=File(file_object))

        response = self.client.get(reverse("rest_api:documentversion-download", args=(document.latest_version.pk,)))
        buf = BytesIO()
        buf.write(response.content)

        self.assertEqual(HASH_FUNCTION(buf.getvalue()), TEST_SMALL_DOCUMENT_CHECKSUM)

        del (buf)
Beispiel #25
0
def test_printing(one_per_page):
    from lippukala.printing import OrderPrinter
    printer = OrderPrinter()
    printer.ONE_TICKET_PER_PAGE = one_per_page
    for x in xrange(3):
        order = _create_test_order()
        printer.process_order(order)

    outf = BytesIO()
    outf.write(printer.finish())
    assert outf.getvalue().startswith(b"%PDF")
Beispiel #26
0
    def resize_image(self, data, size):
        """ Resizes the given image to fit inside a box of the given size. """
        from machina.core.compat import PILImage as Image
        image = Image.open(BytesIO(data))

        # Resize!
        image.thumbnail(size, Image.ANTIALIAS)

        string = BytesIO()
        image.save(string, format='PNG')
        return string.getvalue()
Beispiel #27
0
 def test_comment_image_upload_no_extension(self):
     """
     Image upload no extension
     """
     img = BytesIO(b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00'
                   b'\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;')
     files = {'image': SimpleUploadedFile('image', img.read(), content_type='image/gif'), }
     form = CommentImageForm(user=self.user, data={}, files=files)
     self.assertTrue(form.is_valid())
     image = form.save()
     self.assertEqual(image.name, "bf21c3043d749d5598366c26e7e4ab44.gif")
     os.remove(os.path.join(settings.MEDIA_ROOT, 'spirit', 'images', str(self.user.pk), image.name))
Beispiel #28
0
 def _compress_content(self, content):
     """Gzip a given string content."""
     zbuf = BytesIO()
     zfile = GzipFile(mode='wb', compresslevel=6, fileobj=zbuf)
     try:
         zfile.write(force_bytes(content.read()))
     finally:
         zfile.close()
     zbuf.seek(0)
     content.file = zbuf
     content.seek(0)
     return content
Beispiel #29
0
    def format_pdf_report(self, filename, as_response):
        from reportlab.pdfgen.canvas import Canvas
        sio = BytesIO()
        c = Canvas(sio)
        c.save()

        if as_response:
            response = HttpResponse(sio.getvalue(), content_type="application/pdf")
            response["Content-Disposition"] = "attachment; filename=%s" % filename
            return response
        else:
            return sio.getvalue()
Beispiel #30
0
 def _compress_content(self, content):
     """Gzip a given string content."""
     zbuf = BytesIO()
     zfile = GzipFile(mode='wb', compresslevel=6, fileobj=zbuf)
     try:
         zfile.write(force_bytes(content.read()))
     finally:
         zfile.close()
     zbuf.seek(0)
     # Boto 2 returned the InMemoryUploadedFile with the file pointer replaced,
     # but Boto 3 seems to have issues with that. No need for fp.name in Boto3
     # so just returning the BytesIO directly
     return zbuf
Beispiel #31
0
    def test_post_form_data_with_image_submit(self):
        self.client.login(username='******', password='******')

        img = BytesIO(b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00'
                      b'\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;')
        image_file = SimpleUploadedFile('image.gif', img.read(), 'image/gif')

        response = self.client.post(reverse('post_create_url'), {
            'title': 'First post',
            'body': 'Post body',
            'files': image_file
        })
        self.assertRedirects(response,
                             reverse('posts_list_url'),
                             status_code=302,
                             target_status_code=200)

        post = Post.objects.first()
        self.assertEqual(post.title, 'First post')
        self.assertTrue(post.gallery.first().image)

        post.gallery.first().delete()
Beispiel #32
0
 def test_comment_file_upload_invalid_ext(self):
     """
     comment file upload, invalid file extension
     """
     utils.login(self)
     # sample valid pdf - https://stackoverflow.com/a/17280876
     file = BytesIO(
         b'%PDF-1.0\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1'
         b'>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj\nxref\n0 4\n0000000000 65535 f\n000000'
         b'0010 00000 n\n0000000053 00000 n\n0000000102 00000 n\ntrailer<</Size 4/Root 1 0 R>>\nstartxre'
         b'f\n149\n%EOF\n')
     files = {'file': SimpleUploadedFile('fake.gif', file.read(), content_type='application/pdf'), }
     response = self.client.post(
         reverse('spirit:comment:file-upload-ajax'),
         HTTP_X_REQUESTED_WITH='XMLHttpRequest',
         data=files)
     res = json.loads(response.content.decode('utf-8'))
     self.assertIn('error', res)
     self.assertIn('file', res['error'])
     self.assertEqual(
         res['error']['file'],
         ['Unsupported file extension gif. Supported extensions are doc, docx, pdf.'])
Beispiel #33
0
def create_store(request):
    if request.method == 'POST':
        try:
            data = JSONRenderer().render(request.data)
            stream = BytesIO(data)
            store_model = JSONParser().parse(stream)
            store = AddNewStore(store_model)
            serialized_obj = serializers.serialize('json', [
                store,
            ])
            return Response(serialized_obj, status=status.HTTP_202_ACCEPTED)
        except Exception, e:
            return Response({"error": str(e)}, status=status.HTTP_202_ACCEPTED)
Beispiel #34
0
 def test_comment_file_upload_invalid_mime(self):
     """
     comment file upload, invalid mime type
     """
     utils.login(self)
     file = BytesIO(b'BAD\x02D\x01\x00;')
     files = {
         'file': SimpleUploadedFile(
             'file.pdf', file.read(), content_type='application/pdf')}
     response = self.client.post(
         reverse('spirit:comment:file-upload-ajax'),
         HTTP_X_REQUESTED_WITH='XMLHttpRequest',
         data=files)
     res = json.loads(response.content.decode('utf-8'))
     self.assertIn('error', res)
     self.assertIn('file', res['error'])
     self.assertEqual(
         res['error']['file'],
         ['Unsupported file mime type application/octet-stream. '
          'Supported types are application/msword, '
          'application/pdf, '
          'application/vnd.openxmlformats-officedocument.wordprocessingml.document.'])
Beispiel #35
0
 def testUserList(self):
     
     response = self.client.get(
         reverse('api:user-list', args=['v1']),
         None, format='json'
     )
     self.assertEquals(response.status_code, 200)
     
     content = self.parser.parse(BytesIO(response.content))
     
     got_users = {user['username'] for user in content['results']}
     has_users = {user.username for user in User.objects.all()}
     self.assertTrue(got_users == has_users)
Beispiel #36
0
def get_code(request):
    # 初始化画布,初始化画笔

    mode = "RGB"

    size = (64, 34)

    red = get_color()

    green = get_color()

    blue = get_color()

    color_bg = (red, green, blue)

    image = Image.new(mode=mode, size=size, color=color_bg)

    imagedraw = ImageDraw(image, mode=mode)

    imagefont = ImageFont.truetype(settings.FONT_PATH, 33)

    verify_code = generate_code()

    request.session['verify_code'] = verify_code

    for i in range(4):
        fill = (get_color(), get_color(), get_color())
        imagedraw.text(xy=(16 * i, 0), text=verify_code[i], font=imagefont, fill=fill)

    for i in range(100):
        fill = (get_color(), get_color(), get_color())
        xy = (random.randrange(201), random.randrange(100))
        imagedraw.point(xy=xy, fill=fill)

    fp = BytesIO()

    image.save(fp, "png")

    return HttpResponse(fp.getvalue(), content_type="image/png")
Beispiel #37
0
def login_verify_code(request):
    # 引入随机函数模块
    import random
    # 定义变量,用于画面的背景色、宽、高  RGB
    bgcolor=(random.randrange(20,100),random.randrange(20,100),255)
    width=100
    height=25
    # 创建画布对象
    im=Image.new('RGB',(width,height),bgcolor)
    # 创建画笔对象
    draw=ImageDraw.Draw(im)
    # 调用画笔的 point() 函数绘制噪点
    for i in range(0,100):
        xy=(random.randrange(0,width),random.randrange(0,height))
        fill=(random.randrange(0,255),255,random.randrange(0,255))
        draw.point(xy,fill=fill)
    # 定义验证码的备选值
    import string
    # 随机取 4 个值作为验证码
    rand_str="".join(random.sample(string.ascii_letters+string.digits,4))
    # 构造字体对象 windows的字体路径在 C:\Windows\Fonts
    font=ImageFont.truetype('C:\Windows\Fonts\simsun.ttc',25,index=1)
    # 构造字体颜色
    fontcolor=(255,random.randrange(0,255),random.randrange(0,255))
    # 绘制4个字
    draw.text((5,1),rand_str[0],font=font,fill=fontcolor)
    draw.text((25,1),rand_str[1],font=font,fill=fontcolor)
    draw.text((50, 1), rand_str[2], font=font, fill=fontcolor)
    draw.text((75, 1), rand_str[3], font=font, fill=fontcolor)
    # 释放画笔
    del draw
    # 把验证码存入session,用于做进一步的验证
    request.session['verifycode']=rand_str
    # 内存文件操作
    buf=BytesIO()
    # 将图片保存在内存中,文件类型为png
    im.save(buf,'png')
    # 将内存中的图片数据返回给客户端 .MIME 类型为图片png
    return HttpResponse(buf.getvalue(),'image/png')
Beispiel #38
0
def comment_create(request):
    print(request.POST)
    stream = BytesIO(request)
    data = JSONParser().parse(stream)
    serializer = CommentSerializer(data=data)
    serializer.is_valid()
    serializer.validated_data
    form = CommentForm(request.POST or None)
    if form.is_valid():
        form.save()
        data = serializers.serialize("json", Comment.objects.all())
        return JsonResponse(data, safe=False)
    return JsonResponse({'Error': 'Form is invalid'})
Beispiel #39
0
def verify_code(request):
    # 定义变量,用于画面的背景色、宽、高
    bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)  #用rgb方式定义颜色
    width = 100
    height = 25
    # 创建画面对象,并设置宽高
    im = Image.new('RGB', (width, height), bgcolor)
    # 创建画笔对象
    draw = ImageDraw.Draw(im)
    # 调用画笔的point()函数绘制噪点
    for i in range(0, 100):  # 循环遍历100次,在画面上添加噪点
        xy = (random.randrange(0, width), random.randrange(0, height))
        fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
        draw.point(xy, fill=fill)   # 指定在哪个点画,画的颜色是什么
    # 定义验证码的备选值
    str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
    # 随机选取4个值作为验证码
    rand_str = ''
    for i in range(0, 4):
        rand_str += str1[random.randrange(0, len(str1))]
    # 构造字体对象
    font = ImageFont.truetype('arial.ttf', 23)
    # 构造字体颜色
    fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
    # 绘制4个字
    draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
    draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
    draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
    draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
    # 释放画笔
    del draw
    # 存入session,用于做进一步验证(对比用户输入的验证码对不对)
    request.session['verifycode'] = rand_str
    # 内存文件操作
    buf = BytesIO()
    # 将图片(im)保存在内存中,文件类型为png
    im.save(buf, 'png')
    # 将内存中的图片数据返回给客户端,MIME类型为图片png
    return HttpResponse(buf.getvalue(), 'image/png')
    def __init__(self, request, request_data):
        super(BatchRequest, self).__init__()
        self.name = request_data.get('name')
        self.omit_response_on_success = request_data.get('omit_response_on_success', False)

        self._stream = BytesIO(request_data['_body'].encode('utf-8'))
        self._read_started = False

        self.method = request_data['method']
        self.path_info = self.path = request_data['relative_url']
        self._set_headers(request, request_data.get('headers', {}))
        self.COOKIES = request.COOKIES
        self.GET = parse_qs(urlparse(self.path_info).query)
Beispiel #41
0
 def test_bad_username(self):
     """
     Tests the error handling when the specified user does not exist.
     """
     test_json = textwrap.dedent("""
         {
             "model": "config_models.ExampleDeserializeConfig",
             "data": [{"name": "dino"}]
         }
         """)
     with self.assertRaisesRegexp(Exception,
                                  "User matching query does not exist"):
         deserialize_json(BytesIO(test_json), "unknown_username")
    def post(self, request, *args, **kwargs):
        json = JSONRenderer().render(request.data)
        stream = BytesIO(json)
        data = JSONParser().parse(stream)
        serializer = InstituteSerializer(data=data)

        try:
            serializer.is_valid(raise_exception=True)
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)

        except Exception:
            return Response(status=status.HTTP_400_BAD_REQUEST)
Beispiel #43
0
class LibCloudFile(File):
    """File inherited class for libcloud storage objects read and write"""
    def __init__(self, name, storage, mode):
        self.name = name
        self._storage = storage
        self._mode = mode
        self._is_dirty = False
        self._file = None

    def _get_file(self):
        if self._file is None:
            data = self._storage._read(self.name)
            self._file = BytesIO(data)
        return self._file

    def _set_file(self, value):
        self._file = value

    file = property(_get_file, _set_file)

    @property
    def size(self):
        if not hasattr(self, '_size'):
            self._size = self._storage.size(self.name)
        return self._size

    def read(self, num_bytes=None):
        return self.file.read(num_bytes)

    def write(self, content):
        if 'w' not in self._mode:
            raise AttributeError("File was opened for read-only access.")
        self.file = BytesIO(content)
        self._is_dirty = True

    def close(self):
        if self._is_dirty:
            self._storage._save(self.name, self.file)
        self.file.close()
Beispiel #44
0
 def _get_file(self):
     if self._file is None:
         with metrics.timer("filestore.read", instance="s3"):
             self._file = BytesIO()
             if "r" in self._mode:
                 self._is_dirty = False
                 self._file.write(self.obj.get()["Body"].read())
                 self._file.seek(0)
             if self._storage.gzip and self.obj.content_encoding == "gzip":
                 self._file = GzipFile(mode=self._mode,
                                       fileobj=self._file,
                                       mtime=0.0)
     return self._file
Beispiel #45
0
def gen_face_pay_qrcode(request):
    '''生成当面付的二维码'''
    try:
        # 从seesion中获取订单的二维码
        url = request.session.get('code_url', '')
        # 生成支付宝申请记录
        record = AlipayRequest.objects.create(username=request.user,
                                              info_code=request.session['out_trade_no'],
                                              amount=request.session['amount'],)
        # 删除sessions信息
        del request.session['code_url']
        del request.session['amount']
        # 生成ss二维码
        img = qrcode.make(url)
        buf = BytesIO()
        img.save(buf)
        image_stream = buf.getvalue()
        # 构造图片reponse
        response = HttpResponse(image_stream, content_type="image/png")
        return response
    except:
        return HttpResponse('wrong request')
Beispiel #46
0
    def __init__(self, name, storage, mode):
        self._name = name
        self._storage = storage
        self._mode = mode
        self._is_dirty = False

        try:
            self._doc = self._storage.get_document(name)

            tmp, ext = os.path.split(name)
            if ext:
                filename = "content." + ext
            else:
                filename = "content"
            attachment = self._storage.db.get_attachment(self._doc, filename=filename)
            self.file = BytesIO(attachment)
        except couchdb.client.ResourceNotFound:
            if 'r' in self._mode:
                raise ValueError("The file cannot be reopened.")
            else:
                self.file = BytesIO()
                self._is_dirty = True
Beispiel #47
0
    def test_https(self):
        request = WSGIRequest(RequestFactory().get('/').environ)
        request.makefile = lambda *args, **kwargs: BytesIO()

        handler = WSGIRequestHandler(request, '192.168.0.2', None)

        with captured_stderr() as stderr:
            handler.log_message("GET %s %s", str('\x16\x03'), "4")
            self.assertIn(
                "You're accessing the development server over HTTPS, "
                "but it only supports HTTP.",
                stderr.getvalue()
            )
Beispiel #48
0
 def test_strip_html(self):
     request = FoiRequest.objects.get_by_secret_mail(
         "*****@*****.**")
     with open(p("test_mail_05.txt"), 'rb') as f:
         parser = EmailParser()
         content = f.read()
         mail = parser.parse(BytesIO(content))
     request.add_message_from_email(mail, content)
     messages = request.foimessage_set.all()
     self.assertEqual(len(messages), 2)
     mes = messages[1]
     self.assertTrue(len(mes.plaintext_redacted) > 0)
     self.assertTrue(len(mes.plaintext) > 0)
Beispiel #49
0
def verify_code(request):
    # 定义变量,用于画面的背景色、宽、高
    back_ground_color = (random.randrange(20, 100), random.randrange(20, 100), 255)
    width = 100
    height = 25
    # 创建画面对象
    im = Image.new('RGB', (width, height), back_ground_color)
    # 创建画笔对象
    draw = ImageDraw.Draw(im)
    # 调用画笔的point()函数绘制噪点
    for i in range(0, 200):
        xy = (random.randrange(0, width), random.randrange(0, height))
        fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
        draw.point(xy, fill=fill)
    # 定义验证码的备选值
    str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
    # 随机选取4个值作为验证码
    rand_str = ''
    for i in range(0, 4):
        rand_str += str1[random.randrange(0, len(str1))]
    # 构造字体对象 ubuntu的字体路径是/usr/share/fonts/truetype/freefont
    font = ImageFont.truetype('FreeMono.ttf', 23)
    # 构造字体颜色
    fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
    # 绘制4个字
    draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
    draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
    draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
    draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
    # 释放画笔
    del draw
    # 存入session 用于进一步验证
    request.session['verifycode'] = rand_str
    # 内存文件操作
    buf = BytesIO()
    # 将图片保持在内存中 格式为png
    im.save(buf, 'png')
    # 将内存中的图片返回给客户端 MIME类型为图片png
    return HttpResponse(buf.getvalue(), 'image/png')
        def test_render_and_parse(self):
            """
            Test rendering and then parsing returns the original object.
            IE obj -> render -> parse -> obj.
            """
            obj = {'foo': ['bar', 'baz']}

            renderer = YAMLRenderer()
            parser = YAMLParser()

            content = renderer.render(obj, 'application/yaml')
            data = parser.parse(BytesIO(content))
            self.assertEqual(obj, data)
Beispiel #51
0
def validate_ingredient(request):
    if request.method == 'POST':
        try:
            data = JSONRenderer().render(request.data)
            data = request.data
            stream = BytesIO(data)
            transaction_model = JSONParser().parse(stream)
            transaction = ConsolidateInventoryByProductInStore(
                transaction_model)

            return Response(transaction, status=status.HTTP_202_ACCEPTED)
        except Exception, e:
            return Response({"error": str(e)}, status=status.HTTP_202_ACCEPTED)
 def put(self, request, pk, format=None):
     serializer = UserSerializer(data=request.data)
     if serializer.is_valid():
         content = JSONRenderer().render(serializer.data)
         stream = BytesIO(content)
         data = JSONParser().parse(stream)
         with connection.cursor() as cur:
             cur.execute(
                 'UPDATE project_user SET username = %s, password = %s WHERE user_id = %s',
                 [str(data['username']),
                  str(data['password']), pk])
         return Response(serializer.data)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Beispiel #53
0
def users(request):
    if request.method == "GET":
        if "user" in request.session:
            user = request.session["user"]
            #serializer = UserSerializer(user, many=False)
            try:
                user = User.objects.get(phone_number=user["phone_number"])
            except User.DoesNotExist:
                return standard_response(status_code["not_login"], "尚未登录")
            team = user.team_id
            team_members = team.user_set.all()
            team_members_serializer = UserSerializer(team_members, many=True)
            serializer = UserSerializer(user, many=False)
            return standard_response(status_code["ok"],
                                     "",
                                     data={
                                         "user_info":
                                         serializer.data,
                                         "team_members":
                                         team_members_serializer.data
                                     })
        else:
            return standard_response(status_code["not_login"], "尚未登录")
    elif request.method == "POST":
        if "user" in request.session:
            user = request.session["user"]
            #serializer = UserSerializer(data=user)
            content = JSONRenderer().render(request.POST)
            stream = BytesIO(content)
            json_dic = JSONParser().parse(stream)
            if "password" in json_dic:
                user_model = User.objects.get(
                    phone_number=user["phone_number"])
                user_model.password = json_dic["password"]
                try:
                    user_model.save()
                    #TODO: not complete
                    #update success need to update session too
                    serializer = UserSerializer(user_model)
                    request.session["user"] = serializer.data
                    return standard_response(status_code["ok"], "",
                                             {"user_info": serializer.data})
                except Exception as e:
                    print(e)
                    return standard_response(status_code["error"],
                                             "%s" % traceback.format_exc())

            else:
                return standard_response(status_code["error"], "传递参数错误")
        else:
            return standard_response(status_code["not_login"], "尚未登录")
Beispiel #54
0
def get_snatranslation_info(_database_target_):

   CURL_command = "curl -sk -u "+USER_NAME+":"+USER_PASSWORD+" https://"+_database_target_+"/mgmt/tm/ltm/snat/ -H 'Content-Type: application/json'"
   get_info = os.popen(CURL_command).read().strip()
   stream = BytesIO(get_info)
   data_from_CURL_command = JSONParser().parse(stream)
   
   # create db file
   f = open(USER_DATABASES_DIR+"snatranslationlist."+_database_target_+".txt","w")
   f.write(json.dumps(data_from_CURL_command))
   f.close()

   # threading must have
   time.sleep(0)
Beispiel #55
0
def get_ss_qrcode(request, node_id):
    '''返回节点配置信息的ss二维码'''

    # 获取用户对象
    ss_user = request.user.ss_user
    user = request.user
    # 获取节点对象
    node = Node.objects.get(node_id=node_id)
    # 加入节点信息等级判断
    if user.level < node.level:
        return HttpResponse('哟小伙子,可以啊!但是投机取巧是不对的哦!')
    ss_code = '{}:{}@{}:{}'.format(ss_user.method, ss_user.password,
                                   node.server, ss_user.port)
    # 将信息编码
    ss_pass = base64.b64encode(bytes(ss_code, 'utf8')).decode('ascii')
    # 生成ss二维码
    ss_img = qrcode.make('ss://{}'.format(ss_pass))
    buf = BytesIO()
    ss_img.save(buf)
    image_stream = buf.getvalue()
    # 构造图片reponse
    response = HttpResponse(image_stream, content_type="image/png")
    return response
Beispiel #56
0
def create_provider(request):
    if request.method == 'POST':
        try:
            data = JSONRenderer().render(request.data)
            stream = BytesIO(data)
            provider_model = JSONParser().parse(stream)
            provider = CreateNewProvider(provider_model)
            serialized_obj = serializers.serialize('json', [
                provider,
            ])
            return Response(serialized_obj, status=status.HTTP_202_ACCEPTED)
        except Exception, e:
            return Response({"error": str(e)},
                            status=status.HTTP_400_BAD_REQUEST)
Beispiel #57
0
def generate_thumb(original, size, format='JPEG'):
    """
    Generates a thumbnail image and returns a ContentFile object with the thumbnail

    Arguments:
    original -- The image being resized as `File`.
    size     -- Desired thumbnail size as `tuple`. Example: (70, 100)
    format   -- Format of the original image ('JPEG', 'PNG', ...) The thumbnail will be generated using this same format.

    """
    original.seek(
        0)  # see http://code.djangoproject.com/ticket/8222 for details
    image = Image.open(original)
    if image.mode not in ('L', 'RGB', 'RGBA'):
        image = image.convert('RGB')
    thumbnail = ImageOps.fit(image, size, Image.ANTIALIAS)

    io = BytesIO()

    if format.upper() == 'JPG':
        format = 'JPEG'
    thumbnail.save(io, format)
    return ContentFile(io.getvalue())
Beispiel #58
0
def make_estimate(request, siret):
    if request.method == 'POST':
        benefitsSelected = {}
        estimate = {}
        """
        Recuperation 
        du POST
        """
        data = json.loads(request.body.decode('utf-8'))
        benefits = data['benefits']
        Userparaams = data['allparams']

        company = Company.objects.get(siret=siret)
        #Check USER
        user_params_checked = check_post_new_estimate(request, Userparaams,
                                                      company.name)

        acts = ActivityGroup.objects.filter(
            activity__company=company.id).distinct()
        serializer = GroupActivitiesSerializer(acts, many=True)
        content = JSONRenderer().render(serializer.data)
        stream = BytesIO(content)
        groups = JSONParser().parse(stream)

        k = 0
        for benefit in benefits:
            for group in groups:
                if group['id'] == benefit['group']:
                    activitiesIngroup = group['activities']
                    for activity in activitiesIngroup:
                        if activity['id'] == int(benefit['activity']):
                            new = {}
                            new['activity'] = activity['id']
                            new['name'] = activity['name']
                            new['description'] = activity['description']
                            if Userparaams['optionsguyot'] == 'gd':
                                new['unitPrice'] = activity['price_plant_gd']
                                new['tax'] = activity['tax']
                            elif Userparaams['optionsguyot'] == 'gs':
                                new['unitPrice'] = activity['price_plant_gs']
                                new['tax'] = activity['tax']
                            benefitsSelected[k] = new
                            k = k + 1
        create_estimate(user_params_checked, benefitsSelected)

        return render(request, 'presta_viticoles/select-activities.html')
    else:
        form = UserAuthLoginForm()
        return render(request, 'presta_viticoles/select-activities.html',
                      {'form': form})
Beispiel #59
0
    def _process_raster(image, extension):
        """
        Processing of raster graphic image using Python Imaging Library (PIL).

        This is where raster graphics are processed to the specifications
        as defined in ``settings.py``.

        *Note*: The file needs to be uploaded and saved temporarily in the
        memory to enable processing tasks using Python Imaging Library (PIL)
        to take place and subsequently retained until written onto the disk.

        :param image: Non-SVG image as processed by Django.
        :type image: django.forms.BaseForm.file
        :param extension: Image extension (e.g.: png, jpg, gif)
        :type extension: str
        :return: The image object ready to be written into a file.
        :rtype: BytesIO
        """
        thumb_io = BytesIO()
        preped_image = scale_and_crop(image, **MARKDOWNX_IMAGE_MAX_SIZE)
        preped_image.save(thumb_io, extension)
        thumb_io.seek(0, SEEK_END)
        return thumb_io
Beispiel #60
0
    def test_comment_file_upload_no_libmagic(self):
        """
        Magic lib should be optional
        """
        utils.login(self)
        file = BytesIO(
            b'%PDF-1.0\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1'
            b'>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj\nxref\n0 4\n0000000000 65535 f\n000000'
            b'0010 00000 n\n0000000053 00000 n\n0000000102 00000 n\ntrailer<</Size 4/Root 1 0 R>>\nstartxre'
            b'f\n149\n%EOF\n')
        files = {
            'file':
            SimpleUploadedFile('file.pdf',
                               file.read(),
                               content_type='application/pdf'),
        }
        form = CommentFileForm(data={}, files=files)

        comment_forms_magic_orig, comment_forms.magic = comment_forms.magic, None
        try:
            self.assertFalse(form.is_valid())
        finally:
            comment_forms.magic = comment_forms_magic_orig