From 95e16b98b75067c44cd8b6427730b32dfedf1962 Mon Sep 17 00:00:00 2001 From: Brady Johnston Date: Sat, 8 Mar 2025 07:47:41 +0800 Subject: [PATCH] everything except cellpack passing --- molecularnodes/entities/molecule/pdbx.py | 10 +++++++++- molecularnodes/entities/molecule/reader.py | 11 +++++++---- molecularnodes/ui/ops.py | 1 + 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/molecularnodes/entities/molecule/pdbx.py b/molecularnodes/entities/molecule/pdbx.py index 39d1b430..4752de2d 100644 --- a/molecularnodes/entities/molecule/pdbx.py +++ b/molecularnodes/entities/molecule/pdbx.py @@ -51,7 +51,15 @@ def _assemblies(self): return CIFAssemblyParser(self.file).get_assemblies() def entity_ids(self): - return self.file.block.get("entity").get("pdbx_description").as_array().tolist() + try: + return ( + self.file.block.get("entity") + .get("pdbx_description") + .as_array() + .tolist() + ) + except AttributeError: + return None @staticmethod def _extract_matrices(category): diff --git a/molecularnodes/entities/molecule/reader.py b/molecularnodes/entities/molecule/reader.py index e234229d..2c23aab4 100644 --- a/molecularnodes/entities/molecule/reader.py +++ b/molecularnodes/entities/molecule/reader.py @@ -3,7 +3,7 @@ from io import BytesIO from biotite.structure import AtomArray, AtomArrayStack from biotite import structure as struc -from biotite.file import File +from biotite.file import File, InvalidFileError import numpy as np import json from ...assets import data @@ -67,9 +67,12 @@ def chain_ids(self) -> list[str] | None: return np.unique(self.array.chain_id).tolist() def assemblies(self, as_json_string: bool = False) -> dict | str: - if as_json_string: - return json.dumps(self._assemblies()) - return self._assemblies() + try: + if as_json_string: + return json.dumps(self._assemblies()) + return self._assemblies() + except InvalidFileError: + return "" def _assemblies(self): return {} diff --git a/molecularnodes/ui/ops.py b/molecularnodes/ui/ops.py index 1db944b0..f8888666 100644 --- a/molecularnodes/ui/ops.py +++ b/molecularnodes/ui/ops.py @@ -102,6 +102,7 @@ def execute(self, context): if not isinstance(obj, bpy.types.Object): self.report({"ERROR"}, "No active object") return {"CANCELLED"} + with databpy.nodes.DuplicatePrevention(): try: if self.inset_node: