[mapserver-commits] r7965 - trunk/msautotest/pymod

svn at osgeo.org svn at osgeo.org
Mon Oct 6 15:53:59 EDT 2008


Author: nsavard
Date: 2008-10-06 15:53:58 -0400 (Mon, 06 Oct 2008)
New Revision: 7965

Added:
   trunk/msautotest/pymod/msautotest_viewer.py
Log:
Initial revision.

Added: trunk/msautotest/pymod/msautotest_viewer.py
===================================================================
--- trunk/msautotest/pymod/msautotest_viewer.py	                        (rev 0)
+++ trunk/msautotest/pymod/msautotest_viewer.py	2008-10-06 19:53:58 UTC (rev 7965)
@@ -0,0 +1,410 @@
+#!/home/nsavard/fgs-ms5.2.0/bin/python
+##!c:/python25/python.exe
+import cgi, os, os.path, subprocess, tempfile
+import logging, difflib, ConfigParser, sys, string
+
+config = ConfigParser.ConfigParser()
+config.readfp(open('config.cfg'))
+python_logging_file = config.get("Logging", "PythonLoggingFile")
+logging_flag = config.getboolean("Logging", "PythonLogging")
+
+def main():
+
+    function_name = "main:  "
+    global config, logging_flag
+
+    
+    if not os.path.isdir(os.path.dirname(python_logging_file)):
+        print "Content-type: text/html"
+        print
+        print "<html><pre>" + function_name + ":The logging file: " + python_logging_file + " does not exist; check the configuration file</pre></html>"
+        sys.exit(function_name + ":The logging file:  " + python_logging_file + " does not exist.  Check the configuration file.")
+
+    logging.basicConfig(level=logging.DEBUG,
+                    format='%(asctime)s %(levelname)s %(message)s',
+                    filename=python_logging_file,
+                    filemode='a')
+
+    if logging_flag == False:
+        logging.disable('debug')
+
+    print "Content-type: text/html"
+    print
+    print """
+
+    <html>
+    <head>
+    <title>msautotest viewer</title>
+    </head>
+    <body>
+      <h1>Auto Compare Maps</h1>
+      <a href="../pymod">Back to msautotest root directory</a>
+      <form method=POST>
+
+        <INPUT TYPE=HIDDEN NAME="Position" VALUE="">
+        <INPUT TYPE=HIDDEN NAME="Direction" VALUE="">
+        <INPUT TYPE=HIDDEN NAME="Directory" VALUE="">
+
+    <script language="JavaScript" type="text/javascript">
+
+      function PrevPage(nResults, nPos, szDir)
+      {
+          //alert('prevpage');
+          document.forms[0].Direction.value="PREV";
+          document.forms[0].Position.value = parseInt(nPos) - parseInt(nResults);
+          document.forms[0].Directory.value=szDir;
+          document.forms[0].submit();
+
+     
+      }
+      function NextPage(nResults, nPos, szDir)
+      {
+          //alert('nextpage');
+          document.forms[0].Direction.value="NEXT";
+          document.forms[0].Position.value = parseInt(nPos) + parseInt(nResults);
+          document.forms[0].Directory.value=szDir;
+          document.forms[0].submit();
+      }
+
+      var bSwitching = 0;
+  
+      function startSwitching(szImageName, szImage1, szImage2)
+      {
+          bSwitching = 0;
+          switch2image2(szImageName, szImage1, szImage2);
+      }
+   
+
+      function stopSwitching()
+      {
+          bSwitching =1;
+      }
+    
+
+      function switch2image1(szImageName, szImage1, szImage2) 
+      {
+          oImageName2Display = document.getElementById(szImageName);
+          oImageName2Display.value = szImage1;
+
+          if(!bSwitching)
+          {
+              document.images[szImageName].src = szImage1;
+              setTimeout("switch2image2('" + szImageName + "','" + szImage1 + "','" + szImage2 +"')", 1000);
+          }
+      }
+
+      function switch2image2(szImageName, szImage1, szImage2) 
+      {
+          oImageName2Display = document.getElementById(szImageName);
+          oImageName2Display.value = szImage2;
+
+
+          if(!bSwitching)
+          {
+              document.images[szImageName].src = szImage2;
+              setTimeout("switch2image1('" + szImageName + "','" + szImage1 + "','" + szImage2 +"')", 1000);
+
+          }
+      }
+
+    </script>
+
+    <br>
+
+    <table border=1>"""
+
+    rmTmpPngImages()
+
+    results_per_page = int(config.get("Report", "ResultsPerPage"))
+
+    GET_parameters = cgi.FieldStorage()
+
+    if GET_parameters.has_key( 'Direction'):
+        direction = GET_parameters['Direction'].value
+    else:
+        direction = ""
+
+    if GET_parameters.has_key( 'Position'):
+        position = GET_parameters['Position'].value
+    else:
+        position = 0
+
+    if GET_parameters.has_key( 'Directory'):
+        directory = GET_parameters['Directory'].value
+    else:
+        directory = ""
+
+    #Opening and reading directoy
+    count = 0
+    lines_list = []
+
+    logging.debug("getcwd=" + os.getcwd())
+
+    ## Build result & expected directories/URLs
+    current_directory = os.getcwd()
+    current_directory = current_directory.replace('\\', '/')
+    logging.debug(function_name + "current directory="+current_directory)
+    actual_directory = directory + '/result/'
+    expected_directory = directory + '/expected/'
+
+    actual_URL =  directory + "/result/"
+    expected_URL = directory + "/expected/"
+
+    logging.debug( function_name + "directory="+directory)
+    logging.debug(  function_name + "actual directory="+actual_directory)
+    logging.debug(  function_name + "expected directory="+expected_directory)
+    logging.debug(  function_name + "actual URL="+actual_URL)
+    logging.debug(  function_name + "expected URL="+expected_URL)
+
+
+    
+   
+    if os.path.isdir(current_directory):
+         for file in os.listdir(actual_directory):
+            if string.find(file, '.aux') != -1:
+               continue
+            else:
+                logging.debug( function_name + "filename: " + file)
+                line = file + ' '
+                line += actual_directory + file + ' '
+                line +=  actual_URL + file + ' '
+                line += expected_directory + file + ' '
+                line +=  expected_URL + file
+
+            #logging.debug( function_name + lines)
+            lines_list.append(line)
+
+    #logging.debug( function_name + str(lines_list))
+    count = len(lines_list)
+
+    #Control "NEXT" and "PREVIOUS" buttons appearance
+    if direction  == "NEXT":
+        prev_button = "<a href=\"javascript:PrevPage(" + str(results_per_page) + "," + str(position) + ", '" + str(directory) + "')\">PREV</a>"
+        if ( int(position) + results_per_page) < count:
+            next_button = "<a href=\"javascript:NextPage(" + str(results_per_page) + "," + str(position) + ", '" + str(directory) + "')\">NEXT</a>"
+       
+        else:
+            next_button = "<a>NEXT</a>"
+    elif direction  == "PREV":
+        next_button = "<a href=\"javascript:NextPage(" + str(results_per_page) + "," + str(position) + ", '" + str(directory) + "')\">NEXT</a>"
+
+        if ( int(position) - results_per_page) >= 0:
+            prev_button = "<a href=\"javascript:PrevPage(" + str(results_per_page) + "," + str(position) + ", '" + str(directory) + "')\">PREV</a>"
+        else:
+            prev_button = "<a>PREV</a>"
+
+    else:
+        prev_button = "<a>PREV</a>"
+        if ( int(position) + results_per_page) < count:
+            next_button = "<a href=\"javascript:NextPage(" + str(results_per_page) + "," + str(position) + "," + "'" + str(directory) +"')\">NEXT</a>"
+        else:
+            next_button = "<a>NEXT</a>"
+
+    logging.debug( function_name + "direction="+direction)
+    logging.debug( function_name + "count="+str(count))
+    logging.debug( function_name + "pos="+str(position))
+    logging.debug( function_name + "number of results="+str(results_per_page))
+
+
+    #Prepare result output
+    i = int(position)
+    parameters_list_list = []
+    output_list = []
+    diff_output_list_list = []
+
+    #parameters_list_list value
+    #File name   Actual dir Actual URL Expected dir Expected URL
+    #   [0]          [1]        [2]         [3]         [4]
+    while i < (results_per_page + int(position) ) and i<count:
+        file_info_list = lines_list[i].split(' ')
+        #logging.debug(function_name + str(file_info_list))
+        parameters_list_list.append(file_info_list)
+        i+=1
+    logging.debug(function_name + str(parameters_list_list))
+
+    print "<tr><td><table border=1 width=100%><tr><td>" + prev_button + "</td><td></td><td>" + next_button + "</td></tr></table></td></tr>\n"
+
+    i =0
+    for parameters_list in parameters_list_list:
+        #Process xml, dat or html files
+        if string.find(parameters_list[0], '.xml') != -1 or string.find(parameters_list[0], '.dat') != -1 or string.find(parameters_list[0], '.html') != -1 or string.find(parameters_list[0], '.js') != -1:
+
+            logging.debug(function_name + str(parameters_list[0]))
+
+            print "<tr><td><table border=1 width=100%><tr><td>Diff output expected vs actual ---File: " + parameters_list[0] + "</td></tr>\n"
+
+ 
+            expected_fp = open(parameters_list[3], 'r')
+            expected_list = expected_fp.readlines()
+            result_fp = open(parameters_list[1], 'r')
+            result_list  = result_fp.readlines()
+
+            output_list = difflib.unified_diff(expected_list, result_list, "Expected", "Result")
+            diff_output_list_list.append(''.join(output_list))
+        
+            #logging.debug(function_name + str(diff_output_list_list[len(diff_output_list_list) - 1]))
+
+            print "<tr><td><TEXTAREA COLS=175 ROWS=25x>value=" + diff_output_list_list[len(diff_output_list_list) - 1] + "</TEXTAREA></td></tr></table></td></tr>"
+
+
+        elif string.find(parameters_list[0], '.tif') != -1 or string.find(parameters_list[0], '.png') != -1:
+            #Process tiff, png files
+            logging.debug(function_name + str(parameters_list[0]))
+
+
+            #Is it a tiff file:  II or MM?
+            #Test with the file in the actual directory:  parameters_list[1]
+            file_header = open(parameters_list[1], "rb").readline(16)
+
+            if ('\x49\x49\x2A\x00' in file_header \
+            or '\x49\x49\x00\x2A' in file_header):
+ 
+                logging.debug(function_name + 'geotiff')
+
+                expected_PNG_image_URL = tiff2png(parameters_list[3])
+                actual_pNG_image_URL = tiff2png(parameters_list[1])
+                print "<tr><td><table border=1 width=100%><tr><td>File:" + parameters_list[0] + "</td><td>GeoTiff converted to Png.</td></tr></tr></table></td></tr>"
+
+            else:
+                expected_PNG_image_URL = parameters_list[4]
+                actual_pNG_image_URL = parameters_list[2]
+                print "<tr><td><table border=1 width=100%><tr><td>File:" + parameters_list[0] + "</td><td></td></tr></tr></table></td></tr>"
+
+
+            #Display switching buttons
+            print "<tr><td><table border=1 width=100%><tr><td>Expected</td><td>Actual</td><td><table><tr><td><INPUT TYPE=button NAME=\"Start\" onclick=\"startSwitching('imagefliper" + str(i) + "', '" + actual_pNG_image_URL +"', '" + expected_PNG_image_URL + "')\" >Start switching</td><td><INPUT TYPE=button NAME=\"Stop\" onclick=\"stopSwitching()\" >Stop switching</td><td>image:<input type=\"text\" id=\"imagefliper" + str(i) + "\" name=\"imagefliper" + str(i) + "\" value=\"" + actual_pNG_image_URL + "\" size=\"30\"></td></tr></table></td></tr>\n"
+
+            #Display images
+            print "<tr><td><img width=\"400\" height=\"300\" src=\"" + expected_PNG_image_URL + "\"></td><td><img width=\"400\" height=\"300\" src=\"" + actual_pNG_image_URL + "\"></td><td><img name=\"imagefliper" + str(i) + "\" width=\"400\" height=\"300\" src=\"" + actual_pNG_image_URL + "\"></td></tr></table><td><tr>\n"
+
+        else:
+            continue
+
+        i+=1   #End of for loop
+
+    print "<tr><td><table border=1 width=100%><tr><td>" + prev_button + "</td><td></td><td>" + next_button + "</td></tr></table></td></tr>\n"
+
+    print """        
+
+          </table>
+          <br>
+        </form>
+      </body>
+    </html>"""
+
+## Convert GeoTiff to PNG file in order to be able to see the image in the
+## browser
+def tiff2png(tiff_file):
+    function_name = "tiff2png:  "
+    global python_logging_file, logging_flag, config
+
+    ## Checking if path is found
+    if not os.path.isdir(os.path.dirname(python_logging_file)):
+        print "Content-type: text/html"
+        print
+        print "<html><pre>" + function_name + ":The logging file: " + python_logging_file + " does not exist; check the configuration file</pre></html>"
+        sys.exit(function_name + ":The logging file:  " + python_logging_file + "does not exist.  Check the configuration file.")
+
+    logging.basicConfig(level=logging.DEBUG,
+                    format='%(asctime)s %(levelname)s %(message)s',
+                    filename=python_logging_file,
+                    filemode='a')
+
+    if logging_flag == False:
+        logging.disable('debug')
+
+
+    out_file = config.get("Logging", "ShellOutputFile")
+    ## Checking if path is found
+    if not os.path.isdir(os.path.dirname(out_file)):
+        print "Content-type: text/html"
+        print
+        print "<html><pre>" + function_name + ":The output log file: " + out_file + " does not exist; check the configuration file</pre></html>"
+        sys.exit(function_name + ":The output log file:  " + out_file + " does not exist.  Check the configuration file.")
+
+    out_fp = file(out_file, "a")
+
+    err_file = config.get("Logging", "ShellErrorFile")
+    ## Checking if path is found
+    if not os.path.isdir(os.path.dirname(err_file)):
+        print "Content-type: text/html"
+        print
+        print "<html><pre>" + function_name + ":The error log file: " + err_file + " does not exist; check the configuration file</pre></html>"
+        sys.exit(function_name + ":The error log file:  " + err_file + " does not exist.  Check the configuration file.")
+
+    err_fp = file(err_file, "a")
+
+    tmp_path = config.get("Applications", "TmpDir")
+    ## Checking if path is found
+    if not os.path.isdir(tmp_path):
+        print "Content-type: text/html"
+        print
+        print "<html><pre>" + function_name + ":The tmp directory: " + tmp_path + " does not exist; check the configuration file</pre></html>"
+        sys.exit(function_name + ":The tmp directory:  " + tmp_path + " does not exist.  Check the configuration file.")
+
+    tmp_web = config.get("Applications", "TmpWeb")
+    ## Checking if path is found
+    if not os.path.isdir(tmp_web):
+        print "Content-type: text/html"
+        print
+        print "<html><pre>" + function_name + ":The tmp Web URL: " + tmp_web + " does not exist; check the configuration file</pre></html>"
+        sys.exit(function_name + ":The tmp Web URL:  " + tmp_path + " does not exist.  Check the configuration file.")
+
+
+
+    dirname = os.path.dirname(tiff_file)
+    logging.debug(function_name + "dirname=" + dirname)
+    ## Result or expected
+    sub_path = os.path.basename(dirname)
+    logging.debug(function_name + "su_path=" + sub_path)
+
+    basename = os.path.basename(tiff_file)
+    imagename_list = os.path.splitext(basename)
+    filename =  imagename[0] + '_msautotest_' + sub_path
+    logging.debug(function_name + "filename=" + filename)
+    PNG_file = tmp_path + filename + '.png'
+    PNG_URL = tmp_web + filename + '.png'
+    logging.debug(function_name + "PNG_URL=" + PNG_URL)
+
+    image_converter = config.get("Applications", "ImageConverterCmd")
+
+    ## Command has parameters so we need to get the executable only
+    image_converter_parameters_list = image_converter.split(' ')
+
+    ## Checking if the path exist
+    if not os.path.isdir(os.path.dirname(image_converter_parameters_list[0])):
+        print "Content-type: text/html"
+        print
+        print "<html><pre>" + function_name + ":The image converter command: " + image_converter_parameters_list[0] + " does not exist; check the configuration file</pre></html>"
+        sys.exit(function_name + ":The image converter command:  " + image_converter_parameters_list[0] + "does not exist.  Check the configuration file.")
+
+    ## Executing conversion
+    cmd = image_converter + " png " + tiff_file + ' ' + PNG_file
+
+    logging.debug(function_name + "cmd=" + cmd)
+    oShellProcess = subprocess.call(cmd, shell=True, stdout=out_fp, stderr=err_fp )
+
+    return(szPngURL)
+
+## Remove temporary PNG images file
+def rmTmpPngImages():
+
+    global config
+    function_name = "rmTmpPngImages:  "
+
+    tmp_path = config.get("Applications", "TmpDir")
+    ## Checking if path is found
+    if not os.path.isdir(tmp_path):
+        print "Content-type: text/html"
+        print
+        print "<html><pre>" + function_name + ":The logging file: " + tmp_path + " does not exist; check the configuration file</pre></html>"
+        sys.exit(function_name + ":The logging file:  " + tmp_path + " does not exist.  Check the configuration file.")
+
+    for file in os.listdir(tmp_path):
+        filename = tmp_path + file
+        if string.find(filename, 'msautotest') != -1:
+            logging.debug( function_name + "filename to remove: " + filename)
+            os.remove(filename)
+
+if __name__ == "__main__":
+    main()


Property changes on: trunk/msautotest/pymod/msautotest_viewer.py
___________________________________________________________________
Name: svn:executable
   + *



More information about the mapserver-commits mailing list