コード例 #1
0
ファイル: test_images.py プロジェクト: vanbuiten/signals
 def test_resize_iamge_too_heigh(self):
     too_heigh = MagicMock()
     too_heigh.width = 800
     too_heigh.height = 1600
     DataUriImageEncodeService.resize(too_heigh, 800)
     too_heigh.resize.assert_called_with(size=(400, 800),
                                         resample=Image.LANCZOS)
コード例 #2
0
ファイル: test_images.py プロジェクト: vanbuiten/signals
 def test_resize_image_too_wide(self):
     too_wide = MagicMock()
     too_wide.width = 1600
     too_wide.height = 800
     DataUriImageEncodeService.resize(too_wide, 800)
     too_wide.resize.assert_called_with(size=(800, 400),
                                        resample=Image.LANCZOS)
コード例 #3
0
def _render_html(signal: Signal):
    """Render given `Signal` with HTML template used for PDF generation.

    :param signal: Signal object
    :returns: HTML str
    """
    rd_coordinates = signal.location.get_rd_coordinates()
    bbox = '{},{},{},{}'.format(
        rd_coordinates.x - 340.00,
        rd_coordinates.y - 125.00,
        rd_coordinates.x + 340.00,
        rd_coordinates.y + 125.00,
    )
    # HOTFIX for SIG-1473
    jpg_data_uris = DataUriImageEncodeService.get_context_data_images(
        signal, 800)

    context = {
        'signal': signal,
        'now': timezone.datetime.now(),
        'bbox': bbox,
        'user': None,
        'jpg_data_uris': jpg_data_uris,
    }
    return render_to_string('api/pdf/print_signal.html', context=context)
コード例 #4
0
    def _get_context_data(signal, user, include_contact_details):
        """
        Context data for the PDF HTML template.
        """
        logo_src = _get_data_uri(settings.API_PDF_LOGO_STATIC_FILE)

        bbox, img_data_uri = PDFSummaryService._get_map_data(signal)
        jpg_data_uris, att_filenames, user_emails, att_created_ats = \
            DataUriImageEncodeService.get_context_data_images(signal, PDFSummaryService.max_size)
        reporter_email, reporter_phone = PDFSummaryService._get_contact_details(
            signal, user, include_contact_details)

        return {
            'signal':
            signal,
            'bbox':
            bbox,
            'img_data_uri':
            img_data_uri,
            'attachment_images':
            zip(jpg_data_uris, att_filenames, user_emails, att_created_ats),
            'user':
            user if user else AnonymousUser(),
            'logo_src':
            logo_src,
            'now':
            timezone.now(),
            'reporter_email':
            reporter_email,
            'reporter_phone':
            reporter_phone,
        }
コード例 #5
0
 def test_get_context_data_invalid_images(self):
     AttachmentFactory.create(_signal=self.signal, file__filename='blah.jpg', file__data=b'blah', is_image=True)
     jpg_data_uris, att_filenames, user_emails, att_created_ats = \
         DataUriImageEncodeService.get_context_data_images(self.signal, 800)
     self.assertEqual(len(jpg_data_uris), 0)
     self.assertEqual(len(att_filenames), 0)
     self.assertEqual(len(user_emails), 0)
     self.assertEqual(len(att_created_ats), 0)
コード例 #6
0
ファイル: test_images.py プロジェクト: vanbuiten/signals
 def test_get_context_data_no_images(self):
     AttachmentFactory(_signal=self.signal,
                       file__filename='blah.txt',
                       file__data=b'blah',
                       is_image=False)
     jpg_data_uris = DataUriImageEncodeService.get_context_data_images(
         self.signal, 800)
     self.assertEqual(len(jpg_data_uris), 0)
コード例 #7
0
ファイル: test_images.py プロジェクト: vanbuiten/signals
    def test_get_context_data_valid_image(self):
        image = Image.new("RGB", (100, 100), (0, 0, 0))
        buffer = BytesIO()
        image.save(buffer, format='JPEG')

        AttachmentFactory.create(_signal=self.signal,
                                 file__filename='blah.jpg',
                                 file__data=buffer.getvalue())
        jpg_data_uris = DataUriImageEncodeService.get_context_data_images(
            self.signal, 80)
        self.assertEqual(len(jpg_data_uris), 1)
        self.assertEqual(jpg_data_uris[0][:22], 'data:image/jpg;base64,')
        self.assertGreater(len(jpg_data_uris[0]), 22)
コード例 #8
0
    def test_get_context_data_images_for_rgba(self):
        # Reproduce problem reported in SIG-3972, RGBA PNG image attachment causes a failure to create PDFs
        image = Image.new("RGBA", (100, 100), (0, 0, 0, 0))
        buffer = BytesIO()
        image.save(buffer, format='PNG')

        AttachmentFactory.create(_signal=self.signal, file__filename='blah.png', file__data=buffer.getvalue())
        jpg_data_uris, att_filenames, user_emails, att_created_ats = \
            DataUriImageEncodeService.get_context_data_images(self.signal, 800)
        self.assertEqual(len(jpg_data_uris), 1)
        self.assertEqual(len(att_filenames), 1)
        self.assertEqual(len(user_emails), 1)
        self.assertEqual(len(att_created_ats), 1)
        self.assertEqual(jpg_data_uris[0][:22], 'data:image/jpg;base64,')
        self.assertGreater(len(jpg_data_uris[0]), 22)
コード例 #9
0
ファイル: pdf.py プロジェクト: vanbuiten/signals
    def get_context_data(self, **kwargs):
        self.object = self.get_object()
        logo_src = _get_data_uri(settings.API_PDF_LOGO_STATIC_FILE)
        img_data_uri = None
        bbox = None

        if settings.DEFAULT_MAP_TILE_SERVER:
            map_img = self.map_generator.make_map(
                url_template=settings.DEFAULT_MAP_TILE_SERVER,
                lat=self.object.location.geometrie.coords[1],
                lon=self.object.location.geometrie.coords[0],
                zoom=17,
                img_size=[680, 250])
            # transform image to png -> bytes -> data uri
            png_array = io.BytesIO()
            map_img.save(png_array, format='png')
            encoded = base64.b64encode(png_array.getvalue()).decode()
            img_data_uri = 'data:image/png;base64,{}'.format(encoded)
        else:
            rd_coordinates = self.object.location.get_rd_coordinates()
            bbox = '{},{},{},{}'.format(
                rd_coordinates.x - 340.00,
                rd_coordinates.y - 125.00,
                rd_coordinates.x + 340.00,
                rd_coordinates.y + 125.00,
            )
        jpg_data_uris = DataUriImageEncodeService.get_context_data_images(
            self.object, self.max_size)

        return super().get_context_data(
            bbox=bbox,
            img_data_uri=img_data_uri,
            jpg_data_uris=jpg_data_uris,
            user=self.request.user,
            logo_src=logo_src,
        )