Ignore:
Timestamp:
18/11/06 23:01:07 (13 years ago)
Author:
astephen
Message:

Merged with titania version.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI03-DataExtractor/trunk/pydxs/OutputManager.py

    r1160 r1715  
    3030from CSMLDataHandler import * 
    3131from CSMLOutputHandler import * 
     32from ECMWFGRIB1NoSubsetDataHandler import * 
     33from ECMWFGRIB1NoSubsetOutputHandler import * 
     34from MIDASDataHandler import * 
     35from MIDASOutputHandler import * 
    3236from DatasetFormatDecider import * 
    3337from FileNames import * 
    3438from DXErrors import * 
     39import dxvv 
    3540 
    3641# Make sure CDMS automatic bounds generation is set to OFF 
     
    106111            varID=dct[key][1] 
    107112            paths=dct[key][4] 
    108             pathdict[varID]=paths 
     113            pathdict["%s-%s"%(varID,key)]=paths 
    109114        return pathdict 
    110115 
     
    119124            varID=dct[key][1] 
    120125            size=dct[key][2] 
    121             sizedict[varID]=size 
     126            sizedict["%s-%s"%(varID,key)]=size 
    122127        return sizedict 
    123128         
     
    137142            if format=="NASA Ames": 
    138143                multiplier=3 
    139             durationdict[varID]=size*TIMING_SCALE_FACTOR*multiplier 
     144 
     145            if format=="ASCII text": 
     146                multiplier=multiplier*5 
     147 
     148            dur=size*TIMING_SCALE_FACTOR*multiplier 
     149            if dur<5: dur=3 
     150            durationdict["%s-%s"%(varID,key)]=dur 
    140151        return durationdict 
    141152 
     
    169180 
    170181        varCount=0 
     182 
     183        # Check number of datasets is not over limit 
     184        if len(varKeys)>MAX_NUM_DATASETS: 
     185            raise Exception, "You have requested more variables than the current DX limit (%s). Please go back and reduce the size of your request." % MAX_NUM_DATASETS 
     186 
     187        # Loop through all variables 
    171188        for varKey in varKeys: 
    172189            varCodes=varKey.split("_")[-1] 
     
    186203            sizeOfRequest=self._adjustFileSizeByFormat(sizeOfRequest, outputFormat) 
    187204             
    188                      
     205            if sizeOfRequest>(REQUEST_SIZE_LIMIT*(2**20)): 
     206                raise Exception, "Your request is above the current size limit for the DX (of %s MB), please submit smaller requests." % REQUEST_SIZE_LIMIT 
     207 
     208            print "\n"*10, sizeOfRequest, REQUEST_SIZE_LIMIT*(2**20)         
     209             
     210            # Now split depending on single or multiple output 
    189211            if sizeOfRequest>(MAX_FILE_SIZE*(2**20)) or ONE_FILE_PER_TIMESTEP==1: 
    190212                     
    191                 print "\n\n\n", (MAX_FILE_SIZE*(2**20)), sizeOfRequest, ONE_FILE_PER_TIMESTEP 
     213                print "\n\n\n", MAX_FILE_SIZE, (MAX_FILE_SIZE*(2**20)), sizeOfRequest, ONE_FILE_PER_TIMESTEP 
    192214                 
     215                # If only need to generate file names - multiple files 
    193216                if mode=="file names": 
    194217                    fileNamer=FileNames(datasetGroup=datasetGroup, dataset=dataset, timeSteps=timeStepStringList,  
    195218                                    fileFormat=outputFormat, variables=[varID], 
    196219                                    basedir=self.outputDir) 
     220 
    197221                    outputFilePathList=fileNamer.createFileNameList() 
    198                      
     222 
    199223                    if isinstance(dataFileHandler, CSMLDataHandler): 
    200224                        # CSML special case, just make first file the xml with copy of first .nc name 
     
    202226                        csmlPath=os.path.splitext(ncPath)[0]+".xml" 
    203227                        outputFilePathList.insert(0, csmlPath) 
    204                  
     228 
     229                # Otherwise create the outputs - multiple files 
     230                # CSML not supported via this route yet 
     231                # MIDAS not supported via this route yet 
    205232                elif mode=="create outputs": 
    206233                    # Now get the real data 
     
    216243                        outputFilePathList.append(outputFilePath) 
    217244                                                 
    218                         data=dataFileHandler.readVariableSubsetIntoMemory(datasetURI, varID, axisSelectionDict, timeStep) 
     245                        if varID[-5:]=="_dxvv": 
     246                            # Check if virtual variable being used 
     247                            vvd=dxvv.VVDict() 
     248                            procClass=vvd.getProcessingClass(varID, datasetURI) 
     249                            exec "vvHandler=dxvv.%s" % procClass 
     250                            data=vvHandler(varID, datasetURI, axisSelectionDict, timeStep).var 
     251                            print data 
     252                        else:  
     253                            data=dataFileHandler.readVariableSubsetIntoMemory(datasetURI, varID, axisSelectionDict, timeStep) 
    219254                         
    220255                        outputFileHandler=outputHandler(outputFilePath) 
     
    223258                        outputFileHandler.closeFile() 
    224259                        print "\nWrote variable '%s' to output file: %s" % (varID, outputFilePath)               
    225                          
     260                        fixFilePermissions(outputFilePath) #added as fix?                
     261 
     262            # Else if only producing one output file 
     263            # or NetCDF and CSML in the case of CSML     
    226264            else: 
    227265                if len(timeStepStringList)==0: 
     
    230268                    timeStepStringList=timeStepStringList 
    231269                else: 
    232                     timeStepStringList=["%s-%s" % (timeStepStringList[0], timeStepStringList[-1])] 
     270                    ts0="%.4d%.2d%.2d%.2d" % tuple(getDateTimeComponents(timeStepStringList[0])[:4]) 
     271                    ts1="%.4d%.2d%.2d%.2d" % tuple(getDateTimeComponents(timeStepStringList[-1])[:4]) 
     272                    timeStepStringList=["%s-%s" % (ts0,ts1)] 
    233273                             
     274                # File names are created here as well - should really cache this 
    234275                print "Work out file name as only one file..." 
    235276                fileNamer=FileNames(datasetGroup=datasetGroup, dataset=dataset, timeSteps=timeStepStringList,  
    236277                                    fileFormat=outputFormat, variables=[varID], 
    237278                                    basedir=self.outputDir) 
     279              
    238280                outputFilePathList=fileNamer.createFileNameList() 
    239                          
     281                #print outputFilePathList                
     282 
     283                # If CSML - single output file - for creating file names 
    240284                if isinstance(dataFileHandler, CSMLDataHandler): 
    241285                    ncPath=outputFilePathList[0] 
     
    243287                    outputFilePathList.insert(0, csmlPath) 
    244288                                 
     289                # If creating outputs - single output file 
     290                # or CSML/NetCDF supporting CSML 
    245291                if mode=="create outputs": 
    246292                    # Now get the real data 
     
    248294                    outputFilePath=outputFilePathList[0] 
    249295                     
     296 
     297                    # CSML route 
    250298                    if isinstance(dataFileHandler, CSMLDataHandler): 
    251299                        # CSML needs subsetting in one go 
    252                         #ncPath=outputFilePath 
    253                         #csmlPath=os.path.splitext(ncPath)[0]+".xml" 
    254                         #outputFilePathList.insert(0, csmlPath) 
    255300                        dataFileHandler.subsetVariableToCSMLNC(datasetURI, varID, axisSelectionDict, csmlPath, ncPath) 
     301                        fixFilePermissions(csmlPath) 
     302                        fixFilePermissions(ncPath) 
    256303                        print "\nWrote variable '%s' to output files: %s, %s" % (varID, csmlPath, ncPath) 
     304 
     305                    # MIDAS handler here 
     306                    elif isinstance(dataFileHandler, MIDASDataHandler): 
     307                        # MIDAS does subsetting in one go 
     308                        dataFileHandler.subsetMIDASToASCIIFile(datasetURI, axisSelectionDict, outputFilePath, region=None) 
     309                        fixFilePermissions(outputFilePath)  
     310                        print "\nWrote MIDAS subset to output file: %s" % outputFilePath 
     311 
     312                    # CDMS route - including virtual variables 
    257313                    else: 
    258                         data=dataFileHandler.readVariableSubsetIntoMemory(datasetURI, varID, axisSelectionDict) 
     314                        if varID[-5:]=="_dxvv": 
     315                            # Check if virtual variable being used 
     316                            vvd=dxvv.VVDict() 
     317                            procClass=vvd.getProcessingClass(varID, datasetURI) 
     318                            exec "vvHandler=dxvv.%s" % procClass 
     319                            data=vvHandler(varID, datasetURI, axisSelectionDict).var 
     320                            print data 
     321                        else: 
     322                            data=dataFileHandler.readVariableSubsetIntoMemory(datasetURI, varID, axisSelectionDict) 
    259323                         
    260324                        outputFileHandler=outputHandler(outputFilePath) 
     
    263327                        outputFileHandler.closeFile() 
    264328                        print "\nWrote variable '%s' to output file: %s" % (varID, outputFilePath)                   
     329                        fixFilePermissions(outputFilePath)  
    265330                     
    266331     
     
    268333            print "\n\n", outputFilePathList, "\n\n" 
    269334            varCount=varCount+1 
     335            print "\n\nHERE IS THE VARDICT...\n\n", self.varDict 
    270336 
    271337 
     
    274340        Get output handler. 
    275341        """ 
    276         if outputFormat not in OUTPUT_FORMATS: 
    277             raise DXOptionHandlingError, "Output format '%s' is not supported." % outputFormat 
     342        #if outputFormat not in OUTPUT_FORMATS: 
     343        #    raise DXOptionHandlingError, "Output format '%s' is not supported." % outputFormat 
    278344             
    279345        if isinstance(dataHandler, CDMSDataHandler): 
     
    284350        elif isinstance(dataHandler, CSMLDataHandler): 
    285351            outputHandler=CSMLOutputHandler 
     352        elif isinstance(dataHandler, MIDASDataHandler): 
     353            outputHandler=MIDASOutputHandler 
    286354             
    287355        return outputHandler 
     
    380448            outputFileHandler.writeVariableAndGlobalAttributes(data, {}) 
    381449            outputFileHandler.closeFile() 
    382              
    383             print "\nWrote variable '%s' to output file: %s" % (data.id, outputFilePath)                     
    384              
    385  
     450            print "\nWrote variable '%s' to output file: %s" % (data.id, outputFilePath) 
    386451        outputVarID=opMethod 
    387452        self.varDict[0]=(datasetURI, outputVarID, outputSize, outputFormat, outputFilePathList[:]) 
     
    394459if __name__=="__main__": 
    395460    #print "Setting ONE_FILE_PER_TIMESTEP=1" 
    396    
     461    x=OutputManager({"username":"jane", "datasetGroup_1":"Test Data Group 1", 
     462                     "dataset_1.3":"Test Dataset 1", "variable_1.3.1":"twotimespqn_dxvv", 
     463                     "axis_1.3.1.1":("1999-01-01T00:00:00", "1999-01-01T06:00:00"), 
     464                     "outputFormat_1.3.1":"NetCDF", 
     465                     "datasetGroup_2":"Test Data Group 2", 
     466                     "dataset_2.1":"Test Dataset 2", "variable_2.1.1":"var2", 
     467                     "axis_2.1.1.1":("2004-01-01T12:00:00", "2004-01-01T12:00:00"), 
     468                     "outputFormat_2.1.1":"NetCDF"})  
     469    print x.getOutputFilePathDict()    
     470    print x.createOutputs() 
     471    sys.exit() 
    397472    #ONE_FILE_PER_TIMESTEP=1 
    398473    x=OutputManager({"username":"jane", "datasetGroup_1":"Test Data Group 1", 
Note: See TracChangeset for help on using the changeset viewer.