diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..a35a199 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include README.md requirements.in requirements.txt diff --git a/README.md b/README.md index 0ce4b53..2cf1fe6 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ Generate a List a PDF of Amino Acids document.add_spacer() smiles_amino_acids = list(amino_acid_side_chains.values()) - document.generate(smiles=smiles_amino_acids) + document.generate(smiles=smiles_amino_acids, include_failed_smiles=True) ``` diff --git a/examples/functional_groups.pdf b/examples/functional_groups.pdf new file mode 100644 index 0000000..e50cbdb Binary files /dev/null and b/examples/functional_groups.pdf differ diff --git a/molpdf/molpdf.py b/molpdf/molpdf.py index 0e2a642..5fa5043 100644 --- a/molpdf/molpdf.py +++ b/molpdf/molpdf.py @@ -325,26 +325,35 @@ def add_title(self, title): title = Paragraph(title, self.styles['Line_Label_Center_Big']) self.story.append(title) - def add_image(self, smiles, temporary_directory): + def add_image(self, smiles, temporary_directory, include_failed_smiles=False): """ Arguments: smiles (String): smiles representation of the molecule temporary_directory (tempfile object): Temporary directory of the module + include_failed_smiles (Bool): whether the user would like to include failed smiles. """ indigo = Indigo() renderer = IndigoRenderer(indigo) - molecule = indigo.loadMolecule(smiles) + try: + molecule = indigo.loadMolecule(smiles) + except IndigoException as e: + if include_failed_smiles: + self.add_row("Failed Rendering", smiles) + return + molecule.layout() # if not called, will be done automatically by the renderer indigo.setOption("render-output-format", "png") indigo.setOption("render-image-size", 400, 400) indigo.setOption("render-background-color", 1.0, 1.0, 1.0) - path = os.path.join(temporary_directory, smiles + '.png') + import uuid + + path = os.path.join(temporary_directory, str(uuid.uuid4()) + '.png') renderer.renderToFile(molecule, filename=path) image = Image(path, 1 * inch, 1 * inch, hAlign='CENTER') @@ -421,7 +430,7 @@ def add_row(self, image, smiles): self.story.append(table) @timeit - def generate(self, smiles): + def generate(self, smiles, include_failed_smiles=False): """ @@ -440,7 +449,7 @@ def generate(self, smiles): self.smiles = smiles for smiles in self.smiles: - self.add_image(smiles, tmp) + self.add_image(smiles, tmp, include_failed_smiles) # Build the initial PDF using Reportlab self.doc.build(self.story) diff --git a/requirements.txt b/requirements.txt index 5fb30f3..c4164c0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,9 @@ epam.indigo==1.4.0b0 numpy==1.18.3 opencv-python==4.2.0.34 +pdfminer==20191125 +pdfrw==0.4 Pillow==7.1.1 +pycryptodome==3.9.7 reportlab==3.5.42 six==1.14.0 diff --git a/setup.py b/setup.py index e7569c8..e444480 100644 --- a/setup.py +++ b/setup.py @@ -35,7 +35,7 @@ # ---- setup( name="molpdf", - version="0.2.0", + version="0.3.0", packages=['molpdf'], license='MPL 2.0', author="Suliman Sharif",