Пример #1
0
    def test_generate_pdf(self):
        with self.app.app_context():
            report = generate_report(options,
                                     mimetype=MIME_TYPES.PDF,
                                     base64=False,
                                     width='1200')

            # Report is a buffer of bytes with size > 0
            self.assertTrue(type(report) == bytes)
            self.assertTrue(len(report) > 0)

            # PDF header/footer signature
            self.assertTrue(report.startswith(b'%PDF-'))
            self.assertTrue(report.endswith(b'%%EOF\n'))
Пример #2
0
    def test_generate_svg(self):
        with self.app.app_context():
            report = generate_report(options,
                                     mimetype=MIME_TYPES.SVG,
                                     base64=False)

            # Report is a buffer of bytes with size > 0
            self.assertTrue(type(report) == bytes)
            self.assertTrue(len(report) > 0)

            # The bytes buffer represents an xml/svg file
            self.assertTrue(report.startswith(b'<?xml'))
            self.assertTrue(report.find(b'<svg') > -1)

            # The title and categories are found in the svg data
            self.assertTrue(report.find(b'Steep Chart') > -1)
            self.assertTrue(report.find(b'Jan') > -1)
            self.assertTrue(report.find(b'Feb') > -1)
            self.assertTrue(report.find(b'Mar') > -1)
Пример #3
0
    def test_generate_jpg(self):
        with self.app.app_context():
            report = generate_report(options,
                                     mimetype=MIME_TYPES.JPEG,
                                     base64=False,
                                     width='1200')

            # Report is a buffer of bytes with size > 0
            self.assertTrue(type(report) == bytes)
            self.assertTrue(len(report) > 0)

            image = Image.open(BytesIO(report))

            # Valid image file
            try:
                image.verify()
            except Exception as e:
                self.failureException('Exception raised: {}'.format(e))

            # Image is JPEG with a width of 1200
            self.assertEqual(image.format, 'JPEG')
            self.assertEqual(image.width, 1200)
    def _gen_attachments(report):
        report_service = get_report_service(report.get('type'))
        if report_service is None:
            raise SuperdeskApiError.badRequestError(
                'Unknown report type "{}"'.format(report.get('type')))

        if report.get('mimetype') in [
                MIME_TYPES.PNG, MIME_TYPES.JPEG, MIME_TYPES.GIF,
                MIME_TYPES.PDF, MIME_TYPES.SVG
        ]:
            # This mimetype is handled by highcharts, so generate the highcharts config
            return_type = 'highcharts_config'
        elif report.get('mimetype') == MIME_TYPES.CSV:
            return_type = MIME_TYPES.CSV
        else:
            return_type = 'aggregations'

        generated_report = list(
            report_service.get(req=None,
                               params=report.get('params') or {},
                               translations=report.get('translations') or {},
                               return_type=return_type))[0]

        if return_type == 'highcharts_config':
            options = generated_report.get('highcharts')
        elif return_type == MIME_TYPES.CSV:
            options = [generated_report.get('csv')]
        else:
            options = []

        attachments = []

        i = 1
        for option in options:
            mime_type = report.get('mimetype')
            report_width = report.get('width') or 800

            if isinstance(option, dict) and option.get('type') == 'table':
                mime_type = MIME_TYPES.HTML

            try:
                attachments.append({
                    'file':
                    generate_report(option,
                                    mimetype=mime_type,
                                    base64=True,
                                    width=report_width),
                    'mimetype':
                    mime_type,
                    'filename':
                    'chart_{}.{}'.format(i,
                                         get_mime_type_extension(mime_type)),
                    'width':
                    report_width
                })
                i += 1
            except Exception as e:
                logger.error('Failed to generate chart.')
                logger.exception(e)

        return attachments