Author: bugman Date: Sat Sep 30 15:35:17 2006 New Revision: 2589 URL: http://svn.gna.org/viewcvs/relax?rev=2589&view=rev Log: Fix to bug #7225.
This bug was reported by Alex Hansen at https://gna.org/bugs/index.php?7225. To enable comprehensible error messages when attempting to execute Modelfree4, the function 'self.test_binary()' was added to the file 'io.py'. This was described in the post located at https://mail.gna.org/public/relax-devel/2006-09/msg00034.html (Message-id: <[EMAIL PROTECTED]>). The implementation is slightly different to the post though. Firstly the supplied string corresponding to the binary is tested to see if the full path has been supplied. If so then the string is tested to see if the file exists and if the file is executable. Otherwise the file is searched for in the PATH environmental variable. Point 5 of the post at https://mail.gna.org/public/relax-devel/2006-09/msg00034.html, testing that the binary is in the current directory was not implemented. The reason is because I was unable to successfully modify the PATH variable. Three new RelaxErrors have been created to print out comprehensible messages: RelaxMissingBinaryError, RelaxNonExecError, and RelaxNoInPathError. Modified: 1.2/errors.py 1.2/generic_fns/palmer.py 1.2/io.py Modified: 1.2/errors.py URL: http://svn.gna.org/viewcvs/relax/1.2/errors.py?rev=2589&r1=2588&r2=2589&view=diff ============================================================================== --- 1.2/errors.py (original) +++ 1.2/errors.py Sat Sep 30 15:35:17 2006 @@ -103,6 +103,31 @@ if Debug: self.save_state() + + # The binary executable file does not exist (full path has been given!). + class RelaxMissingBinaryError(BaseError): + def __init__(self, name): + self.text = "The binary executable file " + `name` + " does not exist." + if Debug: + self.save_state() + + + # The binary executable file is not executable. + class RelaxNonExecError(BaseError): + def __init__(self, name): + self.text = "The binary executable file " + `name` + " is not executable." + if Debug: + self.save_state() + + + # The binary executable file is not located within the system path. + class RelaxNoInPathError(BaseError): + def __init__(self, name): + self.text = "The binary executable file " + `name` + " is not located within the system path." + if Debug: + self.save_state() + + # Program execution failure. class RelaxProgFailError(BaseError): def __init__(self, name): Modified: 1.2/generic_fns/palmer.py URL: http://svn.gna.org/viewcvs/relax/1.2/generic_fns/palmer.py?rev=2589&r1=2588&r2=2589&view=diff ============================================================================== --- 1.2/generic_fns/palmer.py (original) +++ 1.2/generic_fns/palmer.py Sat Sep 30 15:35:17 2006 @@ -456,6 +456,9 @@ if search('out$', file) or search('rotate$', file): remove(file) + # Test the binary file string corresponds to a valid executable. + self.relax.IO.test_binary(self.binary) + # Execute Modelfree4 (inputting a PDB file). if pdb: status = spawnlp(P_WAIT, self.binary, self.binary, '-i', 'mfin', '-d', 'mfdata', '-p', 'mfpar', '-m', 'mfmodel', '-o', 'mfout', '-e', 'out', '-s', pdb) Modified: 1.2/io.py URL: http://svn.gna.org/viewcvs/relax/1.2/io.py?rev=2589&r1=2588&r2=2589&view=diff ============================================================================== --- 1.2/io.py (original) +++ 1.2/io.py Sat Sep 30 15:35:17 2006 @@ -1,6 +1,6 @@ ############################################################################### # # -# Copyright (C) 2003-2005 Edward d'Auvergne # +# Copyright (C) 2003-2006 Edward d'Auvergne # # # # This file is part of the program relax. # # # @@ -41,7 +41,7 @@ __builtin__.devnull_import = 0 __builtin__.devnull_import_message = message.args[0] -from os import F_OK, access, makedirs, remove, stat +from os import F_OK, X_OK, access, altsep, getenv, makedirs, pathsep, remove, sep, stat from os.path import expanduser from re import match, search from string import split @@ -363,6 +363,41 @@ sys.stderr = self.tee_stderr + def test_binary(self, binary): + """Function for testing that the binary string corresponds to a valid executable file.""" + + # Path separator RE string. + if altsep: + path_sep = '[' + sep + altsep + ']' + else: + path_sep = sep + + # The full path of the program has been given (if a directory separatory has been supplied). + if search(path_sep, binary): + # Test that the binary exists. + if not access(binary, F_OK): + raise RelaxMissingBinaryError, binary + + # Test that if the binary is executable. + if not access(binary, X_OK): + raise RelaxNonExecError, binary + + # The path to the binary has not been given. + else: + # Get the PATH environmental variable. + path = getenv('PATH') + + # Split PATH by the path separator. + path_list = split(path, pathsep) + + # Test that the binary exists within the system path (and exit this function instantly once it has been found). + for path in path_list: + if access(path + sep + binary, F_OK): + return + + # The binary is not located in the system path! + raise RelaxNoInPathError, binary + class SplitIO: def __init__(self): _______________________________________________ relax (http://nmr-relax.com) This is the relax-commits mailing list relax-commits@gna.org To unsubscribe from this list, get a password reminder, or change your subscription options, visit the list information page at https://mail.gna.org/listinfo/relax-commits