mirror of
https://github.com/biopython/biopython.git
synced 2025-10-20 13:43:47 +08:00
$ ruff check --fix --select=I \ --config=lint.isort.force-single-line=true \ --config=lint.isort.order-by-type=false \ BioSQL/ Bio/ Tests/ Scripts/ Doc/ setup.py Using ruff version 0.4.10
93 lines
3.2 KiB
Python
93 lines
3.2 KiB
Python
# 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 renderPDF
|
|
from reportlab.graphics import renderPS
|
|
from reportlab.graphics import 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)
|