Source code for icolos.utils.execute_external.openbabel

import os
import sys
from icolos.utils.enums.program_parameters import OpenBabelEnum
from icolos.utils.execute_external.execute import ExecutorBase

EE = OpenBabelEnum()


[docs]class OpenBabelExecutor(ExecutorBase): """For the execution of the "obabel" binary.""" def __init__(self): # in case the environment is not activated, add the path to the binary here obabel_location = os.path.dirname(sys.executable) super().__init__(prefix_execution=None, binary_location=obabel_location)
[docs] def execute( self, command: str, arguments: list, check=True, location=None, pipe_input=None ): # check, whether a proper executable is provided if command not in [EE.OBABEL]: raise ValueError( "Parameter command must be an element of the internal OpenBabel executable list." ) return super().execute( command=command, arguments=arguments, check=check, location=location, pipe_input=pipe_input, )
[docs] def is_available(self): # unfortunately, "obabel" does not return a meaningful return value (always '1'), so instead try to parse # the "stdout" of the standard message; note, that "OpenBabel" is part of the environment and should always work try: result = self.execute(command=EE.OBABEL, arguments=[], check=False) if EE.OBABEL_IDENTIFICATION_STRING in result.stdout: return True return False except Exception as e: return False