Changeset 3286 for TI02-CSML


Ignore:
Timestamp:
29/01/08 16:36:16 (11 years ago)
Author:
domlowe
Message:

overhaul of scanning command args

Location:
TI02-CSML/trunk/csml
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/csml/csmllibs/csmlbuilder.py

    r3283 r3286  
    55    '''this class contains all the method calls to create and populate a csml document. Calling the build method will start the build process 
    66    it needs to be provided with several bits of information to be able to do this. Csmlscan uses this class to run the build process.''' 
    7     def __init__(self,datasetid, directory,selection,csmlft, mapping, timedimension ,outputfile,printscreen,timestorage,spatialstorage,valuestorage, minaxes, secallow, secdeny): 
     7    def __init__(self,datasetid, directory,selection,csmlft, mapping, timedimension ,outputfile,printscreen,timestorage,spatialstorage,valuestorage, minaxes): 
    88        ''' The entry point for building a csml document.  
    99        @param datasetid:   identifier for the Dataset id attributes    
     
    2727        else: 
    2828            self.datasetid =csml.csmllibs.csmlextra.getRandomID() 
    29         if not directory: 
    30             self.selection=selection.split() 
     29        if selection: 
     30            if type(selection) is list: 
     31                self.selection=selection 
     32            else: 
     33                self.selection=selection.split() 
    3134            self.directory=self.selection[0] 
    3235        else: 
    33             self.directory = directory # top level directory containing data files  
    34             self.selection=None 
     36            self.directory = directory # top level directory containing data files    
    3537        self.selection 
    3638        self.csmlfeaturetype  = csmlft  
     
    4547        self.csml = None  # csml object holds the csml document in memory. 
    4648        self.ds_element = None #<Dataset> tag, root node. 
    47         self.secallow=secallow 
    48         self.secdeny=secdeny 
    4949          
    5050    def build(self): 
     
    5757            print 'error: Cannot find a config file at this location.' 
    5858            sys.exit() 
    59         self.addSecurity() 
     59        #self.addSecurity() 
    6060        self.createFeatureFileMap() 
    6161        if self.spatialstorage=='fileextract': 
     
    9595        #self.ds.description=csml.parser.Description(strGmlDescription) 
    9696     
    97     def addSecurity(self):         
    98         '''Adds NDG style AccessControlPolicy to the dataset based on info in config file''' 
    99         def _buildSimpleCondition(condition): 
    100             #builds the tag structure for a SimpleCondition 
    101             scond=csml.parser.SimpleCondition() 
    102             parts=condition.split(' ') 
    103             attauth=csml.parser.csString(parts[0]) 
    104             role=csml.parser.csString(parts[1])  
    105             scond.attrauthRole=role 
    106             scond.dgAttributeAuthority=attauth 
    107             return scond 
    108          
    109         #don't do anything if no config options are set. 
    110         if not self.secallow: 
    111             if not self.secdeny: 
    112                 return None 
     97    #def addSecurity(self):         
     98        #'''Adds NDG style AccessControlPolicy to the dataset based on info in config file''' 
     99        #def _buildSimpleCondition(condition): 
     100            ##builds the tag structure for a SimpleCondition 
     101            #scond=csml.parser.SimpleCondition() 
     102            #parts=condition.split(' ') 
     103            #attauth=csml.parser.csString(parts[0]) 
     104            #role=csml.parser.csString(parts[1])  
     105            #scond.attrauthRole=role 
     106            #scond.dgAttributeAuthority=attauth 
     107            #return scond 
     108         
     109        ##don't do anything if no config options are set. 
     110        #if not self.secallow: 
     111            #if not self.secdeny: 
     112                #return None 
    113113            
    114114         
    115         acp=csml.parser.AccessControlPolicy() 
    116         if self.secallow: 
    117             for condition in self.secallow.split(','): 
    118                 dgSecurityCondition=csml.parser.DgSecurityCondition() 
    119                 dgSecurityCondition.effect=csml.parser.csString('allow') 
    120                 dgSecurityCondition.addChildElem('simpleCondition', _buildSimpleCondition(condition)) 
    121                 acp.addChildElem('dgSecurityCondition', dgSecurityCondition) 
    122         if self.secdeny: 
    123             for condition in self.secallow.split(','): 
    124                 dgSecurityCondition=csml.parser.DgSecurityCondition() 
    125                 dgSecurityCondition.effect=csml.parser.csString('deny') 
    126                 dgSecurityCondition.addChildElem('simpleCondition', _buildSimpleCondition(condition)) 
    127                 acp.addChildElem('dgSecurityCondition', dgSecurityCondition) 
    128         self.ds.accessControlPolicy=acp        
     115        #acp=csml.parser.AccessControlPolicy() 
     116        #if self.secallow: 
     117            #for condition in self.secallow.split(','): 
     118                #dgSecurityCondition=csml.parser.DgSecurityCondition() 
     119                #dgSecurityCondition.effect=csml.parser.csString('allow') 
     120                #dgSecurityCondition.addChildElem('simpleCondition', _buildSimpleCondition(condition)) 
     121                #acp.addChildElem('dgSecurityCondition', dgSecurityCondition) 
     122        #if self.secdeny: 
     123            #for condition in self.secallow.split(','): 
     124                #dgSecurityCondition=csml.parser.DgSecurityCondition() 
     125                #dgSecurityCondition.effect=csml.parser.csString('deny') 
     126                #dgSecurityCondition.addChildElem('simpleCondition', _buildSimpleCondition(condition)) 
     127                #acp.addChildElem('dgSecurityCondition', dgSecurityCondition) 
     128        #self.ds.accessControlPolicy=acp        
    129129         
    130130    def createFeatureFileMap(self): 
    131131        ''' creates the  FeatureFileMap''' 
    132         print "Create FFMAP" 
     132        print "Creating feature to file mapping..." 
    133133        if self.selection is not None: 
    134134            #create a 'virtual' directory object that behaves like a normal directory. 
     
    148148    def makeFileExtracts(self): 
    149149        ''' creates the file extracts''' 
    150         print "make FEs" 
     150        print "Making file extract dictionary..." 
    151151        feBuilder =csml.csmllibs.csmlfileextracts.fileExtractBuilder( self.ds, self.ffmap, self.timedimension) 
    152152        self.ds = feBuilder.dataset_element 
     
    161161    def createFeatures(self): 
    162162        ''' creates the features''' 
    163         print "create Features" 
     163        print "Creating features..." 
    164164        if not hasattr(self, 'extractType'): 
    165165            self.extractType=None 
     
    211211    def printToScreen(self): 
    212212        ''' prints the finished csml''' 
    213         if self.printscreen=='1': 
     213        if self.printscreen: 
    214214            print self.strCSML 
    215215 
  • TI02-CSML/trunk/csml/csmllibs/csmldirectory.py

    r3283 r3286  
    4646                            else: 
    4747                                self.subdirlist.append(os.path.join(self.topdir, item)) 
    48                                 self.readSubDir(os.path.join(self.topdir, item))                                        
    49                  
    50                 print "total" 
    51                 counter = len(self.subdirlist)   
    52                 print counter 
    53          
     48                                self.readSubDir(os.path.join(self.topdir, item))                 
    5449 
    5550        def getSubDirectories(self): 
  • TI02-CSML/trunk/csml/csmllibs/csmlfiles.py

    r3282 r3286  
    3838                        errtest=otherfiles[0] 
    3939                except: 
    40                         print 'no other csml files in this directory' 
    4140                        #add representative file with no related files. 
    4241                        ffmap.addRepresentativeFile(repfile) 
     
    7675            for dim in repDims: 
    7776                DI.setAxis(dim) 
    78                 print DI.file 
    7977                repShapes.append(DI.getSizeOfAxis(dim)) 
    80                 print dim 
    81                 print DI.getSizeOfAxis(dim) 
    8278            DI.closeFile() 
    8379            nextotherfiles=[] 
  • TI02-CSML/trunk/csml/csmllibs/csmlxlink.py

    r2908 r3286  
    1313    ds=dataset 
    1414    if not hasattr(ds, 'storageDescriptor'): 
    15         return None 
     15        return ds 
    1616    else: 
    1717        #xlinkDictionary = {axislabel_axisspanned :(values, gmlid), .... } 
  • TI02-CSML/trunk/csml/csmlscan.py

    r3283 r3286  
    3131 
    3232    <files> is a list of file paths to scan. The files can be listed in any order,  
    33     and may be in multiple directories.  
     33    and may be in multiple directories. Currently only full path names are supported. 
    3434    These files will be marked up as a single CSML Dataset.  
    35     Please note that use of the 'directory' option will override any file arguments here. 
    3635         
    3736Options: 
    38  
    39     -d directory: All netcdf files in the directory are marked up in a single CSML file 
    40                          
    41                  
    42     -f csmlfeaturetype: The csmlFeatureType of the data. Only GridSeriesProfile is  
    43                 currently implemented. Other feature types are PointFeature 
    44                 PointSeriesFeature ProfileFeature ProfileSeriesFeature and GridFeature. 
     37     
     38    c:d:i:a:f:xt:m:po:s:v:T:h", ["configfile=","directory=","id=","minaxes=", "csmlfeaturetype=", "exitafterconfig","timedimension=", "filemapping=",  "printscreen", "outputfile=", "spatialstorage=","valuestorage=","timestorage=","help"]) 
     39 
     40    -c configfile: A config file as described on the CSML wiki here: http://proj.badc.rl.ac.uk/ndg/wiki/T02_CSML/Csmlscan#Examplecontentsofconfigfile 
     41     
     42    -d directory: Root directory. Scanner will scan all files in this directory and below. 
     43     
     44    -i id: Dataset ID. This will be written to the CSML file as the Dataset ID attribute. Otherwise a random ID is generated. 
     45     
     46    -a minaxes: A dimension threshold below which variables are not considered feature. e.g. If this is 3 only 3-Dimensional and above variables will be considered for scanning. Useful for case where auxiliary variables may confuse the scanner. 
     47     
     48    -f csmlfeaturetype: The csmlFeatureType of the data. Defaults to GridSeries. 
     49     
     50    -x:   Print out the config options that have been set, but don't do the actual scan. Useful for trying out config options. 
    4551                                                 
    46      -t timedimension:  The default time dimension is 't'. If your files use a 
     52     -t timedimension: The default time dimension is 'time' as per the CF recomendations. If your files use a 
    4753                different variable name you may supply it with this option. 
    4854 
    49     -o outputfile:      Provide the name of the output file, default is csmloutput.xml 
     55    -m filemapping: One of the file map patterns, see here for more info: http://proj.badc.rl.ac.uk/ndg/wiki/T02_CSML/Csmlscan#filessection: 
     56 
     57    -o outputfile:      The name of the output csml file, default is csmloutput.xml 
    5058                                which can be found in the directory from which the program is run 
    51         -h help:                Shows this help information. 
    52          
    53          
    54 Example: 
    55          
    56         python Coapec2csml.py -d /home/users/me/mynetcdffiles/ -o myoutput.xml 
    57                 - processes all netcdf files in the mynetcdffiles directory, outputs to 
    58                   file called myoutput.xml 
    59          
    60          
    61         python Coapec2csml.py myfile1.nc myfile2.nc myfile3.nc -t timevar 
    62                 - processes the three named files, aggregating with the time dimension 
    63                   'timevar'. Output to default file csmloutput.xml 
    64          
    65         python Coapec2csml.py -d /home/users/me/mynetcdffiles/ 
    66                                  -o myoutput.xml myfile1.nc myfile2.nc myfile3.nc  
    67          
    68                 - same as the first example. The -d option overrides the file list so files  
    69                   myfile1.nc, myfile2.nc and myfile3.nc are all ignored. Outputs to 
    70                   file called myoutput.xml. 
    71          
    72         TODO: more examples      
     59     
     60    -p: If this flag is included, the CSML output is printed to std out. 
     61     
     62    -s spatialstorage: How to store spatial domain info in the csml file: inline or fileextract 
     63     
     64    -v valuestorage: How to store rangeset info in the csml file: inline or fileextract 
     65     
     66    -T timestorage: How to store temporal info in the csml file: inline or fileextract 
     67     
     68    -h help: Shows this help information. 
     69         
     70         
     71Examples: 
     72        csmlscan -o testout3.xml -t t /home/me/files/xaaqda@pxr99c1.nc /home/me/files/xaaqda@pxs09c1.nc 
     73               - processes 2 netcdf files supplied, which have a time dimension called 't' 
     74               - output csmlfile is called testout3.xml 
     75                
     76        csmlscan -c myconfigfile.cfg 
     77                - reads settings from config file called myconfigfile.cfg 
     78                 
     79        TODO: more examples.... 
    7380         
    7481""" 
     
    9299    config = ConfigParser.ConfigParser() 
    93100    #Get command line arguments 
     101    print sys.argv 
    94102    if optargs: 
    95103        #if called as main(args) from another python module use these args, else use  
     
    97105        sys.argv =optargs 
    98106    try: 
    99             opts, args = getopt.getopt(sys.argv[1:], "c:d:f:xt:m:rpo:h", ["configfile=,directory=", "csmlfeaturetype=", "exitafterconfig","timedimension=", "filemapping=", "recursive", "printscreen", "outputfile=", "help"]) 
     107            opts, args = getopt.getopt(sys.argv[1:], "c:d:i:a:f:xt:m:po:s:v:T:h", ["configfile=","directory=","id=","minaxes=", "csmlfeaturetype=", "exitafterconfig","timedimension=", "filemapping=",  "printscreen", "outputfile=", "spatialstorage=","valuestorage=","timestorage=","help"]) 
    100108    except getopt.error, msg: 
    101109            print "Invalid options, use --help for help" 
    102110            sys.exit() 
    103111    hasConfig=False 
     112    configTest=False 
    104113    for o, v in opts: 
    105114            if o in ("-c", "--configfile"): 
    106115                configfile = v 
    107116                hasConfig=True 
    108                 configTest=False 
    109                 for o, v in opts: 
    110                     if o in ("-x", "--exitafterconfig"): 
    111                         configTest=True 
     117            elif o in ("-x", "--exitafterconfig"): 
     118                configTest=True 
    112119             
    113120    #set default values for required configs 
     121    DATASETID=None 
     122    MINAXES = 2 
    114123    PRINTSCREEN = 0 
    115124    MAPPING=None 
    116     TIMEDIMENSION=None 
     125    OUTPUTFILE='csmloutput.xml' 
     126    TIMEDIMENSION='time' 
    117127    TIMESTORAGE='inline' 
    118128    VALUESTORAGE='fileextract' 
    119129    SPATIALSTORAGE='fileextract' 
    120     FEATURETYPE=None 
     130    FEATURETYPE='GridSeries' 
     131    SELECTION=None 
     132    ROOTDIRECTORY=os.getcwd() 
    121133     
    122134    #... 
    123135    if hasConfig == True: 
    124136        config.read(configfile) 
    125         DATASETID = config.getConfigNoError('dataset', 'dsID') 
    126         FEATURETYPE = config.getConfigNoError('features', 'type') 
    127         FEATURENUMBER = config.getConfigNoError('features', 'number')         
    128  
    129         try: 
    130             MINAXES=eval(config.getConfigNoError('features','minaxes')) 
    131         except: 
    132             MINAXES=0 
    133         ROOTDIRECTORY = config.getConfigNoError('files', 'root') 
    134         SELECTION=config.getConfigNoError('files', 'selection') 
    135         MAPPING = config.getConfigNoError('files', 'mapping') 
    136         OUTPUTFILE = config.getConfigNoError('files', 'output') 
    137         PRINTSCREEN = config.getConfigNoError('files', 'printscreen') 
    138         SRSNAME = config.getConfigNoError('SpatialReference', 'srs') 
    139         TIMEDIMENSION=config.getConfigNoError('time','timedimension') 
    140         TIMESTORAGE=config.getConfigNoError('time','timestorage') 
    141         VALUESTORAGE=config.getConfigNoError('values','valuestorage') 
    142         SPATIALSTORAGE=config.getConfigNoError('spatialaxes','spatialstorage') 
    143         SEC_ALLOW=config.getConfigNoError('security', 'allow') 
    144         SEC_DENY=config.getConfigNoError('security', 'deny') 
    145          
    146         if configTest==True: 
    147             print 'Testing config file:' 
    148             print 'Enables you to check your config file has been correctly interpreted.' 
    149             print '\n' 
    150             print 'The following config options have been set:' 
    151             print '\n dataset:dsID =%s'%DATASETID 
    152             print '\n features:type =%s'%FEATURETYPE 
    153             print '\n features:number =%s'%FEATURENUMBER 
    154             print '\n features:minaxes =%s'%MINAXES 
    155             print '\n files:root =%s'%ROOTDIRECTORY 
    156             print '\n files:mapping =%s'%MAPPING 
    157             print '\n files:output =%s'%OUTPUTFILE 
    158             print '\n files:printscreen =%s'%PRINTSCREEN 
    159             print '\n SpatialReference:srs =%s'%SRSNAME 
    160             print '\n time:timedimension =%s'%TIMEDIMENSION 
    161             print '\n time:timestorage =%s'%TIMESTORAGE 
    162             print '\n spatialaxes:spatialstorage =%s'%SPATIALSTORAGE 
    163             print '\n values:valuestorage =%s'%VALUESTORAGE 
    164             print '\n security:allow =%s'%SEC_ALLOW 
    165             print '\n security:deny =%s'%SEC_DENY 
    166             sys.exit() 
     137        conf=config.getConfigNoError('dataset', 'dsID') 
     138        if conf: 
     139            DATASETID = conf   
     140        conf=config.getConfigNoError('features', 'type')  
     141        if conf: 
     142            FEATURETYPE = conf  
     143        conf=config.getConfigNoError('features','minaxes') 
     144        if conf: 
     145            MINAXES=conf 
     146        conf=config.getConfigNoError('files', 'root') 
     147        if conf: 
     148            ROOTDIRECTORY = conf  
     149        conf=config.getConfigNoError('files', 'selection') 
     150        if conf: 
     151            SELECTION=conf 
     152        conf=config.getConfigNoError('files', 'mapping') 
     153        if conf: 
     154            MAPPING = conf 
     155        conf=config.getConfigNoError('files', 'output') 
     156        if conf: 
     157            OUTPUTFILE = conf 
     158        conf=config.getConfigNoError('files', 'printscreen') 
     159        if conf: 
     160            PRINTSCREEN = conf 
     161        conf=config.getConfigNoError('time','timedimension') 
     162        if conf: 
     163            TIMEDIMENSION=conf 
     164        conf=config.getConfigNoError('time','timestorage') 
     165        if conf: 
     166            TIMESTORAGE=conf 
     167        conf=config.getConfigNoError('values','valuestorage') 
     168        if conf: 
     169            VALUESTORAGE=conf 
     170        conf=config.getConfigNoError('spatialaxes','spatialstorage') 
     171        if conf: 
     172            SPATIALSTORAGE=conf 
    167173     
    168174    else: #no config file, get command line args 
     
    171177        for o, v in opts: 
    172178            if o in ("-d", "--directory"): 
    173                     ROOTDIRECTORY = v 
     179                ROOTDIRECTORY = v 
     180            elif o in ('-i','id'): 
     181                DATASETID=v 
     182            elif o in ('-a','minaxes'): 
     183                MINAXES=v 
    174184            elif o in ("-f", "--csmlfeaturetype"): 
    175                     FEATURETYPE = v 
     185                FEATURETYPE = v 
    176186            elif o in ("-t", "--timedimension"): 
    177                     TIMEDIMENSION = v 
    178             elif o in ("-f", "--filemapping"): 
    179                     MAPPING=v 
     187                TIMEDIMENSION = v 
     188            elif o in ("-m", "--filemapping"): 
     189                MAPPING=v 
    180190            elif o in ("-p", "--printscreen"): 
    181                     PRINTSCREEN = 1 
     191                PRINTSCREEN = 1 
    182192            elif o in ("-o", "--outputfile"): 
    183                     OUTPUTFILE = v 
     193                OUTPUTFILE = v 
     194            elif o in ("-T", "--timestorage"): 
     195                TIMESTORAGE = v 
     196            elif o in ("-v", "--valuestorage"): 
     197                VALUESTORAGE = v 
     198            elif o in ("-s", "--spatialstorage"): 
     199                SPATIALSTORAGE = v 
    184200            elif o in ("-h", "--help"): 
    185                     print usage 
    186                     sys.exit()   
    187      
    188     if FEATURETYPE is None: 
    189         raise Exception('No featuretype declared in config file (or no config file)') 
    190       
    191      
     201                print usage 
     202                sys.exit()       
     203        if args is not []: 
     204            SELECTION=args 
     205 
    192206    # Handle defaults in case of no file mapping: 
    193207    if MAPPING is None: 
     
    203217            MAPPING = 'onetomany' #default filemapping for ProfileSeriesFeature (?) 
    204218        elif FEATURETYPE == "GridSeries": 
    205             MAPPING = 'onetomany' #default filemapping for GridSeriesFeature 
    206      
     219            MAPPING = 'onetomany' #default filemapping for GridSeriesFeature      
     220              
     221        print '\n Starting scan...' 
     222        print '\n' 
     223        print 'The following config options have been set:' 
     224        print '\n dataset:dsID = %s'%DATASETID 
     225        print '\n features:type = %s'%FEATURETYPE 
     226        print '\n features:minaxes = %s'%MINAXES 
     227        print '\n files:root = %s'%ROOTDIRECTORY 
     228        print '\n files.selection = %s'%SELECTION 
     229        print '\n files:mapping = %s'%MAPPING 
     230        print '\n files:output = %s'%OUTPUTFILE 
     231        print '\n files:printscreen = %s'%PRINTSCREEN 
     232        print '\n time:timedimension = %s'%TIMEDIMENSION 
     233        print '\n time:timestorage = %s'%TIMESTORAGE 
     234        print '\n spatialaxes:spatialstorage = %s'%SPATIALSTORAGE 
     235        print '\n values:valuestorage = %s'%VALUESTORAGE 
     236        print '\n For more information on config options run the command "csmlscan --help"' 
     237         
     238         
     239        if configTest==True: 
     240            #don't actually start the scan 
     241            sys.exit() 
     242             
     243             
     244         
    207245    #build CSML document 
    208     print ROOTDIRECTORY 
    209     csmldataset=csmllibs.csmlbuilder.csmlBuilder(DATASETID,ROOTDIRECTORY,SELECTION,FEATURETYPE,MAPPING,TIMEDIMENSION, OUTPUTFILE, PRINTSCREEN,TIMESTORAGE,SPATIALSTORAGE,VALUESTORAGE, MINAXES, SEC_ALLOW, SEC_DENY) 
     246    csmldataset=csmllibs.csmlbuilder.csmlBuilder(DATASETID,ROOTDIRECTORY,SELECTION,FEATURETYPE,MAPPING,TIMEDIMENSION, OUTPUTFILE, PRINTSCREEN,TIMESTORAGE,SPATIALSTORAGE,VALUESTORAGE, MINAXES) 
    210247    csmldataset.build() 
    211248 
Note: See TracChangeset for help on using the changeset viewer.