Changeset 1160


Ignore:
Timestamp:
12/06/06 22:00:36 (13 years ago)
Author:
astephen
Message:

A number of minor bug-fixes including full time validation in client.

Location:
TI03-DataExtractor/trunk
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • TI03-DataExtractor/trunk/authors_notes/svn_usage.sh

    r1153 r1160  
    22rm -fR /home/as56/sandboxes/dx/* 
    33svn co $SROOT/TI03-DataExtractor/trunk 
     4cd trunk 
    45cp -r /home/as56/abstractWebService/releases/dx/* ./ 
    56svn add * */* */*/* */*/*/* */*/*/*/* */*/*/*/*/* */*/*/*/*/*/* 
  • TI03-DataExtractor/trunk/authors_notes/svn_usage.sh~

    r1138 r1160  
    22rm -fR /home/as56/sandboxes/dx/* 
    33svn co $SROOT/TI03-DataExtractor/trunk 
     4cp -r /home/as56/abstractWebService/releases/dx/* ./ 
     5svn add * */* */*/* */*/*/* */*/*/*/* */*/*/*/*/* */*/*/*/*/*/* 
     6svn commit 
  • TI03-DataExtractor/trunk/cgi/dxui

    r1153 r1160  
    487487            self.displayer._displayHTMLHeader() 
    488488            self.displayer._displayDatasetSummaryLine(summaryString, optionCategories[0], self.sessionID) 
    489             self.displayer._displayMainTableHeader(self.sessionID) 
     489            self.displayer._displayMainTableHeader(self.sessionID, onSubmit=""" onSubmit='return validateAllTimeSelections()'""") 
    490490            self.displayer._displayDomainOptions(summaryDict, optionCategories, options, optionStrings, self.sessionID) 
    491491            self.displayer._displayMainTableFooter() 
     
    536536                self.displayer._displayHTMLHeader() 
    537537                self.displayer._displayProcessingSection(estimatedDuration, estimatedVolume, self.sessionID) 
    538                 pathList, self.secureToken=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])[0]           
    539                 print "<P>", pathList, len(pathList) 
    540                 self.displayer._displayOutputFileList(pathList[0][0])    
     538                pathList, self.secureToken=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])[0] 
     539                #print "<P>", pathList, len(pathList) 
     540                self.displayer._displayOutputFileList(pathList)  
    541541 
    542542 
  • TI03-DataExtractor/trunk/dist/cgi/dxui

    r1153 r1160  
    487487            self.displayer._displayHTMLHeader() 
    488488            self.displayer._displayDatasetSummaryLine(summaryString, optionCategories[0], self.sessionID) 
    489             self.displayer._displayMainTableHeader(self.sessionID) 
     489            self.displayer._displayMainTableHeader(self.sessionID, onSubmit=""" onSubmit='return validateAllTimeSelections()'""") 
    490490            self.displayer._displayDomainOptions(summaryDict, optionCategories, options, optionStrings, self.sessionID) 
    491491            self.displayer._displayMainTableFooter() 
     
    536536                self.displayer._displayHTMLHeader() 
    537537                self.displayer._displayProcessingSection(estimatedDuration, estimatedVolume, self.sessionID) 
    538                 pathList, self.secureToken=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])[0]           
    539                 print "<P>", pathList, len(pathList) 
    540                 self.displayer._displayOutputFileList(pathList[0][0])    
     538                pathList, self.secureToken=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])[0] 
     539                #print "<P>", pathList, len(pathList) 
     540                self.displayer._displayOutputFileList(pathList)  
    541541 
    542542 
  • TI03-DataExtractor/trunk/dxc/scripts/exampleCLClient1.py

    r1109 r1160  
    4242 
    4343print x 
    44 x=deUnicodeObject(x[0][0][0][0][0]) 
     44x=deUnicodeObject(x[0][0][0]) 
    4545 
    4646print "\n", x 
  • TI03-DataExtractor/trunk/dxc/scripts/exampleCLClient2.py

    r1109 r1160  
    3939 
    4040print x 
    41 x=deUnicodeObject(x[0][0][0][0][0]) 
    42 print "Output file is:", x.replace(OUTPUT_DIR_URL_PATH, OUTPUT_DIR_LOCAL_PATH) 
     41x=deUnicodeObject(x[0][0][0]) 
     42print "\nOutput file is:", x.replace(OUTPUT_DIR_URL_PATH, OUTPUT_DIR_LOCAL_PATH) 
    4343 
  • TI03-DataExtractor/trunk/dxc/scripts/exampleCLClient3.py

    r1153 r1160  
    2929 
    3030print "\nvar selected, domain options..." 
    31 print server.selectOptions(sessionID, [["secureToken",secureToken], ["variable_1.1.1","pqn"]]) 
     31print server.selectOptions(sessionID, [["secureToken",secureToken], ["variable_1.1.1","var2"]]) 
    3232 
    3333print "\ndomain selected, format options..."  
     
    3535 
    3636print "\nformat selected, remaining options...?" 
    37 print server.selectOptions(sessionID, [["secureToken",secureToken], ["outputFormat_1.1.1", "NetCDF"]]) 
     37print server.selectOptions(sessionID, [["secureToken",secureToken], ["outputFormat_1.1.1", "CSML/NetCDF"]]) 
    3838print sessionID 
    3939print "\ncomplete" 
     
    4444 
    4545print x 
    46 x=deUnicodeObject(x[0][0][0][0][0]) 
     46x=deUnicodeObject(x[0][0]) 
    4747 
    4848print "\n", x 
    49 print "\nOutput file is:", x.replace(OUTPUT_DIR_URL_PATH, OUTPUT_DIR_LOCAL_PATH) 
     49print "\nOutput files are:" 
     50for f in x: 
     51    print f.replace(OUTPUT_DIR_URL_PATH, OUTPUT_DIR_LOCAL_PATH) 
    5052 
  • TI03-DataExtractor/trunk/dxs/bin/DXWSInterface.py

    r1153 r1160  
    211211    secureToken=controller.secureToken 
    212212    print controller.bag 
    213     pathList=[controller.bag["outputFilePaths"]] 
    214     return [[pathList], [secureToken]] 
     213    pathList=controller.bag["outputFilePaths"] 
     214    return [pathList, secureToken] 
    215215 
    216216 
  • TI03-DataExtractor/trunk/pydxc/DisplayManager.py

    r1153 r1160  
    126126 
    127127         
    128     def _displayMainTableHeader(self, sessionID): 
     128    def _displayMainTableHeader(self, sessionID, onSubmit=""): 
    129129        """ 
    130130        Prints the header part of the main table used in the dx 
     
    135135        print '<TABLE WIDTH="100%"><TR class="tablerow"><TD>FURTHER SELECTION</TD></TR></TABLE>' 
    136136        # Begin form in HTML output 
    137         print """<FORM NAME="extract_info" method="POST" action="%s">""" % CGI_SCRIPT_URL_PATH 
     137        print """<FORM NAME="extract_info" method="POST" action="%s"%s>""" % (CGI_SCRIPT_URL_PATH, onSubmit) 
    138138 
    139139        print '<TABLE WIDTH="100%"><TR>' 
     
    10761076            if localPath=="...": 
    10771077                print """<TR class="tablerow"><TD COLSPAN="3">...</TD>""" 
     1078            elif url[-3:]=="xml": # No visualise for XML 
     1079                print """<TR class="tablerow"> 
     1080                         <TD><B>%s</B></TD> 
     1081                         <TD><A HREF="%s">  Download  </A></TD> 
     1082                         <TD></TD> 
     1083                     </TR>""" % (url, url)               
    10781084            else: 
    10791085                print """<TR class="tablerow"> 
  • TI03-DataExtractor/trunk/pydxc/common.py

    r1109 r1160  
    114114     
    115115     
     116def deleteDictSubsetMatching(dct, pattern, mode="string match"): 
     117    """ 
     118    Deletes any items in the dictionary subset matched when calling 
     119    getDictSubsetMatching above. Returns the number of items deleted. 
     120    """ 
     121    subdict=getDictSubsetMatching(dct, pattern, mode) 
     122    counter=0; 
     123    for key in subdict.keys(): 
     124        del dct[key] 
     125        counter=counter+1 
     126    return counter 
     127     
    116128 
    117129def translateURI(uri): 
  • TI03-DataExtractor/trunk/pydxc/jsFunctions.py

    r1153 r1160  
    107107 
    108108function validateTimeSelections(arg) { 
    109     // validates the specified time selections 
    110     var mainForm=document.forms["extract_info"]; 
    111     if (arg=="all") { 
    112         return true; 
    113     } else { 
     109        // validates the specified time selections 
     110        var mainForm=document.forms["extract_info"]; 
    114111        var axis=arg; 
     112        var unchanged=true; 
    115113        // select items named as follows...NAME="axis_1.1.1.1_high.time.day" 
    116114        var axisLow=arg+"_low.time."; 
     
    128126        var minTime=minValues[getByIndex(minNames, arg)]; 
    129127 
    130         if (isEarlierThan(lowTime, minTime)==true) {  lowTime=minTime; } 
    131         if (isEarlierThan(highTime, minTime)==true) { highTime=minTime; } 
    132         if (isLaterThan(lowTime, maxTime)==true) {    lowTime=maxTime; } 
    133         if (isLaterThan(highTime, maxTime)==true) {   highTime=maxTime; } 
    134         if (isEarlierThan(highTime, lowTime)==true) { highTime=lowTime; } 
     128        if (isEarlierThan(lowTime, minTime)==true) {  lowTime=minTime; unchanged=false; } 
     129        if (isEarlierThan(highTime, minTime)==true) { highTime=minTime; unchanged=false; } 
     130        if (isLaterThan(lowTime, maxTime)==true) {    lowTime=maxTime; unchanged=false; } 
     131        if (isLaterThan(highTime, maxTime)==true) {   highTime=maxTime; unchanged=false; } 
     132        if (isEarlierThan(highTime, lowTime)==true) { highTime=lowTime; unchanged=false; } 
    135133 
    136134        setTimeSelections(axisHigh, highTime); 
    137135        setTimeSelections(axisLow, lowTime); 
    138     } 
     136         
     137        // Return true if nothing changed and false if changes made 
     138        return unchanged; 
    139139} 
    140140 
    141141function validateAllTimeSelections() { 
    142142    // validates all time selections 
     143    var mainForm=document.forms["extract_info"]; 
     144    var axisNames=minNames; 
     145    for (var i=0; i<axisNames.length; i++) { 
     146        axName=axisNames[i]; 
     147        if (validateTimeSelections(axName)==false) { 
     148            alert("Axis '"+axName+"' held an invalid entry and has been modified. Please check and re-submit."); 
     149            return false; 
     150        } 
     151    }  
    143152    return true; 
    144153} 
  • TI03-DataExtractor/trunk/pydxs/DXController.py

    r1109 r1160  
    243243         
    244244        # Add the rest of the arguments to the session object 
     245        tempbag={} 
    245246        for key in self.args.keys():  
    246             self.bag[key]=self.args[key]  
    247  
     247            # Do some strict tidying of existing object 
     248            matchFields=["datasetGroup", "dataset", "variable", "axis", "outputFormat"] 
     249            goDeeper=0 
     250            for matchField in matchFields: 
     251                if key.find(matchField+"_")==0 or goDeeper==1: 
     252                    deleteDictSubsetMatching(self.bag, r"%s_\d+" % matchField, "regex") 
     253                    goDeeper=1 
     254                     
     255            tempbag[key]=self.args[key]  
     256 
     257        # Now the tempbag has all we need we can add to self.bag 
     258        for key, value in tempbag.items(): 
     259            self.bag[key]=value 
     260         
    248261        # Might need username later 
    249262        if self.bag.has_key("username"): 
     
    304317        durationDict=outputManager.getOutputDurationEstimates() 
    305318         
    306         outputFilePaths=[] 
    307         outputSize=0 
    308         duration=0 
    309          
    310         for key in pathDict.keys(): 
    311             outputSize=outputSize+sizeDict[key] 
    312             duration=duration+durationDict[key] 
    313             outputFilePaths=outputFilePaths+pathDict[key] 
    314              
    315         self.bag["outputFilePaths"]=outputFilePaths     
     319        (outputFilePaths, outputSize, duration)=constructOutputInformation(pathDict, sizeDict, durationDict) 
     320        self.bag["outputFilePaths"]=outputFilePaths 
    316321             
    317322        if costOnly==1: 
     
    320325        print """Should really fork this process at this point so that we can return  
    321326              something if likely to be large job.""" 
    322         outputManager.createOutputs()  
     327        outputManager.createOutputs() 
     328        pathDict=outputManager.getOutputFilePathDict() 
     329        sizeDict=outputManager.getOutputSizes() 
     330        durationDict=outputManager.getOutputDurationEstimates() 
     331         
     332        (outputFilePaths, outputSize, duration)=constructOutputInformation(pathDict, sizeDict, durationDict) 
     333        self.bag["outputFilePaths"]=outputFilePaths 
     334         
    323335 
    324336 
  • TI03-DataExtractor/trunk/pydxs/OptionHandler.py

    r1153 r1160  
    148148            self.options=self._getDomainOptions()+self._getFormatOptions() 
    149149 
    150         elif not keyPatternMatch(self.bag, "axis_1"): 
     150        elif not keyPatternMatch(self.bag, "axis_"): 
    151151            self.options=self._getDomainOptions()        
    152152 
  • TI03-DataExtractor/trunk/pydxs/OutputManager.py

    r1153 r1160  
    190190                     
    191191                print "\n\n\n", (MAX_FILE_SIZE*(2**20)), sizeOfRequest, ONE_FILE_PER_TIMESTEP 
     192                 
    192193                if mode=="file names": 
    193194                    fileNamer=FileNames(datasetGroup=datasetGroup, dataset=dataset, timeSteps=timeStepStringList,  
     
    195196                                    basedir=self.outputDir) 
    196197                    outputFilePathList=fileNamer.createFileNameList() 
     198                     
     199                    if isinstance(dataFileHandler, CSMLDataHandler): 
     200                        # CSML special case, just make first file the xml with copy of first .nc name 
     201                        ncPath=outputFilePathList[0] 
     202                        csmlPath=os.path.splitext(ncPath)[0]+".xml" 
     203                        outputFilePathList.insert(0, csmlPath) 
    197204                 
    198205                elif mode=="create outputs": 
    199206                    # Now get the real data 
     207                     
    200208                    outputHandler=self._getOutputHandler(outputFormat, dataFileHandler) 
    201                      
    202209                    outputFilePathList=[] 
     210                     
    203211                    for timeStep in timeStepStringList: 
    204212                        fileNamer=FileNames(datasetGroup=datasetGroup, dataset=dataset, timeSteps=[timeStep],  
     
    228236                                    fileFormat=outputFormat, variables=[varID], 
    229237                                    basedir=self.outputDir) 
    230                 outputFilePathList=fileNamer.createFileNameList()        
    231                  
     238                outputFilePathList=fileNamer.createFileNameList() 
     239                         
     240                if isinstance(dataFileHandler, CSMLDataHandler): 
     241                    ncPath=outputFilePathList[0] 
     242                    csmlPath=os.path.splitext(ncPath)[0]+".xml" 
     243                    outputFilePathList.insert(0, csmlPath) 
     244                                 
    232245                if mode=="create outputs": 
    233246                    # Now get the real data 
     
    237250                    if isinstance(dataFileHandler, CSMLDataHandler): 
    238251                        # CSML needs subsetting in one go 
    239                         ncPath=outputFilePath 
    240                         csmlPath=os.path.splitext(ncPath)[0]+".xml" 
    241                         outputFilePathList.insert(0, csmlPath) 
     252                        #ncPath=outputFilePath 
     253                        #csmlPath=os.path.splitext(ncPath)[0]+".xml" 
     254                        #outputFilePathList.insert(0, csmlPath) 
    242255                        dataFileHandler.subsetVariableToCSMLNC(datasetURI, varID, axisSelectionDict, csmlPath, ncPath) 
    243256                        print "\nWrote variable '%s' to output files: %s, %s" % (varID, csmlPath, ncPath) 
     
    253266     
    254267            self.varDict[varCount]=(datasetURI, varID, sizeOfRequest, outputFormat, outputFilePathList[:]) 
     268            print "\n\n", outputFilePathList, "\n\n" 
    255269            varCount=varCount+1 
    256270 
     
    465479    print "\n\nCSML test!\n" 
    466480    x=OutputManager({'username':None, 'variable_1.1.1':'var2',  
    467                      'outputFormat_1.1.1':'NetCDF', 'userRoles':[],  
     481                     'outputFormat_1.1.1':'CSML/NetCDF', 'userRoles':[],  
    468482                     'datasetGroup_1':'CSML test dataset group',  
    469483                     'axis_1.1.1.3':(0, 35), 'dataset_1.1':'CSML test dataset great test'}) 
  • TI03-DataExtractor/trunk/pydxs/common.py

    r1153 r1160  
    133133                rtdict[key]=dct[key]         
    134134    return rtdict 
     135 
     136     
     137def deleteDictSubsetMatching(dct, pattern, mode="string match"): 
     138    """ 
     139    Deletes any items in the dictionary subset matched when calling 
     140    getDictSubsetMatching above. Returns the number of items deleted. 
     141    """ 
     142    subdict=getDictSubsetMatching(dct, pattern, mode) 
     143    counter=0; 
     144    for key in subdict.keys(): 
     145        del dct[key] 
     146        counter=counter+1 
     147    return counter 
     148     
     149     
     150def constructOutputInformation(pathDict, sizeDict, durationDict): 
     151    """ 
     152    Constructs some output information to return to the client. 
     153    """ 
     154    outputFilePaths=[] 
     155    outputSize=0 
     156    duration=0 
     157         
     158    for key in pathDict.keys(): 
     159        outputSize=outputSize+sizeDict[key] 
     160        duration=duration+durationDict[key] 
     161        outputFilePaths=outputFilePaths+pathDict[key] 
     162         
     163    return (outputFilePaths, outputSize, duration) 
    135164 
    136165 
Note: See TracChangeset for help on using the changeset viewer.