mailr2589 - in /1.2: errors.py generic_fns/palmer.py io.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on September 30, 2006 - 15:35:
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:
<7f080ed10609280917s139d2c2cm9f0edcbd5a9fc04c@xxxxxxxxxxxxxx>).  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):




Related Messages


Powered by MHonArc, Updated Sat Sep 30 16:20:09 2006