Skip to content

Commit 84cba77

Browse files
committed
Changed molecule error and exception logging into debug
They caused unnecessary clutter in the log file
1 parent 2960347 commit 84cba77

3 files changed

Lines changed: 46 additions & 5 deletions

File tree

arc/molecule/molecule.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1935,7 +1935,7 @@ def to_inchi(self, backend='rdkit-first'):
19351935
try:
19361936
return translator.to_inchi(self, backend=backend)
19371937
except:
1938-
logger.exception(f"Error for molecule \n{self.to_adjacency_list()}")
1938+
logger.debug(f"Identifier generation failed for molecule\n{self.to_adjacency_list()}", exc_info=True)
19391939
raise
19401940

19411941
def to_augmented_inchi(self, backend='rdkit-first'):
@@ -1952,7 +1952,7 @@ def to_augmented_inchi(self, backend='rdkit-first'):
19521952
try:
19531953
return translator.to_inchi(self, backend=backend, aug_level=2)
19541954
except:
1955-
logger.exception(f"Error for molecule \n{self.to_adjacency_list()}")
1955+
logger.debug(f"Identifier generation failed for molecule\n{self.to_adjacency_list()}", exc_info=True)
19561956
raise
19571957

19581958
def to_inchi_key(self, backend='rdkit-first'):
@@ -1972,7 +1972,7 @@ def to_inchi_key(self, backend='rdkit-first'):
19721972
try:
19731973
return translator.to_inchi_key(self, backend=backend)
19741974
except:
1975-
logger.exception(f"Error for molecule \n{self.to_adjacency_list()}")
1975+
logger.debug(f"Identifier generation failed for molecule\n{self.to_adjacency_list()}", exc_info=True)
19761976
raise
19771977

19781978
def to_augmented_inchi_key(self, backend='rdkit-first'):
@@ -1990,7 +1990,7 @@ def to_augmented_inchi_key(self, backend='rdkit-first'):
19901990
try:
19911991
return translator.to_inchi_key(self, backend=backend, aug_level=2)
19921992
except:
1993-
logger.exception(f"Error for molecule \n{self.to_adjacency_list()}")
1993+
logger.debug(f"Identifier generation failed for molecule\n{self.to_adjacency_list()}", exc_info=True)
19941994
raise
19951995

19961996
def to_smarts(self):

arc/molecule/translator.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,11 @@ def _write(mol, identifier_type, backend):
553553
logger.warning(f"Unexpected error from backend '{option}': {e}")
554554
continue
555555

556-
logger.error(f"Unable to generate identifier '{identifier_type}' for this molecule:\n{mol.to_adjacency_list()}")
556+
logger.debug(
557+
f"Unable to generate identifier '{identifier_type}' for this molecule "
558+
f"(structure may be fragmented or carry anomalous formal charges):\n"
559+
f"{mol.to_adjacency_list()}"
560+
)
557561
raise ValueError(f"Unable to generate identifier type '{identifier_type}' with backend(s): {backend}")
558562

559563

arc/molecule/translator_test.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,5 +706,42 @@ def test_read_inchikey_error(self):
706706
self.assertTrue('InChIKey is a write-only format' in str(cm.exception))
707707

708708

709+
class IdentifierFailureLoggingTest(unittest.TestCase):
710+
"""When neither backend can canonicalize a molecule into InChI / InChIKey
711+
(e.g. malformed resonance structures from RMG perception), the translator
712+
and the four Molecule wrappers must raise ValueError but emit nothing at
713+
WARNING level or above. The caller (resonance dedup, etc.) routinely
714+
swallows the ValueError; the previous WARNING + ERROR-with-traceback pair
715+
was log spam."""
716+
717+
def _assert_wrapper_logs_below_warning(self, wrapper_name, translator_func_name):
718+
"""Patch the underlying translator function to raise, call the
719+
Molecule wrapper, and verify the wrapper re-raises while emitting only
720+
DEBUG-level (not WARNING/ERROR) log records."""
721+
from arc.molecule import translator as t
722+
mol = Molecule().from_smiles('C')
723+
with patch.object(t, translator_func_name,
724+
side_effect=ValueError('mocked-out backend')):
725+
with self.assertLogs('arc', level='DEBUG') as cm:
726+
with self.assertRaises(ValueError):
727+
getattr(mol, wrapper_name)()
728+
for record in cm.records:
729+
self.assertLess(record.levelno, 30, # WARNING == 30
730+
f"Unexpected {record.levelname} log line from "
731+
f"{wrapper_name}: {record.getMessage()}")
732+
733+
def test_to_inchi_wrapper_logs_only_at_debug_on_failure(self):
734+
self._assert_wrapper_logs_below_warning('to_inchi', 'to_inchi')
735+
736+
def test_to_inchi_key_wrapper_logs_only_at_debug_on_failure(self):
737+
self._assert_wrapper_logs_below_warning('to_inchi_key', 'to_inchi_key')
738+
739+
def test_to_augmented_inchi_wrapper_logs_only_at_debug_on_failure(self):
740+
self._assert_wrapper_logs_below_warning('to_augmented_inchi', 'to_inchi')
741+
742+
def test_to_augmented_inchi_key_wrapper_logs_only_at_debug_on_failure(self):
743+
self._assert_wrapper_logs_below_warning('to_augmented_inchi_key', 'to_inchi_key')
744+
745+
709746
if __name__ == '__main__':
710747
unittest.main(testRunner=unittest.TextTestRunner(verbosity=2))

0 commit comments

Comments
 (0)