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) | |