Spaces:
No application file
No application file
# Copyright 2008 by Brad Chapman. All rights reserved. | |
# Copyright 2008 by Michiel de Hoon. All rights reserved. | |
# Copyright 2009-2017 by Peter Cock. All rights reserved. | |
# | |
# This file is part of the Biopython distribution and governed by your | |
# choice of the "Biopython License Agreement" or the "BSD 3-Clause License". | |
# Please see the LICENSE file that should have been included as part of this | |
# package. | |
"""Bio.Graphics offers several graphical outputs, all using ReportLab.""" | |
# Check if ReportLab is installed. | |
try: | |
import reportlab as r | |
del r | |
except ImportError: | |
from Bio import MissingPythonDependencyError | |
raise MissingPythonDependencyError( | |
"Please install ReportLab if you want " | |
"to use Bio.Graphics. You can find ReportLab at " | |
"http://www.reportlab.com/software/opensource/" | |
) from None | |
# The following code is to allow all the Bio.Graphics | |
# code to deal with the different ReportLab renderers | |
# and the API quirks consistently. | |
def _write(drawing, output_file, format, dpi=72): | |
"""Standardize output to files (PRIVATE). | |
Writes the provided drawing out to a file in a prescribed format. | |
- drawing - suitable ReportLab drawing object. | |
- output_file - a handle to write to, or a filename to write to. | |
- format - String indicating output format, one of PS, PDF, SVG, | |
or provided the ReportLab renderPM module is installed, | |
one of the bitmap formats JPG, BMP, GIF, PNG, TIFF or TIFF. | |
The format can be given in any case. | |
- dpi - Resolution (dots per inch) for bitmap formats. | |
No return value. | |
""" | |
from reportlab.graphics import renderPS, renderPDF, renderSVG | |
try: | |
from reportlab.graphics import renderPM | |
except ImportError: | |
# This is an optional part of ReportLab, so may not be installed. | |
# We'll raise a missing dependency error if rendering to a | |
# bitmap format is attempted. | |
renderPM = None | |
formatdict = { | |
"PS": renderPS, | |
"EPS": renderPS, | |
# not sure which you actually get, PS or EPS, but | |
# GenomeDiagram used PS while other modules used EPS. | |
"PDF": renderPDF, | |
"SVG": renderSVG, | |
"JPG": renderPM, | |
"BMP": renderPM, | |
"GIF": renderPM, | |
"PNG": renderPM, | |
"TIFF": renderPM, | |
"TIF": renderPM, | |
} | |
try: | |
# If output is not a string, then .upper() will trigger | |
# an attribute error... | |
drawmethod = formatdict[format.upper()] # select drawing method | |
except (KeyError, AttributeError): | |
raise ValueError( | |
f"Output format should be one of {', '.join(formatdict)}" | |
) from None | |
if drawmethod is None: | |
# i.e. We wanted renderPM but it isn't installed | |
# See the import at the top of the function. | |
from Bio import MissingPythonDependencyError | |
raise MissingPythonDependencyError("Please install ReportLab's renderPM module") | |
if drawmethod == renderPM: | |
# This has a different API to the other render objects | |
return drawmethod.drawToFile(drawing, output_file, format, dpi=dpi) | |
else: | |
return drawmethod.drawToFile(drawing, output_file) | |