Changeset 1153 for TI03-DataExtractor


Ignore:
Timestamp:
12/06/06 01:08:17 (13 years ago)
Author:
astephen
Message:

Latest version with javascript select all in the GUI, date/time
javascript checking (needs onsubmit), cleaned up selection by domain.

Location:
TI03-DataExtractor/trunk
Files:
33 added
31 edited

Legend:

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

    r1138 r1153  
    11cd /home/as56/sandboxes/dx 
    2 #rm -fR /home/as56/sandboxes/dx/* 
    3 #svn co $SROOT/TI03-DataExtractor/trunk 
    4 cd trunk 
     2rm -fR /home/as56/sandboxes/dx/* 
     3svn co $SROOT/TI03-DataExtractor/trunk 
    54cp -r /home/as56/abstractWebService/releases/dx/* ./ 
    65svn add * */* */*/* */*/*/* */*/*/*/* */*/*/*/*/* */*/*/*/*/*/* 
  • TI03-DataExtractor/trunk/cgi/dxui

    r1109 r1153  
    393393            action=self.args["action"] 
    394394            if action=="viewRequestSummary": 
    395                 summary=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0] 
     395                summaryString=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0][0][0] 
    396396                self.displayer._displayHTTPHeader()  
    397397                self.displayer._displayHTMLHeader() 
    398                 self.displayer._displayRequestSummaryTable(summary) 
     398                self.displayer._displayRequestSummaryTable(createSummaryDict(summaryString)) 
    399399                self.displayer._displayReturnLine(self.sessionID) 
    400400                return "Display footer then complete" 
     
    431431            tp=self.args["targetPage"] 
    432432            tp2catMap={"DatasetGroupPage":"datasetGroup", "DatasetPage":"dataset", 
    433                        "VariablesPage":"variable", "DomainPage":"horizontalDomain"} 
     433                       "VariablesPage":"variable", "DomainAndFormatPage":"domainAndFormat"} 
    434434            optionCategory=tp2catMap[tp] 
    435             response=self.server.callServerMethod("getOptions", [self.sessionID, self.secureToken, optionCategory]) 
    436         else:   
    437             response=self.server.callServerMethod("selectOptions", [self.sessionID, self._packArgsAsList(self.args)]) 
     435            self.args["optionCategoryRequested"]=optionCategory 
     436            # Need to delete targetPage otherwise it will stay forever 
     437            del self.args["targetPage"] 
     438        response=self.server.callServerMethod("selectOptions", [self.sessionID, self._packArgsAsList(self.args)]) 
    438439         
    439440        #self.displayer._displayHTTPHeader() 
     
    487488            self.displayer._displayDatasetSummaryLine(summaryString, optionCategories[0], self.sessionID) 
    488489            self.displayer._displayMainTableHeader(self.sessionID) 
    489             self.displayer._displayDomainOptions(summaryDict, optionCategories, options, optionStrings, self.sessionID)      
     490            self.displayer._displayDomainOptions(summaryDict, optionCategories, options, optionStrings, self.sessionID) 
    490491            self.displayer._displayMainTableFooter() 
    491492         
     
    536537                self.displayer._displayProcessingSection(estimatedDuration, estimatedVolume, self.sessionID) 
    537538                pathList, self.secureToken=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])[0]           
     539                print "<P>", pathList, len(pathList) 
    538540                self.displayer._displayOutputFileList(pathList[0][0])    
    539541 
  • TI03-DataExtractor/trunk/dist/cgi/dxui

    r1109 r1153  
    393393            action=self.args["action"] 
    394394            if action=="viewRequestSummary": 
    395                 summary=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0] 
     395                summaryString=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0][0][0] 
    396396                self.displayer._displayHTTPHeader()  
    397397                self.displayer._displayHTMLHeader() 
    398                 self.displayer._displayRequestSummaryTable(summary) 
     398                self.displayer._displayRequestSummaryTable(createSummaryDict(summaryString)) 
    399399                self.displayer._displayReturnLine(self.sessionID) 
    400400                return "Display footer then complete" 
     
    431431            tp=self.args["targetPage"] 
    432432            tp2catMap={"DatasetGroupPage":"datasetGroup", "DatasetPage":"dataset", 
    433                        "VariablesPage":"variable", "DomainPage":"horizontalDomain"} 
     433                       "VariablesPage":"variable", "DomainAndFormatPage":"domainAndFormat"} 
    434434            optionCategory=tp2catMap[tp] 
    435             response=self.server.callServerMethod("getOptions", [self.sessionID, self.secureToken, optionCategory]) 
    436         else:   
    437             response=self.server.callServerMethod("selectOptions", [self.sessionID, self._packArgsAsList(self.args)]) 
     435            self.args["optionCategoryRequested"]=optionCategory 
     436            # Need to delete targetPage otherwise it will stay forever 
     437            del self.args["targetPage"] 
     438        response=self.server.callServerMethod("selectOptions", [self.sessionID, self._packArgsAsList(self.args)]) 
    438439         
    439440        #self.displayer._displayHTTPHeader() 
     
    487488            self.displayer._displayDatasetSummaryLine(summaryString, optionCategories[0], self.sessionID) 
    488489            self.displayer._displayMainTableHeader(self.sessionID) 
    489             self.displayer._displayDomainOptions(summaryDict, optionCategories, options, optionStrings, self.sessionID)      
     490            self.displayer._displayDomainOptions(summaryDict, optionCategories, options, optionStrings, self.sessionID) 
    490491            self.displayer._displayMainTableFooter() 
    491492         
     
    536537                self.displayer._displayProcessingSection(estimatedDuration, estimatedVolume, self.sessionID) 
    537538                pathList, self.secureToken=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])[0]           
     539                print "<P>", pathList, len(pathList) 
    538540                self.displayer._displayOutputFileList(pathList[0][0])    
    539541 
  • TI03-DataExtractor/trunk/dxc/scripts/exampleCLClient3.py

    r1109 r1153  
    11#!/usr/bin/env python 
    22import sys 
    3 #sys.path=sys.path+["..","scripts","../..",".", "../../pydxc"] 
     3sys.path=sys.path+["..","scripts","../..",".", "../../pydxc"] 
    44 
    5 raise "THIS DOESN'T YET WORK!!!" 
     5print "Testing CSML hooks...\n" 
    66 
    77#import readline 
     
    1010from pydxc.clientConfig import SOAP_SERVER_URL 
    1111 
    12  
    13 def show(func): 
    14     x=func 
    15     print x 
    16     return x 
    17            
    1812# start session 
    1913server = Binding(url=SOAP_SERVER_URL) 
    2014(sessionID, secureToken)=server.startSession("jane", "jane1")[0] 
     15print sessionID 
    2116 
    22 choices=show(server.getDatasetGroupOptions(sessionID, secureToken)) 
    23 selection=choices[0][0][0][0] 
    24 print "\nSelection:", selection,"\n\n" 
    25 choices=show(server.makeDatasetGroupSelections(sessionID, secureToken, [selection])) 
     17print "\nsummary" 
     18print server.summariseRequest(sessionID, secureToken) 
    2619 
    27 choices=show(server.getDatasetOptions(sessionID, secureToken)) 
    28 selection=choices[1][0][0] 
    29 print selection,"\n\n" 
    30 choices=show(server.makeDatasetSelections(sessionID, secureToken, [selection])) 
     20print "\noptions" 
     21print server.getOptions(sessionID, secureToken) 
     22print sessionID 
    3123 
    32 choices=show(server.getVariableOptions(sessionID, secureToken)) 
    33 selection=choices[1][0][0] 
    34 print selection,"\n\n" 
    35 choices=show(server.makeVariableSelections(sessionID, secureToken, [selection])) 
     24print "\ndsg selected, ds options..." 
     25print server.selectOptions(sessionID, [["secureToken",secureToken], ["datasetGroup_1",'CSML test dataset group']]) 
    3626 
     27print "\nds selected, var options..." 
     28print server.selectOptions(sessionID, [["secureToken",secureToken], ["dataset_1.1",'CSML test dataset great test']]) 
    3729 
     30print "\nvar selected, domain options..." 
     31print server.selectOptions(sessionID, [["secureToken",secureToken], ["variable_1.1.1","pqn"]]) 
    3832 
    39 sys.exit() 
    40 print "dsg" 
    41 print server.selectOptions(sessionID, [["secureToken",secureToken], ["datasetGroup_1","Test Data Group 1"]]) 
    42 print "ds" 
    43 print server.selectOptions(sessionID, [["secureToken",secureToken], ["dataset_1","Test Dataset 1"]]) 
    44 print "v" 
    45 print server.selectOptions(sessionID, [["secureToken",secureToken], ["variable_1","pqn"]]) 
    46 print "horiz" 
    47 print server.selectOptions(sessionID, [["secureToken",secureToken], ["horizontalDomain",(90,0,0,90)]]) 
    48 print "vert" 
    49 print server.selectOptions(sessionID, [["secureToken",secureToken], ["verticalDomain_1",("Single level",)]]) 
    50 print "options" 
    51 print server.getOptions(sessionID, secureToken) 
    52 print "time"  
    53 print server.selectOptions(sessionID, [["secureToken",secureToken], ["temporalDomain_1",[[1999,1,1,0,0,0],[1999,1,1,0,0,0],[1., "hour"]]]]) 
    54 print "format" 
    55 print server.selectOptions(sessionID, [["secureToken",secureToken], ["outputFormat", "NetCDF"]]) 
    56 print "complete" 
     33print "\ndomain selected, format options..."  
     34print server.selectOptions(sessionID, [["secureToken",secureToken], ["axis_1.1.1.1",[[2006,05,15,12,0,0],[2006,06,15,12,0,0]]], ["axis_1.1.1.2", [20,50]]]) 
     35 
     36print "\nformat selected, remaining options...?" 
     37print server.selectOptions(sessionID, [["secureToken",secureToken], ["outputFormat_1.1.1", "NetCDF"]]) 
     38print sessionID 
     39print "\ncomplete" 
    5740print server.isComplete(sessionID, secureToken) 
    58 print "cost" 
    59 print server.getExtractionCosts(sessionID, secureToken) 
    60 print "output" 
     41 
     42print "\noutput" 
    6143x=server.createOutput(sessionID, secureToken) 
     44 
    6245print x 
    63 x=deUnicodeObject(x[0][0][0]) 
    64 print "Output file is:", x.replace(OUTPUT_DIR_URL_PATH, OUTPUT_DIR_LOCAL_PATH) 
     46x=deUnicodeObject(x[0][0][0][0][0]) 
    6547 
     48print "\n", x 
     49print "\nOutput file is:", x.replace(OUTPUT_DIR_URL_PATH, OUTPUT_DIR_LOCAL_PATH) 
     50 
  • TI03-DataExtractor/trunk/dxs/bin/DXWSInterface.py

    r1109 r1153  
    263263        return str(error)    
    264264 
    265     req=controller.bag 
    266      
    267     summaryString="\n"+"*"*40 
     265    #req=controller.bag 
     266    summaryString=createSummaryString(controller.bag) 
     267    """summaryString="\n"+"*"*40 
    268268    summaryString=summaryString+"\nSummary of current request follows\n" 
    269269    summaryString=summaryString+"*"*40+"\n\n"  
     
    274274    for key in req.keys(): 
    275275        if req[key]!="" and key not in exclusions:   
    276             summaryString=summaryString+("%s:\t%s\n" % (key, req[key])) 
     276            summaryString=summaryString+("%s:\t%s\n" % (key, req[key]))""" 
    277277 
    278278    secureToken=controller.secureToken   
  • TI03-DataExtractor/trunk/dxs/testdata/csml1.xml

    r1138 r1153  
    11<Dataset xmlns="http://ndg.nerc.ac.uk/csml"  xmlns:gml="http://www.opengis.net/gml" xmlns:om="http://www.opengis.net/om" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://ndg.nerc.ac.uk/csml/XMLSchemas/CSMLAppSchema.xsd" gml:id="temp"> 
    22   <gml:metaDataProperty xlink:href="http://ndg.nerc.ac.uk/Metadatatemp"></gml:metaDataProperty> 
    3    <gml:description>CSML test dataset for DX</gml:description> 
    4    <gml:name>DXMeetsCSML</gml:name> 
     3   <gml:description>Dataset for directory temp</gml:description> 
     4   <gml:name>temp</gml:name> 
    55   <NetCDFExtract gml:id="1__ncextract_latitude"> 
    66      <arraySize>37</arraySize> 
    7       <fileName>/usr/local/test/dxs/testdata/var1.nc</fileName> 
     7      <fileName>/usr/local/test/dxs/testdata/csmlnc1.nc</fileName> 
    88      <variableName>latitude</variableName> 
    99   </NetCDFExtract> 
    1010   <NetCDFExtract gml:id="1__ncextract_bound"> 
    1111      <arraySize>2</arraySize> 
    12       <fileName>/usr/local/test/dxs/testdata/var1.nc</fileName> 
     12      <fileName>/usr/local/test/dxs/testdata/csmlnc1.nc</fileName> 
    1313      <variableName>bound</variableName> 
    1414   </NetCDFExtract> 
    1515   <NetCDFExtract gml:id="1__ncextract_longitude"> 
    1616      <arraySize>72</arraySize> 
    17       <fileName>/usr/local/test/dxs/testdata/var1.nc</fileName> 
     17      <fileName>/usr/local/test/dxs/testdata/csmlnc1.nc</fileName> 
    1818      <variableName>longitude</variableName> 
    1919   </NetCDFExtract> 
    2020   <NetCDFExtract gml:id="1__ncextract_time"> 
    2121      <arraySize>1</arraySize> 
    22       <fileName>/usr/local/test/dxs/testdata/var1.nc</fileName> 
     22      <fileName>/usr/local/test/dxs/testdata/csmlnc1.nc</fileName> 
    2323      <variableName>time</variableName> 
    2424   </NetCDFExtract> 
    2525   <gml:FeatureCollection> 
    2626      <gml:featureMember> 
    27          <GridSeriesFeature gml:id="pqn"> 
    28             <gml:description>My test variable</gml:description> 
     27         <GridSeriesFeature gml:id="var2"> 
     28            <gml:description>Another greate variable [wekn]</gml:description> 
    2929            <gml:rangeSet> 
    3030               <AggregatedArray> 
    31                   <arraySize>5328</arraySize> 
     31                  <arraySize>2664</arraySize> 
    3232                  <uom>dimensionless or units not determined</uom> 
    3333                  <aggType>new</aggType> 
     
    3535                  <component> 
    3636                     <NetCDFExtract> 
    37                         <arraySize>2 37 72</arraySize> 
    38                         <fileName>/usr/local/test/dxs/testdata/var1.nc /usr/local/test/dxs/testdata/var1.nc</fileName> 
    39                         <variableName>pqn</variableName> 
     37                        <arraySize>1 37 72</arraySize> 
     38                        <fileName>/usr/local/test/dxs/testdata/csmlnc1.nc /usr/local/test/dxs/testdata/csmlnc2.nc</fileName> 
     39                        <variableName>var2</variableName> 
    4040                     </NetCDFExtract> 
    4141                  </component> 
     
    4747            <GridSeriesDomain> 
    4848               <domainReference> 
    49                   <gml:TimePositionList>1999-1-1T0:0:0.0 1999-1-1T6:0:0.0</gml:TimePositionList> 
     49                  <gml:TimePositionList>2006-5-15T12:0:0.0 2006-6-15T12:0:0.0</gml:TimePositionList> 
    5050               </domainReference> 
    5151               <domainComplement> 
  • TI03-DataExtractor/trunk/pydxc/DisplayManager.py

    r1109 r1153  
    226226         
    227227        itemTitle=itemMap[optionCategories[0].split("_")[0]] 
    228         print "<P><B>PLEASE SELECT: %s</B><P>" % itemTitle  
     228        print '<P><B>PLEASE SELECT: %s</B> (<A NAME="selectAll" onclick="selectAllCheckBoxes()">  select all </A> / <A NAME="deSelectAll" onclick="deSelectAllCheckBoxes()">( deselect all </A> )<P>' % itemTitle  
     229         
     230        # Insert useful select all javascript function for checkboxes 
     231        print jsFunctions.js_selectAllCheckBoxes 
     232        print jsFunctions.js_deSelectAllCheckBoxes 
    229233         
    230234        if itemTitle=="Dataset Group": 
     
    254258                    if discoveryMetadataLink.lower()!="undefined": 
    255259                        print '&nbsp;<A HREF="%s">[ Discovery Metadata ]</A>' % discoveryMetadataLink 
     260                 
    256261 
    257262        elif itemTitle=="Dataset": 
     
    282287 
    283288        elif itemTitle=="Variable": 
     289                # Set up hidden option to direct client to call for domain options so it will get format as well 
     290                print '<INPUT TYPE="hidden" NAME="targetPage" VALUE="DomainAndFormatPage">'  
     291                 
    284292                selectionIDs=optionCategories 
    285293                itemValues=[i[0] for i in options] 
     
    293301                    itemName=itemNames[i] 
    294302                    itemValue=itemValues[i] 
     303                    # Quick fudge for strange itemValue that is actually a list 
     304                    try:                     
     305                        if type(itemValue)==type([]): 
     306                            itemValue=itemValue[0] 
     307                    except: 
     308                        pass 
    295309 
    296310                    (dsgKey, dsKey)=re.match("variable_(\d+)\.(\d+)\.", selectionID).groups() 
     
    305319                    else: 
    306320                        print '<BR><INPUT TYPE="checkBox" NAME="%s" VALUE="%s">%s</INPUT>' % (selectionID, itemName, itemValue)                      
     321                    lastDataset=dataset  
     322                    lastDatasetGroup=datasetGroup 
    307323                     
    308                     lastDataset=dataset  
    309                     lastDatasetGroup=datasetGroup            
    310324             
    311325    def _displayDomainOptions(self, summaryDict, optionCategories, options, optionStrings, sessionID): 
     
    313327        Displays the domain options for each variable. 
    314328        """      
     329        axisBucket=[[],[],[]] 
     330        formatDict={} 
     331        counter=0 
     332        for item in optionCategories: 
     333            if item[:4]=="axis": 
     334                axisBucket[0].append(item) 
     335                axisBucket[1].append(options[counter]) 
     336                axisBucket[2].append(optionStrings[counter]) 
     337            elif item[:6]=="output": 
     338                formatDict[item]=options[counter] 
     339            counter=counter+1 
     340             
     341        (optionCategories, options, optionStrings)=axisBucket 
     342        #print "<P>", formatDict, "<P>", optionCategories 
    315343        print "<P><B>PLEASE SELECT: Domain options</B><P>"       
    316344        print "<TABLE>" 
    317345        print """<TR CLASS="tablestyle"> 
    318346                        <TD><B>AXIS NAME</B></TD> 
    319                         <TD><B>AXIS ID</B></TD> 
    320347                        <TD><B>RECOGNISED AS</B></TD> 
    321348                        <TD><B>UNITS</B></TD> 
     
    324351         
    325352        # Predefine what we need for the axis selection in terms of interfaces... 
    326         knownAxisDict={} 
     353        knownAxisDict={}                 
    327354                 
    328355        # Loop through keys to get the number of variables 
    329356        axisDict={} 
     357         
     358        # Create some lists to collect time axis info for time validation functions 
     359        minNames=[] 
     360        minValues=[] 
     361        maxValues=[]     
     362         
    330363        for i in range(len(optionCategories)): 
    331364            optionName=optionCategories[i] 
     
    339372            if knownAxis in ("time", "latitude", "longitude"): 
    340373                axisDict[varIndex][knownAxis]=axisIndex 
     374                if knownAxis=="time": 
     375                    startTime=getDateTimeComponents(items[6]) 
     376                    endTime=getDateTimeComponents(items[7]) 
     377                    minNames.append(optionName) 
     378                    minValues.append(startTime[:]) 
     379                    maxValues.append(endTime[:]) 
    341380             
    342381            axisDict[varIndex]["axes"].append([optionName, items]) 
     
    346385        #print axisDictKeys 
    347386         
     387        # Now print javascript time functions if needed 
     388        if len(minNames)>0: 
     389            minNames=str(minNames) 
     390            minValues=str([list(lst) for lst in minValues]) 
     391            maxValues=str([list(lst) for lst in maxValues]) 
     392            print jsFunctions.js_timeValidationFunctions % (minNames, minValues, maxValues) 
     393         
    348394        for key in axisDictKeys: 
    349395 
     
    352398            datasetGroup=summaryDict["datasetGroups"][dsgKey] 
    353399            dataset=summaryDict["datasets"]["%s.%s" % (dsgKey, dsKey)] 
    354             print """<TR><TD COLSPAN="8">&nbsp;</TD></TR>"""     
    355             print """<TR CLASS="tablestyle"><TD COLSPAN="8"><B>%s -&gt; %s -&gt; %s</TD></TR>""" % (datasetGroup, dataset, varID)            
     400            print """<TR><TD COLSPAN="7">&nbsp;</TD></TR>"""     
     401            print """<TR CLASS="tablestyle"><TD COLSPAN="7"><B>%s -&gt; %s -&gt; %s</TD></TR>""" % (datasetGroup, dataset, varID)            
    356402         
    357403            d=axisDict[key] 
     
    408454                      
    409455                    print """<TR><TD WIDTH="20%%"><B>%s</B></TD> 
    410                      <TD WIDTH="30%%">%s</TD> 
    411456                     <TD>%s</TD> 
    412457                     <TD>%s</TD> 
    413458                     <TD></TD>                                
    414                      <TD><INPUT TYPE="text" NAME="%s" VALUE="%s"/></TD> 
     459                     <TD><INPUT TYPE="text" NAME="%s" VALUE="%s"/><BR></TD> 
    415460                     <TD><B></B></TD> 
    416                      </TR>""" % (latLongName, latOptionName, latKnownAxis, latUnits,  
     461                     <TD WIDTH="30%%"><FONT SIZE="-2"><B>NOTE ABOUT THE JAVA MAP APPLET:</B>  
     462<BR>1. The map will not work if you do not have Java enabled on your browser.</FONT></TD> 
     463                     </TR>""" % (latLongName, latKnownAxis, latUnits,  
    417464                                   latOptionName+"_high", northernExtent)   
    418465                                                                              
     466                                                                              
     467                    # Check existence of map applet page for this axis ID, otherwise make it 
     468                    mapHTMLFile=self._checkMapAppletHTMLPage(lonOptionName, latOptionName) 
     469                     
    419470                    print """<TR><TD WIDTH="20%%"><B>%s</B></TD> 
    420                      <TD WIDTH="30%%">%s</TD> 
    421471                     <TD>%s</TD> 
    422472                     <TD>%s</TD>                      
    423473                     <TD><INPUT TYPE="text" NAME="%s" VALUE="%s"/></TD> 
    424                      <TD><TABLE BORDER="0"><TR><TD ALIGN="LEFT">&nbsp;<B></B></TD><TD ALIGN="RIGHT"><B></B>&nbsp;</TD></TR></TABLE></TD>                      
     474                     <TD><TABLE BORDER="0"><TR><TD ALIGN="LEFT">&nbsp;<B></B></TD><TD><CENTER><B><input type="button" value="Select from map" 
     475    onClick="newWindow('%s','window2',550,400);"></CENTER></TD></TR></TABLE></TD>                     
    425476                     <TD><INPUT TYPE="text" NAME="%s" VALUE="%s"/></TD> 
    426                      </TR>""" % (lonLongName, lonOptionName, lonKnownAxis, lonUnits,  
    427                                    lonOptionName+"_low", westernExtent, lonOptionName+"_high", 
     477                     <TD><BR><FONT SIZE="-2">2. This applet is known not to work on certain browsers: Mozilla, Konqueror.</FONT></TD> 
     478                     </TR>""" % (lonLongName, lonKnownAxis, lonUnits,  
     479                                   lonOptionName+"_low", westernExtent, mapHTMLFile, lonOptionName+"_high", 
    428480                                   easternExtent)   
    429481                                                     
    430482                    print """<TR><TD WIDTH="20%%"><B>%s</B></TD> 
    431                      <TD WIDTH="30%%">%s</TD> 
    432483                     <TD>%s</TD> 
    433484                     <TD>%s</TD>                      
     
    435486                     <TD><INPUT TYPE="text" NAME="%s" VALUE="%s"/></TD> 
    436487                     <TD><B>&nbsp;</B></TD> 
    437                      </TR>""" % ("","","","",  
     488                     <TD><FONT SIZE="-2"> 
     489<BR>3. On some browsers you may have to select your subset twice before it registers.</FONT></TD> 
     490                     </TR>""" % ("","","",  
    438491                                   latOptionName+"_low", southernExtent)                     
    439492 
    440493                elif found.has_key("time") and axisIndex==found["time"]: 
    441494                    (start,end,intervalValue)=items[6:9] 
     495                     
     496                     
    442497                    print """<TR><TD WIDTH="20%%"><B>%s</B></TD> 
    443                      <TD WIDTH="30%%">%s</TD> 
    444498                     <TD>%s</TD> 
    445                      <TD>%s</TD>""" % (longName, optionName, knownAxis, units) 
     499                     <TD>%s</TD>""" % (longName, knownAxis, units) 
    446500 
    447501                    self._displayTemporalDomainMenus(start, end, intervalValue, units, optionName) 
    448                               
     502                    print """<TD><INPUT TYPE="button" NAME="validateTime" VALUE="Validate time selections" onClick='validateTimeSelections("%s")'/></TD></TR>""" % optionName 
     503                              
     504                            
    449505                    """<TD><INPUT TYPE="text" NAME="%s" VALUE="%s"/></TD> 
    450506                     <TD><TABLE BORDER="0"><TR><TD ALIGN="LEFT">&nbsp;<B>Low</B></TD><TD ALIGN="RIGHT"><B>High</B>&nbsp;</TD></TR></TABLE></TD>                       
    451507                     <TD><INPUT TYPE="text" NAME="%s" VALUE="%s"/></TD> 
    452                      </TR>""" % (optionName+"_low", start, optionName+"_high", end)    
     508                     </TR>""" #% (optionName+"_low", start, optionName+"_high", end)    
    453509                           
    454510                else: 
    455511                    start,end=items[6:8] 
    456512                    print """<TR><TD WIDTH="20%%"><B>%s</B></TD> 
    457                      <TD WIDTH="30%%">%s</TD> 
    458513                     <TD>%s</TD> 
    459514                     <TD>%s</TD>                      
     
    461516                     <TD><TABLE BORDER="0"><TR><TD ALIGN="LEFT">&lt;&nbsp;<B>Low</B></TD><TD ALIGN="RIGHT"><B>High</B>&nbsp;&gt;</TD></TR></TABLE></TD>               
    462517                     <TD><INPUT TYPE="text" NAME="%s" VALUE="%s"/></TD> 
    463                      </TR>""" % (longName, optionName, knownAxis, units,  
     518                     </TR>""" % (longName, knownAxis, units,  
    464519                     optionName+"_low", start, optionName+"_high", end)    
    465520 
    466521            # Fudge output format for now 
    467522            print """<TR><TD WIDTH="20%%"><B>OUTPUT FORMAT</B></TD>""" 
    468             print """<TD COLSPAN="4">Note that you should choose NetCDF format if you wish to visualise data.</TD>"""                 
     523            print """<TD COLSPAN="3">Note that you should choose NetCDF format if you wish to visualise data.</TD>"""                 
    469524            print '<TD COLSPAN="3"><SELECT NAME="outputFormat_%s">' % key 
    470             for format in ("NetCDF", "NASA Ames"): 
     525            for format in formatDict["outputFormat_%s" % varIndex]:#("NetCDF", "NASA Ames"): 
    471526                print "<OPTION>%s</OPTION>" % format 
    472527            print "</SELECT></TD>" 
     
    477532               &nbsp;Use multiple output files [ this is the default large files as limited by the server ].""" 
    478533                
     534 
     535    def  _checkMapAppletHTMLPage(self, lonAxisID, latAxisID): 
     536        """ 
     537        Generates a map applet HTML Page if one doesn't already exist.  
     538        """ 
     539        mapAppletTemplatePath=MAP_APPLET_TEMPLATE_LOCAL_PATH 
     540        (mapAppletDir, templateFile)=os.path.split(mapAppletTemplatePath) 
     541        axisNumbers=lonAxisID[5:]+"_"+latAxisID[5:] 
     542        axisMapHTMLPage=os.path.join(mapAppletDir, "map_%s.html" % axisNumbers) 
     543        if not os.path.isfile(axisMapHTMLPage): 
     544            template=open(mapAppletTemplatePath).read() 
     545            outfile=open(axisMapHTMLPage, "w") 
     546            outfile.write(template % (lonAxisID, lonAxisID, latAxisID, latAxisID)) 
     547            outfile.close() 
     548            os.chmod(axisMapHTMLPage, 0644) 
     549        urlToAxisMapHTMLPage=os.path.join(os.path.split(MAP_APPLET_TEMPLATE_URL_PATH)[0], os.path.split(axisMapHTMLPage)[-1]) 
     550        return urlToAxisMapHTMLPage 
     551 
    479552 
    480553    def _displayUploadForm(self, sessionID): 
     
    713786        #print '<TABLE BORDER="1"><TR>' 
    714787   
    715         print '<TD COLSPAN="3"><TABLE BORDER="1">' 
    716         for part in ("low", "", "high"): 
     788        print '<TD COLSPAN="3"><CENTER><TABLE BORDER="1">' 
     789         
     790        partMap={"low":"Start time", "high":"End time"} 
     791        for part in ("low", "gap", "high"): 
    717792             
    718             if part in ("Dataset %s: Start time" % axisIndex, "End time"): 
    719                 print '<TD COLSPAN="6">%s</TD>' % part 
    720             elif part=="": 
    721                 print "<TR><TD>&nbsp;</TD></TR>" 
     793            if part=="gap": 
     794                print '<TR><TD COLSPAN="6">&nbsp;</TD></TR>' 
    722795            else: 
    723796                print '<TR>' 
     
    728801                        print "<TD>%s</TD>" % key 
    729802                    elif part in ("low", "high"): 
    730                         print """<TD><SELECT NAME="%s_%s.time.%s" %s onChange="checkDate('%s_%s')">""" % (axisIndex,  
    731                                    part, key.lower(), fieldFlag, part, axisIndex) 
     803                        print """<TD><SELECT NAME="%s_%s.time.%s" %s>""" % (axisIndex,  
     804                                   part, key.lower(), fieldFlag) 
    732805                        if key=="year": 
    733806                            timeFormat="%.4d" 
     
    743816 
    744817                print "</TR>" 
    745         print "</TABLE></TD>" 
     818        print "</CENTER></TABLE></TD>" 
    746819 
    747820        #print "</TR></TABLE><P>" 
  • TI03-DataExtractor/trunk/pydxc/clientConfig.py

    r1109 r1153  
    181181CONFIRMATION_PAGE=1 
    182182 
    183 # MAP_APPLET_URL_PATH: 
    184 # URL of map applet HTML page 
    185 MAP_APPLET_URL_PATH="/dx_extras/LiveMap_30/extractorMap.html" 
     183# MAP_APPLET_TEMPLATE_URL_PATH: 
     184# URL of map applet HTML template page 
     185MAP_APPLET_TEMPLATE_URL_PATH=os.path.join(WEB_EXTRAS_URL_PATH, "maps/map_template.html") 
    186186 
     187# MAP_APPLET_TEMPLATE_LOCAL_PATH: 
     188# Local path to map applet HTML template page 
     189MAP_APPLET_TEMPLATE_LOCAL_PATH=os.path.join(WEB_EXTRAS_LOCAL_PATH, "maps/map_template.html") 
  • TI03-DataExtractor/trunk/pydxc/jsFunctions.py

    r794 r1153  
    1616# inserted into HTML output by the UserInterface class in the userInterface 
    1717# module. 
    18 js_dateCheckFunctionGroup=""" 
     18 
     19js_timeValidationFunctions=""" 
     20<script language="javascript"> 
     21 
     22 
     23/* Set of time validation functions  
     24   -------------------------------- 
     25 
     26Rules for each set of low and high time fields are: 
     27 
     281. high>=start 
     292. start<=end 
     303. end<=max 
     314. start>=min 
     325. Cannot do check every change because this would not allow certain selections (as we've found with some datasets). Therefore allow validate via a button or link for each of the time selections. 
     336. Allow a validateSelections() and force it before submitting. 
     347. if end<start: end=start 
     358. if end>max: end=max 
     369. if start<min: start=min 
     3710. Add also a "Set both to start" and "Set both to end" buttons or links. 
     3811. -360<=longitude<=360 
     3912. -90<=latitude<=90 
     40 
     41Decided not to risk using built-in javascript Date() object just in case 
     42it couldn't handle historical years. 
     43*/ 
     44 
     45/* The following will be converted by python to something like: 
     46var minNames=["axis_1.1.1.1", "axis_2.1.1.1"]; 
     47var maxNames=minNames; 
     48var minValues=[[1999,4,3,12,0,0], [2004,6,6,0,0,0]]; 
     49var maxValues=[[2006,6,6,6,0,0], [2005,5,5,0,0,0]]; 
     50*/ 
     51 
     52var minNames=%s;  
     53var maxNames=minNames; 
     54var minValues=%s; 
     55var maxValues=%s; 
     56 
     57function getByIndex(arrayObj, item) { 
     58    // returns the index of item in arrayObj 
     59    for (var i=0; i<arrayObj.length; i++) { 
     60        if (item==arrayObj[i]) { 
     61            return i; 
     62        } 
     63    } 
     64    return -1; 
     65} 
     66 
     67function isEarlierThan(t1, t2) { 
     68    // returns true if t1 is earlier than t2 
     69    for (var i=0; i<t1.length; i++) { 
     70        if (t1[i]<t2[i]) { 
     71            return true; 
     72        } else if (t1[i]>t2[i]) { 
     73            return false; 
     74        } 
     75    } 
     76    return false; 
     77} 
     78 
     79function isLaterThan(t1, t2) { 
     80    // returns true if t1 is later than t2 
     81    for (var i=0; i<t1.length; i++) { 
     82        if (t1[i]>t2[i]) { 
     83            return true; 
     84        } else if (t1[i]<t2[i]) { 
     85            return false; 
     86        } 
     87    } 
     88    return false; 
     89} 
     90 
     91function setTimeSelections(itemName, timeArray) { 
     92    // Sets the values in the select item to those in timeArray 
     93    var mainForm=document.forms["extract_info"]; 
     94    var t=timeArray; 
     95    var timeComps=["year", "month", "day", "hour", "minute", "second"]; 
     96    for (var i=0; i<t.length; i++) { 
     97        var item=mainForm[itemName+timeComps[i]]; 
     98        var valueToSelect=timeArray[i]; 
     99         
     100        for (var x=0; x<item.length ; x++) { 
     101            if (parseInt(item[x].text)==valueToSelect) { 
     102                item[x].selected=true; 
     103            } 
     104        } 
     105    } 
     106} 
     107 
     108function validateTimeSelections(arg) { 
     109    // validates the specified time selections 
     110    var mainForm=document.forms["extract_info"]; 
     111    if (arg=="all") { 
     112        return true; 
     113    } else { 
     114        var axis=arg; 
     115        // select items named as follows...NAME="axis_1.1.1.1_high.time.day" 
     116        var axisLow=arg+"_low.time."; 
     117        var axisHigh=arg+"_high.time."; 
     118        var timeComps=["year", "month", "day", "hour", "minute", "second"]; 
     119        var lowTime=new Array(6); 
     120        var highTime=new Array(6); 
     121         
     122        for (var i=0; i<timeComps.length; i++) { 
     123            lowTime[i]=parseInt(mainForm[axisLow+timeComps[i]].value); 
     124            highTime[i]=parseInt(mainForm[axisHigh+timeComps[i]].value); 
     125        } 
     126 
     127        var maxTime=maxValues[getByIndex(maxNames, arg)]; 
     128        var minTime=minValues[getByIndex(minNames, arg)]; 
     129 
     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; } 
     135 
     136        setTimeSelections(axisHigh, highTime); 
     137        setTimeSelections(axisLow, lowTime); 
     138    } 
     139} 
     140 
     141function validateAllTimeSelections() { 
     142    // validates all time selections 
     143    return true; 
     144} 
     145 
     146function validateSelections(arg) { 
     147    // Validates the specified selections 
     148    // arg="don't submit";  
     149 
     150    if (arg=="don't submit") { return false; } 
     151    if (arg=="time") { 
     152        return validateTimeSelections("all"); 
     153    } 
     154    return false; 
     155} 
     156 
     157</script> 
     158""" 
     159 
     160js_selectAllCheckBoxes=""" 
    19161<SCRIPT LANGUAGE="Javascript"> 
    20162 
    21163// Set up global variables for all functions 
    22 var frm=document.forms[1]; 
     164var frm=document.forms["extract_info"]; 
     165 
     166function selectAllCheckBoxes() { 
     167    for (var i=0; i<frm.elements.length; i++) { 
     168        if (frm.elements[i].type=="checkbox") { 
     169            frm.elements[i].checked=true; 
     170        } 
     171    } 
     172} 
     173 
     174</SCRIPT> 
     175""" 
     176 
     177js_deSelectAllCheckBoxes=""" 
     178<SCRIPT LANGUAGE="Javascript"> 
     179 
     180// Set up global variables for all functions 
     181var frm=document.forms["extract_info"]; 
     182 
     183function deSelectAllCheckBoxes() { 
     184    for (var i=0; i<frm.elements.length; i++) { 
     185        if (frm.elements[i].type=="checkbox") { 
     186            frm.elements[i].checked=false; 
     187        } 
     188    } 
     189} 
     190 
     191</SCRIPT> 
     192""" 
     193 
     194js_dateCheckFunctionGroup_DEPRECATED=""" 
     195<SCRIPT LANGUAGE="Javascript"> 
     196 
     197// Set up global variables for all functions 
     198var frm=document.forms["extract_info"]; 
    23199var dateMinimum_1 = new Array(%s, %s, %s, %s, %s, %s); 
    24200var dateMaximum_1 = new Array(%s, %s, %s, %s, %s, %s); 
     
    176352""" 
    177353 
    178  
    179  
  • TI03-DataExtractor/trunk/pydxs/CSMLDataHandler.py

    r1138 r1153  
    127127           if v.id not in ("bounds_longitude", "bounds_latitude", "bounds_level", "bounds_time", "p0"): 
    128128               rtvars.append([name, v.id])  
    129  
     129           
    130130        return rtvars 
    131131 
     
    177177                (start, end, (intervalValue, intervalUnits))=self.getTemporalDomain(datasetGroup, dataset, variable, datasetURI) 
    178178                arrayValues=[start, end, intervalValue] 
    179                 listType="start en.split()d interval" 
     179                listType="start end interval" 
    180180                units=intervalUnits 
    181181            elif name=="level": 
     
    261261        end_time=str(time_axis[-1]).replace(" ", "T") 
    262262 
    263         time_units="hours" 
     263        time_units="months" 
    264264        if time_units[-1]=="s":  time_units=time_units[:-1] 
    265265         
     
    269269        if len(time_axis)>1: 
    270270                # convert array to relative times 
    271                 relTimes=[] 
    272                 relTimeAxis=cdms.createAxis([0]) 
    273                 relTimeAxis.designateTime() 
    274                 relTimeAxis.units="%s since %s" % (time_units, start_time.replace("T", " ")) 
     271                #relTimes=[] 
     272                #relTimeAxis=cdms.createAxis([0]) 
     273                #relTimeAxis.designateTime() 
     274                #relTimeAxis.units="%s since %s" % (time_units, start_time.replace("T", " ")) 
    275275                dtp=dateTimePattern 
    276276                match=dtp.match(start_time) 
     
    325325        # If no time selection specified just return the full list 
    326326        if startDateTime==None: 
    327             return [str(tst) for tst in timeAxis.asComponentTime()] 
     327            return timeAxis[1] 
    328328         
    329329        startDateTime=startDateTime.replace("T", " ") 
     
    417417            axLens.append(axlen) 
    418418         
    419 #       print axesCounted 
    420 #       print axLens 
     419        print axesCounted 
     420        print axLens 
    421421         
    422422        axcount=0 
     
    459459 
    460460         
    461     def readVariableSubsetIntoMemory(self, datasetURI, variable, axisSelectionDict, timeStep=None): 
     461#    def readVariableSubsetIntoMemory(self, datasetURI, variable, axisSelectionDict, timeStep=None): 
     462    def subsetVariableToCSMLNC(self, datasetURI, variable, axisSelectionDict, csmlPath, ncPath, timeStep=None): 
    462463        """ 
    463464        Reads the variable with ID 'variable' into memory from file 
     
    484485                if timeStep!=None:       
    485486                    timeStep=timeStep.replace(" ", "T")                  
    486                     timeSelection=[timeStep] 
     487                    timeSelection=[self._fixTimeStringForCSML(timeStep)] 
    487488                else: 
    488489                    selector=axisSelectionDict[key][:2] 
    489490                    selector=(selector[0].replace(" ", "T"), selector[1].replace(" ", "T")) 
     491                    selector=[self._fixTimeStringForCSML(ts) for ts in selector] 
     492                    if selector[0]==selector[1]: selector=[selector[0]] 
    490493                    timeSelection=selector               
    491494            elif name=="latitude": 
     
    507510                selectionDict[name]=selector 
    508511         
    509         print selectionDict, timeSelection 
    510         print dir(var) 
    511         (subsetCSML, subsetNetCDF, arraySize)=var.subsetToGridSeries(timeSelection, "/tmp/out.csml", "/tmp/out.nc", **selectionDict) 
     512        if timeSelection==[]: 
     513            for axis in axisList: 
     514                if axis[0]=="time": 
     515                    selector=axis[1] 
     516                    selector=[self._fixTimeStringForCSML(ts) for ts in selector] 
     517                    timeSelection=selector               
     518         
     519        print "timeSelection:", timeSelection 
     520        print "selectionDict:", selectionDict 
     521         
     522        (subsetCSML, subsetNetCDF, arraySize)=var.subsetToGridSeries(timeSelection, csmlPath, ncPath, **selectionDict) 
    512523        #variableData=eval("self.file('%s', %s)" % (variable, fullSelectionString)) 
    513         return "dummy" #variableData         
     524        return #variableData         
    514525         
    515526 
     
    553564     
    554565 
     566    def _fixTimeStringForCSML(self, timeString): 
     567        """ 
     568        Removes zero padding from time string. 
     569        """ 
     570        matchlist=list(dateTimePattern.match(timeString).groups()) 
     571        if matchlist[-1]==None: matchlist[-1]=0 
     572        timeItems=[int(i) for i in (matchlist[:3]+matchlist[4:8])] 
     573        newString="%s-%s-%sT%s:%s:%s.%s" % tuple(timeItems) 
     574        return newString 
     575     
     576         
    555577if __name__=="__main__":         
    556578    a=CSMLDataHandler() 
     
    559581    print a.getVariables(datasetGroup='CSML test dataset group', datasetURI='file:/usr/local/test/dxs/testdata/csml1.xml')     
    560582     
    561     print a.getDomain('CSML test dataset group', 'CSML test dataset great test', "pqn") 
    562  
    563     #print a.getHorizontalDomain('CSML test dataset group', 'CSML test dataset great test', "pqn") 
     583    print a.getDomain('CSML test dataset group', 'CSML test dataset great test', "var2") 
     584 
     585    #print a.getHorizontalDomain('CSML test dataset group', 'CSML test dataset great test', "var2") 
    564586    # These have been deprecated! 
    565     #print a.getVerticalSpatialDomain('CSML test dataset group', 'CSML test dataset great test', "pqn") 
     587    #print a.getVerticalSpatialDomain('CSML test dataset group', 'CSML test dataset great test', "var2") 
    566588  
    567     print a.getTemporalDomain('CSML test dataset group', 'CSML test dataset great test', "pqn") 
     589    print a.getTemporalDomain('CSML test dataset group', 'CSML test dataset great test', "var2") 
    568590 
    569591    print a.getCFGlobalAttributes("file:/usr/local/test/dxs/testdata/csml1.xml") 
    570592 
    571     print a.getSelectedVariableArrayDetails('file:/usr/local/test/dxs/testdata/csml1.xml', "pqn",  
    572                      {"axis_1.1.1.1":("1999-01-01T00:00:00", "1999-01-01T06:00:00"), 
     593 
     594    print a.getSelectedVariableArrayDetails('file:/usr/local/test/dxs/testdata/csml1.xml', "var2",  
     595                     {"axis_1.1.1.1":("2006-05-15T12:00:00", "2006-06-15T12:00:00"), 
    573596                     "axis_1.1.1.2":(10,20), "axis_1.1.1.3":(0,90)}) 
    574597 
    575     print a.getSelectedVariableArrayDetails('file:/usr/local/test/dxs/testdata/csml1.xml', "pqn",  
    576                      {"axis_1.1.1.1":("1999-01-01T00:00:00", "1999-01-01T06:00:00"), 
     598    print "Array Details..." 
     599    x=a.getSelectedVariableArrayDetails('file:/usr/local/test/dxs/testdata/csml1.xml', "var2",  
     600                     {"axis_1.1.1.1":("2006-05-15T12:00:00", "2006-06-15T12:00:00"), 
    577601                     "axis_1.1.1.3":(30,-30)}) 
    578602 
    579     print a.getSelectedVariableSubsetSize("file:/usr/local/test/dxs/testdata/csml1.xml", "pqn", 
    580                      {'axis_1.1.1.1':('1999-01-01T00:00:0.000000', '1999-01-01T00:00:0.000000'),   
    581                       'axis_1.1.1.3': [0.0, 355.0], 'axis_1.1.1.2': [-90.0, 90.0]}) 
     603    print x 
     604     
     605    print "Size..." 
     606    print x[2] 
     607     
     608    print "\n\n\nREALLY SUBSET" 
     609    print a.subsetVariableToCSMLNC("file:/usr/local/test/dxs/testdata/csml1.xml", "var2", 
     610                     {'axis_1.1.1.1':('2006-05-15T12:00:0.000000', '2006-06-15T12:00:0.000000'),   
     611                      'axis_1.1.1.3': [0.0, 35.0], 'axis_1.1.1.2': [40.0, 90.0]}, "/tmp/a.csml", "/tmp/a.nc") 
    582612                       
    583     print a.readVariableSubsetIntoMemory("file:/usr/local/test/dxs/testdata/csml1.xml", "pqn", 
    584                      {'axis_1.1.1.1':('1999-01-01T00:00:0.000000', '1999-01-01T00:00:0.000000'),   
    585                       'axis_1.1.1.3': [0.0, 35.0], 'axis_1.1.1.2': [40.0, 90.0]}) 
     613    print "\nTry another..."           
     614    print a.subsetVariableToCSMLNC("file:/usr/local/test/dxs/testdata/csml1.xml", "var2", 
     615                     {'axis_1.1.1.3': [0.0, 75.0], 'axis_1.1.1.2': [20.0, 90.0], 
     616                      'axis_1.1.1.1':("2006-05-15T12:00:00", "2006-06-15T12:00:00")}, "/tmp/a.csml", "/tmp/a.nc")                      
     617 
     618 
  • TI03-DataExtractor/trunk/pydxs/CSMLOutputHandler.py

    r1109 r1153  
    2323        Opens the output NetCDF file using CDMS. 
    2424        """ 
    25         self.outputFile=cdms.open(outputFileName, "w") 
     25        #self.outputFile=cdms.open(outputFileName, "w") 
    2626         
    2727         
     
    3030        Writes the variable object 'variable' to the output file. 
    3131        """ 
    32         self.outputFile.write(variable) 
     32        pass #self.outputFile.write(variable) 
    3333         
    3434         
     
    3737        Writes global attributes to the output file. 
    3838        """      
    39         for att in attDict: 
    40             self.outputFile.__setattr__(att, attDict[att]) 
     39        pass 
     40        #for att in attDict: 
     41        #    self.outputFile.__setattr__(att, attDict[att]) 
    4142             
    4243 
     
    4647        the output file. 
    4748        """ 
    48         self.writeVariable(variable) 
    49         self.writeGlobalAttributes(attDict) 
     49        pass 
     50        #self.writeVariable(variable) 
     51        #self.writeGlobalAttributes(attDict) 
    5052 
    5153     
     
    5456        Closes the output file. 
    5557        """ 
    56         self.outputFile.close() 
     58        pass#self.outputFile.close() 
  • TI03-DataExtractor/trunk/pydxs/FileNames.py

    r1109 r1153  
    197197            if start==end: found=None  
    198198         
     199        fnobj=fnobj.replace("_undefined_", "_") 
    199200        fnobj=fnobj.lower()  
    200201        return fnobj 
  • TI03-DataExtractor/trunk/pydxs/OptionHandler.py

    r1109 r1153  
    4646        # Now populte the self.options dictionary 
    4747        self._populateOptionsDict(optsRequested) 
     48        if self.bag.has_key("optionCategoryRequested"): 
     49            del self.bag["optionCategoryRequested"] 
    4850         
    4951         
     
    200202            if isinstance(dataHandler, CDMSDataHandler): 
    201203                outputFormatList=["NetCDF", "NASA Ames"] 
    202             else: 
    203                 raise "Non CDMS data models not yet implemented." 
     204            elif isinstance(dataHandler, CSMLDataHandler): 
     205                outputFormatList=["CSML/NetCDF"] 
    204206                 
    205207            choices.append(("outputFormat_%s.%s.%s" % (dsgCode, dsCode, varCode), outputFormatList)) 
     
    298300    x=OptionHandler({"userRoles":[], "username":"jane", "datasetGroup_1":"Test Data Group 2",  
    299301                          "datasetGroup_2":"Test Data Group 3", "dataset_1.1":"Test Dataset 2", 
    300                           "dataset_2.1":"Test Dataset 3"}) 
     302                          "dataset_2.1":"Test Dataset 3", 
     303                          "datasetGroup_3":"CSML test dataset group", "dataset_3.1":"CSML test dataset great test"}) 
    301304    print x.options, "\n"     
    302305 
     
    310313                          "dataset_2.1":"Test Dataset 3", "variable_1.1.1":"var2", "variable_2.1.1":"var3", 
    311314                          "optionCategoryRequested":"domainAndFormat"}) 
     315 
    312316    print x.options, "\n"         
    313     sys.exit() 
     317 
    314318    x=OptionHandler({"datasetURI_1":"file:/home/as56/abstractWebService/dxs/testdata/testdata1.xml", 
    315319                         "userRoles":[], "username":"jane", "numberOfDatasets":1}) 
     
    318322                         "userRoles":[], "username":"jane", "numberOfDatasets":1}) 
    319323    print x.options, "\n" 
     324 
     325    x=OptionHandler({"userRoles":[], "username":"jane", "datasetGroup_1":"CSML test dataset group", "dataset_1.1":"CSML test dataset great test", "variable_1.1.1":"var2",  "datasetGroup_2":"Test Data Group 1", "dataset_2.1":"Test Dataset 1", "variable_2.1.1":"pqn", "optionCategoryRequested":"domainAndFormat", }) 
     326    print x.options, "\n"     
  • TI03-DataExtractor/trunk/pydxs/OutputManager.py

    r1109 r1153  
    2828from CDMSDataHandler import * 
    2929from CDMSOutputHandler import * 
     30from CSMLDataHandler import * 
     31from CSMLOutputHandler import * 
    3032from DatasetFormatDecider import * 
    3133from FileNames import * 
     
    3537#cdms.setAutoBounds("off") 
    3638 
    37 global ONE_FILE_PER_TIMESTEP     
    38 ONE_FILE_PER_TIMESTEP=1 
     39#global ONE_FILE_PER_TIMESTEP     
     40#ONE_FILE_PER_TIMESTEP=0 
    3941 
    4042 
     
    232234                    outputHandler=self._getOutputHandler(outputFormat, dataFileHandler)          
    233235                    outputFilePath=outputFilePathList[0] 
    234                     data=dataFileHandler.readVariableSubsetIntoMemory(datasetURI, varID, axisSelectionDict) 
     236                     
     237                    if isinstance(dataFileHandler, CSMLDataHandler): 
     238                        # CSML needs subsetting in one go 
     239                        ncPath=outputFilePath 
     240                        csmlPath=os.path.splitext(ncPath)[0]+".xml" 
     241                        outputFilePathList.insert(0, csmlPath) 
     242                        dataFileHandler.subsetVariableToCSMLNC(datasetURI, varID, axisSelectionDict, csmlPath, ncPath) 
     243                        print "\nWrote variable '%s' to output files: %s, %s" % (varID, csmlPath, ncPath) 
     244                    else: 
     245                        data=dataFileHandler.readVariableSubsetIntoMemory(datasetURI, varID, axisSelectionDict) 
    235246                         
    236                     outputFileHandler=outputHandler(outputFilePath) 
    237                     globalAttributes=dataFileHandler.getCFGlobalAttributes(datasetURI) 
    238                     outputFileHandler.writeVariableAndGlobalAttributes(data, globalAttributes) 
    239                     outputFileHandler.closeFile() 
    240                     print "\nWrote variable '%s' to output file: %s" % (varID, outputFilePath)               
     247                        outputFileHandler=outputHandler(outputFilePath) 
     248                        globalAttributes=dataFileHandler.getCFGlobalAttributes(datasetURI) 
     249                        outputFileHandler.writeVariableAndGlobalAttributes(data, globalAttributes) 
     250                        outputFileHandler.closeFile() 
     251                        print "\nWrote variable '%s' to output file: %s" % (varID, outputFilePath)                   
    241252                     
    242253     
     
    258269                outputHandler==NASAAmesOutputHandler 
    259270        elif isinstance(dataHandler, CSMLDataHandler): 
    260             raise "Not implemented yet." 
     271            outputHandler=CSMLOutputHandler 
    261272             
    262273        return outputHandler 
     
    368379 
    369380if __name__=="__main__": 
    370     print "Setting ONE_FILE_PER_TIMESTEP=1" 
     381    #print "Setting ONE_FILE_PER_TIMESTEP=1" 
    371382   
    372     ONE_FILE_PER_TIMESTEP=1 
     383    #ONE_FILE_PER_TIMESTEP=1 
    373384    x=OutputManager({"username":"jane", "datasetGroup_1":"Test Data Group 1", 
    374385                     "dataset_1.3":"Test Dataset 1", "variable_1.3.1":"pqn", 
     
    450461                     'axis_1.1.1.3':(-30, 30), 'dataset_1.1':'Test Dataset 1'}) 
    451462    print x.getOutputFilePathDict() 
     463     
     464    ONE_FILE_PER_TIMESTEP=0    
     465    print "\n\nCSML test!\n" 
     466    x=OutputManager({'username':None, 'variable_1.1.1':'var2',  
     467                     'outputFormat_1.1.1':'NetCDF', 'userRoles':[],  
     468                     'datasetGroup_1':'CSML test dataset group',  
     469                     'axis_1.1.1.3':(0, 35), 'dataset_1.1':'CSML test dataset great test'}) 
     470    print "\nGet output file path dict...", x.getOutputFilePathDict() 
     471    print "\nCREATE CSML Outputs...", x.createOutputs() 
  • TI03-DataExtractor/trunk/pydxs/__init__.py

    r1109 r1153  
    4848from CSMLDataHandler import CSMLDataHandler 
    4949 
     50# CSMLOutputHandler is the class that might allow CSML/NetCDF to be written. 
     51# Note: It might not actually be needed! 
     52from CSMLOutputHandler import CSMLOutputHandler 
     53 
    5054# OutputManager is the class used to match the request to the dataset and 
    5155# actually extract data. 
  • TI03-DataExtractor/trunk/pydxs/common.py

    r1109 r1153  
    3838    Returns a suitable file extension for a known file format. 
    3939    """ 
    40     extMap={"NetCDF":"nc", "NASA Ames":"na"} 
     40    extMap={"CSML/NetCDF":"nc", "NetCDF":"nc", "NASA Ames":"na"} 
    4141    return extMap[format] 
    4242     
     
    180180    else:  
    181181        rtobj=obj 
     182         
    182183    return rtobj 
    183184 
  • TI03-DataExtractor/trunk/pydxs/serverConfig.py

    r1138 r1153  
    7979if MAX_FILE_SIZE>REQUEST_SIZE_LIMIT: 
    8080    MAX_FILE_SIZE=REQUEST_SIZE_LIMIT 
     81 
     82# ONE_FILE_PER_TIMESTEP: 
     83# Sets whether default output should be one file per timestep. 
     84ONE_FILE_PER_TIMESTEP=0 
    8185 
    8286# TIMING_SCALE_FACTOR: 
     
    160164# OUTPUT_FORMATS: 
    161165# List of available output formats. 
    162 OUTPUT_FORMATS=["NetCDF"] #, "NASA Ames"] 
     166OUTPUT_FORMATS=["NetCDF", "NASA Ames", "CSML/NetCDF"] 
    163167 
    164168# LOCAL_PYTHONPATH: 
  • TI03-DataExtractor/trunk/setup.py

    r1109 r1153  
    284284                raise "Cannot create directory: %s" % REQUEST_XML_DIR_LOCAL_PATH """ 
    285285         
     286        if "MAP_APPLET_TEMPLATE_LOCAL_PATH" in configVarDict.keys(): 
     287            print "\nChanging permissions on maps/ directory..." 
     288            os.chmod(os.path.split(MAP_APPLET_TEMPLATE_LOCAL_PATH)[0], 0777) 
     289         
    286290        configMap={"s":os.path.join("..", "%s-%s" % (pypackage, version), pypackage, "serverConfig.py"),  
    287291                   "c":os.path.join("..", "%s-%s" % (pypackage, version), pypackage, "clientConfig.py")} 
Note: See TracChangeset for help on using the changeset viewer.