Changeset 1225


Ignore:
Timestamp:
21/06/06 08:28:27 (13 years ago)
Author:
astephen
Message:

Latest version from laptop.
Not yet merged with glue branch.

Location:
TI03-DataExtractor/trunk
Files:
29 added
19 edited

Legend:

Unmodified
Added
Removed
  • TI03-DataExtractor/trunk/authors_notes/bugs.txt

    r1153 r1225  
    1 These are bugs outside of trac: 
    2  
    3 CSML and NetCDF files not listed by client in multiple extract. 
    4  
    5 Output format options not doing CSML - hard coded in client!!! 
    6  
    7 Need to re-instate e-mailing client - can we get the mail address from NDG security. 
  • TI03-DataExtractor/trunk/authors_notes/glue_install_notes.txt

    r1184 r1225  
     1*******FIXED BETWEEN********* 
    12setup.py needs changing: 
    23 
     
    1819---------------- 
    1920 
     21 
    2022dxs - setup.py didn't create SESSION_OBJECT_DIR so needs to be fixed to do that. 
    2123 
     
    2628- changed mine to: 
    2729perl -p -i.bak -w -e 's!/usr/local/test/dxs!/disks/glue1/astephens/dxs!g;' ../../dxs/datasets/inputDatasets.xm?   
     30 
    2831 
    2932----------------- 
     
    129132        pathList=[pathList] 
    130133        secureToken=[secureToken] 
    131  
     134**************BETWEEN THESE LINES I'VE FIXED IN SOURCE******** 
    132135 
    133136---------- 
    134  
    135  
    136  
    137  
     137======================= 
     1382nd attempt: 
     139 
     140unpacked,  
     141 
     142cp ../../dx.bak.1/install.glue ./ 
     143cp install.glue install.conf 
     144 
     145 1096  tar -xzvf dxs-0.2.1.tar.gz 
     146 1097  tar -xzvf pydxs-0.2.1.tar.gz 
     147 1098  tar -xzvf pydxc-0.2.1.tar.gz 
     148 1099  tar -xzvf dxc-0.2.1.tar.gz 
     149 
     150cd  pydxs-0.2.1 
     151 
     152/usr/local/NDG/cdat4.0_cdunifpp0.6/bin/python setup.py install --dxs-only 
     153/usr/local/NDG/cdat4.0_cdunifpp0.6/bin/python /disks/glue1/astephens/dxs/bin/DXWSInterface.py 
     154 
     155Server working... 
     156 
     157But needed to change to: 
     158#from ZSI.version import Version 
     159Version=(1,6,1) 
     160 
     161============ 
     162 
     163Tested with old: 
     164 
     165/usr/local/NDG/ActivePython-2.4/bin/python /disks/glue1/astephens/dxc/scripts/exampleCLCClient1.py 
     166 
     167It worked. 
     168 
     169========= 
     170Re-installed client for good measure: 
     171 
     172sudo su 
     173 
     174cd ../pydxc-0.2.1/ 
     175 
     176/usr/local/NDG/ActivePython-2.4/bin/python setup.py install --dxc-only 
     177 
     178Worked but didn't change dir ownership to astephen. Did this manually: 
     179 
     180sudo su 
     181chown -Rf astephen.users /disks/glue1/astephens/dxc /var/www/html/dx 
     182 
     183Then it worked, now sort the web-client: 
     184 
     185Made some changes in /var/www/cgi-bin/dxui for zsi specific stuff. 
     186 
     187WHilst testing browser - noted that cookie wasn't being made, found that install hadn't overwritten old securityViaCGI.py file, so just copied it into place! 
     188 
     189Unhid import of API in CSMLDataHandler.py 
     190 
     191Also added paths to DXWSInterface as: 
     192 
     193# Set up path for local python stuff on glue 
     194items=("/disks/glue1/astephens/csml/parser", 
     195       "/disks/glue1/astephens/csml/Scanner", 
     196       "/disks/glue1/astephens") 
     197for i in items: 
     198    sys.path.append(i) 
     199 
     200-------------------------- 
     201 
     202Getting back to dxui testing... 
     203 
     204When submitting axis selections got a major problem with unparseable message (i.e. zsi didn't support). WOrked out that 
     205it didn't like: 
     206 
     207["axis_2.3.4.5", [3.4, 55.4]] - the floats were beyond it. 
     208So changed as follows: 
     209 
     210Line 187: 
     211                    iList=[int(i) for i in iList] 
     212                except: 
     213                    pass 
     214 
     215 
     216Then more changes that will be copied back to main version. 
     217 
     218---------- 
     219 
     220QUirky bug in installed DisplayManager.py - did not have latest version with commented out "Save request and upload request". 
     221 
     222Also need to comment out: 
     223 
     224        #print '<P><A HREF="%s?action=saveRequest&sessionID=%s">Get Request XML only.</A>' % (CGI_SCRIPT_URL_PATH, sessionID) 
     225 
     226---------------------- 
     227 
     228Copying dxui back to source to add to original source: 
     229 
     230NOTE: COPIED BACK all DXUI changes. 
     231             
     232            self.args["axis_%s" % axisInd 
     233 
     234---------------------------------- 
     235Note: exampleCLClient[24].py have not been updated with zsi rules. 
     236 
     237------------------ 
     238Updated exampleCLClient3.py to use CSML to test here: 
     239 
     240Copied code from exampleCLClient1.py 
     241 
     242Needed also to change times because nc file was copied over with var2.nc 
     243 
     244print "\nformat selected, remaining options...?" 
     245print server.selectOptions(sessionID, [["secureToken",secureToken], ["outputFormat_1.1.1", "CSML/NetCDF"]]) 
     246 
     247HAD TO ABANDON THIS BECAUSE OF SPURIOUS NETCDF ERROR - NEED TO GET COAPEC DATA visible. 
     248------------------- 
     249 
     250did some find and replace to fix paths, in xml and csml: 
     251 
     252 1009  perl -p -i -w -e 's!/usr/local/test/dxs!/disks/glue1/astephens/dxs!g;' /disks/glue1/astephens/dxs/datasets/inputDatasets.xm? 
     253 1016  perl -p -i -w -e 's!/usr/local/test/dxs!/disks/glue1/astephens/dxs!g;' /disks/glue1/astephens/dxs/testdata/csml1.xml 
     254 
     255---------- 
     256 
     257Problem with the NetCDF file being used for CSML... 
     258impor>>> import cdms 
     259>>> f=cdms.open('/disks/glue1/astephens/dxs/testdata/csmlnc1.nc') 
     260CDMS I/O error: HDF I/O routines not available, file /disks/glue1/astephens/dxs/testdata/csmlnc1.nc. 
     261 
     262So, copied var2.nc to csmlnc2.nc 
     263 
     264cp /disks/glue1/astephens/dxs/testdata/var2.nc /disks/glue1/astephens/dxs/testdata/csmlnc1.nc  
     265 
     266------------------------- 
     267 
     268START ON COAPEC DATA: 
     269 
     270Looks like astephen can read coapec so good: 
     271 
     272Get the metadata files. 
     273 
     274mkdir /disks/glue1/astephens/coapec_metadata 
     275 
     276Pinched from bscw.badc.rl.ac.uk:/disks/mistral2/data/Files/09/28/??? 
     277 
     278They needed renaming (linking): 
     279 
     280COAPEC_500YrRun_wholerun_annual_atmos.xml -> 21F 
     281COAPEC_500YrRun_wholerun_annual_ocean.xml -> 24F 
     282COAPEC_500YrRun_wholerun_decadal_atmos.xml -> 27F 
     283COAPEC_500YrRun_wholerun_decadal_ocean.xml -> 30F 
     284COAPEC_500YrRun_wholerun_monthly_atmos.xml -> 33F 
     285COAPEC_500YrRun_wholerun_monthly_ocean.xml -> 36F 
     286COAPEC_500YrRun_wholerun_seasonal_atmos.xml -> 39F 
     287COAPEC_500YrRun_wholerun_seasonal_ocean.xml -> 42F 
     288 
     289--------------------- 
     290 
     291NOTE: existing diffs in DXWSInterface.py on glue and my working copy: 
     292 
     293as56@linux:~/abstractWebService/releases/dx/dxs/bin> diff DXWSInterface.py dxws.py 
     29437c37 
     295< Version=(2,0,0)#(1,6,1) # of client ZSI - not this one! 
     296--- 
     297> Version=(1,6,1)#(2,0,0)#(1,6,1) # of client ZSI - not this one! 
     29849a50,56 
     299> 
     300> # Set up path for local python stuff on glue 
     301> items=("/disks/glue1/astephens/csml/parser", 
     302>        "/disks/glue1/astephens/csml/Scanner", 
     303>        "/disks/glue1/astephens") 
     304> for i in items: 
     305>     sys.path.append(i) 
     306 
     307-------------------- 
     308 
     309Emptied out inputDatasets.xml: 
     310 
     311astephen@glue$ cleanOutDatasetXMLFile.py 
     312Backup file is: /disks/glue1/astephens/dxs/datasets/inputDatasets.xml.20060615.114415.bak 
     313 
     314Dataset XML file emptied out: /disks/glue1/astephens/dxs/datasets/inputDatasets.xml 
     315astephen@glue$ more /disks/glue1/astephens/dxs/datasets/inputDatasets.xml 
     316<?xml version="1.0" ?> 
     317<!-- DXDataInputs is the top level node in this XML tree --> 
     318<DXDataInputs> 
     319 
     320    <!-- A DXDatasetGroup is a superset of a DXDataset, essentially just a         cont 
     321ainer object for logical groupings of datasets. --> 
     322 
     323</DXDataInputs> 
     324 
     325------------------ 
     326 
     327Added COAPEC datasetGroup... 
     328astephen@glue$ addDatasetGroup.py -s coapec -l "Coupled Ocean-Atmosphere Processes and European Climate" -p coapec -r coapec -b http://glue.badc.rl.ac.uk/cgi-bin//browse.py?uri=badc.nerc.ac.uk/COAPEC_HadCM3_500Yr -w http://badc.nerc.ac.uk/data/coapec 
     329 
     330------------------ 
     331 
     332Added monthly atmospheric data: 
     333 
     334$ addDataset.py -s monthly_atmos -l "500-Year Run: Atmospheric Monthly means" -g coapec -r coapec,dset2 -a badc.nerc.ac.uk/COAPEC_500YrRun_wholerun_monthly_atmos 
     335 
     336-------------- 
     337 
     338Testing browser... 
     339 
     340Did DSG and DS, failed at variable so added to installed DXDMLHandler.py 
     341Line 81:                     dsURI="/disks/glue1/astephens/coapec_metadata/"+os.path.split(dsURI)[-1]+".xml" 
     342 
     343And in DXWSInterface.py - selectOptions 
     344        if newkey[:11]=="datasetURI_": 
     345            value="/disks/glue1/astephens/coapec_metadata/"+os.path.split(value)[-1]+".xml" 
     346 
     347Then just changed the inputDatasets.xml file so it was pointing to the file rather than the ID: 
     348 
     349               <usageMetadataLink> 
     350 
     351         file:/disks/glue1/astephens/dxs/testdata/testdata2.xml 
     352 
     353 
     354 
     355--------- 
     356Time issue in CSML, changed for coapec - hard-coded: 
     357/usr/local/NDG/cdat4.0_cdunifpp0.6/lib/python2.4/site-packages/pydxs/CSMLDataHandler.py 
     358 
     359find and replace most "time" to "t", but not all. 
     360 
     361Changes to ops_GridSeriesFeature.py 
     362 
     363Line 50: 
     364def fuzzyMatch(axis): 
     365    import re 
     366    match=re.match(r"(latitude|longitude|level)_\d+", axis) 
     367    if match: 
     368        return match.groups()[0] 
     369    return axis 
     370 
     371above is probably not the best solution 
     372 
     373Line 123: 
     374 
     375        fuzzykey=fuzzyMatch(key) 
     376        if fuzzykey in kwargs: 
     377            for val in dc[key]: 
     378                if val >= kwargs[fuzzykey][0]: 
     379                    if val <= kwargs[fuzzykey][1]: 
     380                        arraySize=arraySize+1 
     381                        straxisValues=straxisValues+ str(val) + ', ' 
     382 
     383----------------------------------- 
     384 
     385Tonnes of CSML arsing around only to find Bryan needs to select: 
     386 
     387Rewritten CSMLDataHandler.py 
     388 
     3891. dataset monthly atmos - deselect all - GROSS PRIMARY PROD -  
     390Fails if you do a wrap around the greenwich meridian. 
     391Going back and forward confuses it so start new query to do new stuff. 
     392No differencing yet. 
     393 
     394haven't tested multiple selections yet. 
     395 
     396These also appeared to work... 
     397Dataset Group 1 Coupled Ocean-Atmosphere Processes and European Climate 
     398Dataset 1.1     500-Year Run: Atmospheric Monthly means 
     399Variable 1.1.34 gproduct 
     400Output format 1.1.34    CSML/NetCDF 
     401Axis 1.1.34.1   ['2793-01-16T00:00:0.000000', '2793-03-16T00:00:0.000000'] 
     402Axis 1.1.34.2   [0, 56] 
     403Axis 1.1.34.3   [0, 88] 
     404Dataset 1.2     500-Year Run: Ocean Monthly means 
     405Variable 1.2.33 outflow 
     406Output format 1.2.33    CSML/NetCDF 
     407Axis 1.2.33.1   ['2789-12-16T00:00:0.000000', '2789-12-16T00:00:0.000000'] 
     408Axis 1.2.33.2   [-33, 45] 
     409Axis 1.2.33.3   [0, 88] 
     410 
     411-------------- 
     412So, in dxs/scripts/addTheLot.py you can now ingest all the files: 
     413 
     414#!/usr/bin/env python 
     415 
     416"""addTheLot.py - adds all COAPEC datasets to the DX, and the datasetGroup of course!""" 
     417 
     418import sys, os 
     419 
     420print "Clearing out..." 
     421os.system("cleanOutDatasetXMLFile.py") 
     422 
     423print "Adding dataset Group..." 
     424os.system('addDatasetGroup.py -s coapec -l "Coupled Ocean-Atmosphere Processes and European Climate" -p coapec -r coapec -b http://glue.badc.rl.ac.uk/cgi-bin/browse.py?uri=badc.nerc.ac.uk/COAPEC_HadCM3_500Yr -w http://badc.nerc.ac.uk/data/coapec') 
     425 
     426for location in ("Atmospheric", "Ocean"): 
     427    lclc=location[:5].lower() 
     428    for timeperiod in ("decadal", "annual", "monthly", "seasonal"): 
     429        uctp=timeperiod.title() 
     430        cmd="""addDataset.py -s %s_%s -l "500-Year Run: %s %s means" -g coapec -r coapec,dset2 -a file:/disks/glue1/astephens/coapec_metadata/COAPEC_500YrRun_wholerun_%s_%s.xml""" % (timeperiod, lclc, location, uctp, timeperiod, lclc) 
     431        print cmd 
     432        os.system(cmd) 
     433--------------------------------------- 
     434 
     435============= INSTALLING GEOSPLAT ====================== 
     436OK. Bundled up old version with old ZSI support and setn to glue. 
     437Unpacked and created install.glue with various changes. Putting all in NDG-Active Python as root. 
     438 
     439BUT - can't have cdat there so can't install it in that python. Better off getting it all running with ZSI2.0 and doing on my machine first. 
     440 
     441 
     442--------------------------------- 
     443see: 
     444releasese/dx/glue_coapec_changes 
     445for changes so far!!! 
     446 
     447 
     448-------------------------- 
     449 
  • TI03-DataExtractor/trunk/authors_notes/svn_usage.sh

    r1160 r1225  
     1rm -fR /home/as56/abstractWebService/releases/dx/dist/* 
    12cd /home/as56/sandboxes/dx 
    23rm -fR /home/as56/sandboxes/dx/* 
  • TI03-DataExtractor/trunk/cgi/dxui

    r1184 r1225  
    1919# Import SOAP library 
    2020from ZSI.client import Binding 
     21from ZSI.version import Version as zsiv 
     22zsiv=float("%s.%s" % zsiv[:2]) 
    2123         
    2224# Import package modules 
     
    183185         
    184186            try: 
    185                 iList=[float(i) for i in iList] 
     187                if zsiv>=2.0: 
     188                    iList=[float(i) for i in iList] 
     189                else: 
     190                    iList=[int(i) for i in iList] 
    186191            except: 
    187192                try: 
     
    294299        # Get summary of request and determine number of datasets     
    295300        #self.summary=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0] 
    296         """numDatasetsMatch=re.search(r"numberOfDatasets:\t(\d+)", self.summary) 
    297         if numDatasetsMatch: 
    298             self.numberOfDatasets=int(numDatasetsMatch.groups()[0])""" 
    299301             
    300302        # Analyse the request 
     
    309311        if not self.args.has_key("sessionID") or self.args["sessionID"] in (None, "None", "undefined"): 
    310312            # Start session if not known about 
    311             self.sessionID, self.secureToken=self.server.callServerMethod("startSession", 
    312                                                  [self.username, self.password, self.secureToken])[0] 
     313            if zsiv>=2.0: 
     314                self.sessionID, self.secureToken=self.server.callServerMethod("startSession", [self.username, self.password, self.secureToken])[0] 
     315            else: 
     316                self.sessionID, self.secureToken=self.server.callServerMethod("startSession", [self.username, self.password, self.secureToken]) 
    313317        else: 
    314318            self.sessionID=self.args["sessionID"]  
     
    333337            action=self.args["action"] 
    334338            if action=="viewRequestSummary": 
    335                 summaryString=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0][0][0] 
    336                 self.displayer._displayHTTPHeader()  
     339                summaryString=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0] 
     340                if zsiv>=2.0: 
     341                    summaryString=summaryString[0][0] 
     342 
    337343                self.displayer._displayHTMLHeader() 
    338344                if RESTRICTED_DATA==1: self.displayer._displayLoginBar(self.username, loginStatus="in", loginMessage="with roles: "+str(self.userRoles)) 
     
    382388            # Need to delete targetPage otherwise it will stay forever 
    383389            del self.args["targetPage"] 
    384         response=self.server.callServerMethod("selectOptions", [self.sessionID, self._packArgsAsList(self.args)]) 
    385          
     390 
     391        response=self.server.callServerMethod("selectOptions", [self.sessionID, self._packArgsAsList(self.args)]) 
    386392        #self.displayer._displayHTTPHeader() 
    387393        (optionCategories, options, optionStrings, summaryString, secureToken)=self._translateResponse(response)         
     
    395401        (optionCategories, options, optionStrings, secureToken) 
    396402        """ 
    397         response=response[0][0][0] 
     403        response=response[0]         
     404        if zsiv>=2.0: 
     405            response=response[0][0] 
    398406        optionCategories=[item[0] for item in response[:-2]] 
    399407        options=[item[1] for item in response[:-2]] 
     
    452460            # Or display final job processing page       
    453461            elif self.args.has_key("action") and self.args["action"]=="requestCosts":    
    454                 (estimatedDuration, estimatedVolume)=self.server.callServerMethod("getExtractionCosts",  
    455                                                           [self.sessionID, self.secureToken])[0][0:2] 
     462                response=self.server.callServerMethod("getExtractionCosts",  
     463                                                          [self.sessionID, self.secureToken])  #[0][0:2] 
     464                if zsiv>=2.0: 
     465                    response=response[0] 
     466 
     467                (estimatedDuration, estimatedVolume)=response[0:2] 
    456468                self.displayer._displayHTTPHeader()  
    457469                self.displayer._displayHTMLHeader() 
    458470                if RESTRICTED_DATA==1: self.displayer._displayLoginBar(self.username, loginStatus="in", loginMessage="with roles: "+str(self.userRoles)) 
    459471                self.displayer._displayProcessingSection(estimatedDuration, estimatedVolume, self.sessionID) 
    460                 pathList, self.secureToken=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])[0] 
     472                response=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])  #[0] 
     473                 
     474                if zsiv>=2.0: 
     475                    response=response[0] 
     476                pathList, self.secureToken=response 
    461477                #print "<P>", pathList, len(pathList) 
    462478                self.displayer._displayOutputFileList(pathList)  
  • TI03-DataExtractor/trunk/dist/cgi/dxui

    r1184 r1225  
    1919# Import SOAP library 
    2020from ZSI.client import Binding 
     21from ZSI.version import Version as zsiv 
     22zsiv=float("%s.%s" % zsiv[:2]) 
    2123         
    2224# Import package modules 
     
    183185         
    184186            try: 
    185                 iList=[float(i) for i in iList] 
     187                if zsiv>=2.0: 
     188                    iList=[float(i) for i in iList] 
     189                else: 
     190                    iList=[int(i) for i in iList] 
    186191            except: 
    187192                try: 
     
    294299        # Get summary of request and determine number of datasets     
    295300        #self.summary=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0] 
    296         """numDatasetsMatch=re.search(r"numberOfDatasets:\t(\d+)", self.summary) 
    297         if numDatasetsMatch: 
    298             self.numberOfDatasets=int(numDatasetsMatch.groups()[0])""" 
    299301             
    300302        # Analyse the request 
     
    309311        if not self.args.has_key("sessionID") or self.args["sessionID"] in (None, "None", "undefined"): 
    310312            # Start session if not known about 
    311             self.sessionID, self.secureToken=self.server.callServerMethod("startSession", 
    312                                                  [self.username, self.password, self.secureToken])[0] 
     313            if zsiv>=2.0: 
     314                self.sessionID, self.secureToken=self.server.callServerMethod("startSession", [self.username, self.password, self.secureToken])[0] 
     315            else: 
     316                self.sessionID, self.secureToken=self.server.callServerMethod("startSession", [self.username, self.password, self.secureToken]) 
    313317        else: 
    314318            self.sessionID=self.args["sessionID"]  
     
    333337            action=self.args["action"] 
    334338            if action=="viewRequestSummary": 
    335                 summaryString=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0][0][0] 
    336                 self.displayer._displayHTTPHeader()  
     339                summaryString=self.server.callServerMethod("summariseRequest", [self.sessionID, self.secureToken])[0] 
     340                if zsiv>=2.0: 
     341                    summaryString=summaryString[0][0] 
     342 
    337343                self.displayer._displayHTMLHeader() 
    338344                if RESTRICTED_DATA==1: self.displayer._displayLoginBar(self.username, loginStatus="in", loginMessage="with roles: "+str(self.userRoles)) 
     
    382388            # Need to delete targetPage otherwise it will stay forever 
    383389            del self.args["targetPage"] 
    384         response=self.server.callServerMethod("selectOptions", [self.sessionID, self._packArgsAsList(self.args)]) 
    385          
     390 
     391        response=self.server.callServerMethod("selectOptions", [self.sessionID, self._packArgsAsList(self.args)]) 
    386392        #self.displayer._displayHTTPHeader() 
    387393        (optionCategories, options, optionStrings, summaryString, secureToken)=self._translateResponse(response)         
     
    395401        (optionCategories, options, optionStrings, secureToken) 
    396402        """ 
    397         response=response[0][0][0] 
     403        response=response[0]         
     404        if zsiv>=2.0: 
     405            response=response[0][0] 
    398406        optionCategories=[item[0] for item in response[:-2]] 
    399407        options=[item[1] for item in response[:-2]] 
     
    452460            # Or display final job processing page       
    453461            elif self.args.has_key("action") and self.args["action"]=="requestCosts":    
    454                 (estimatedDuration, estimatedVolume)=self.server.callServerMethod("getExtractionCosts",  
    455                                                           [self.sessionID, self.secureToken])[0][0:2] 
     462                response=self.server.callServerMethod("getExtractionCosts",  
     463                                                          [self.sessionID, self.secureToken])  #[0][0:2] 
     464                if zsiv>=2.0: 
     465                    response=response[0] 
     466 
     467                (estimatedDuration, estimatedVolume)=response[0:2] 
    456468                self.displayer._displayHTTPHeader()  
    457469                self.displayer._displayHTMLHeader() 
    458470                if RESTRICTED_DATA==1: self.displayer._displayLoginBar(self.username, loginStatus="in", loginMessage="with roles: "+str(self.userRoles)) 
    459471                self.displayer._displayProcessingSection(estimatedDuration, estimatedVolume, self.sessionID) 
    460                 pathList, self.secureToken=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])[0] 
     472                response=self.server.callServerMethod("createOutput", [self.sessionID, self.secureToken])  #[0] 
     473                 
     474                if zsiv>=2.0: 
     475                    response=response[0] 
     476                pathList, self.secureToken=response 
    461477                #print "<P>", pathList, len(pathList) 
    462478                self.displayer._displayOutputFileList(pathList)  
  • TI03-DataExtractor/trunk/dist/install.sh

    r1109 r1225  
    1 v="0.2.1" 
     1v="0.3.0" 
    22rm -rR *tar *gz README.txt *conf dx? pydx? pydx?-?.? pydx?-?-?.? cgi web_extras 
    33 
  • TI03-DataExtractor/trunk/dxc/scripts/exampleCLClient1.py

    r1160 r1225  
    11#!/usr/bin/env python 
    22import sys 
    3 sys.path=sys.path+["..","scripts","../..",".", "../../pydxc"] 
    4  
     3import re 
    54#import readline 
    65from ZSI.client import Binding 
     
    87from pydxc.clientConfig import SOAP_SERVER_URL 
    98 
     9urlPattern=re.compile(r"(\w+)://([\w.]+):(\d+)/(.*)$") 
     10(transport, soap_server_host, soap_server_port, cmd)=urlPattern.match(SOAP_SERVER_URL).groups() 
     11print transport, soap_server_host, soap_server_port 
     12 
     13from ZSI.version import Version as zsiv 
     14zsiv=float("%s.%s" % zsiv[:2]) 
     15print zsiv 
     16         
    1017# start session 
    11 server = Binding(url=SOAP_SERVER_URL) 
    12 (sessionID, secureToken)=server.startSession("jane", "jane1")[0] 
     18if zsiv<2.0: 
     19    server=Binding(url="", host=soap_server_host, port=soap_server_port) 
     20else: 
     21    server = Binding(url=SOAP_SERVER_URL) 
     22 
     23resp=server.startSession("jane", "jane1") 
     24if zsiv>=2.0: 
     25    resp=resp[0] 
     26 
     27(sessionID, secureToken)=resp 
    1328print sessionID 
    1429 
     
    3651print sessionID 
    3752print "\ncomplete" 
    38 print server.isComplete(sessionID, secureToken) 
     53c=server.isComplete(sessionID, secureToken) 
     54if zsiv>=2.0: 
     55    c=c[0] 
     56 
     57print c[0] 
     58print str(c[1][0]) 
     59 
     60print "\nGet extraction costs..." 
     61print server.getExtractionCosts(sessionID, secureToken) 
    3962 
    4063print "\noutput" 
     
    4265 
    4366print x 
    44 x=deUnicodeObject(x[0][0][0]) 
     67x=deUnicodeObject(x[0][0]) 
     68 
     69if zsiv>=2.0: 
     70    x=x[0] 
    4571 
    4672print "\n", x 
  • TI03-DataExtractor/trunk/dxs/bin/DXWSInterface.py

    r1184 r1225  
    3434import os, types 
    3535 
     36# Get configuration file as first argument 
     37#args=sys.argv[1:] 
     38#if len(args)!=1: 
     39#    print "ERROR: please provide the location of the configuration file as the only argument to this script." 
     40#    sys.exit() 
     41     
     42#configFile=args[0] 
     43#configPath, configFilename=os.path.split(configFile) 
     44#sys.path.insert(0, configPath) 
     45#exec ("from %s import *" % configFilename[:-3]) 
     46 
     47from ZSI import dispatch 
     48#from ZSI.version import Version 
     49Version=(2,0,0)#(1,6,1) # of client ZSI - not this one! 
     50# Sort the ZSI version out 
     51zsiversion=float("%s.%s" % Version[:2]) 
     52 
    3653# Import package modules 
    3754from pydxs.common import * 
     
    4360# Set global variables 
    4461timePattern=re.compile("(\d{4})-(\d{1,2})-(\d{1,2}).(\d{1,2}):(\d{1,2}):(\d{1,2}(\.\d+)?)") 
    45  
    46   
     62           
     63 
    4764def callControllerDirectly(argList): 
    4865    """ 
     
    89106    secureToken=controller.secureToken 
    90107    # Have to return list of lists for ZSI to work (?!) 
     108 
     109    if zsiversion<2.0: 
     110        sessionID=[sessionID] 
     111        secureToken=[secureToken] 
    91112    print sessionID, secureToken 
    92113    return [sessionID, secureToken] 
     
    212233    print controller.bag 
    213234    pathList=controller.bag["outputFilePaths"] 
     235 
     236    if zsiversion<2.0: 
     237        pathList=[pathList] 
     238        secureToken=[secureToken] 
     239 
    214240    return [pathList, secureToken] 
    215241 
     
    331357        return "Could not provide the Request XML string:   "+str(error) 
    332358     
    333     print "Check the XML:", dataSubsetSpecifierXMLString 
    334     return [dataSubsetSpecifierXMLString, secureToken] 
     359    print dataSubsetSpecifierXMLStringprint  
     360    return [[dataSubsetSpecifierXMLString], [secureToken]] 
    335361 
    336362 
     
    352378    (estimatedDuration, estimatedVolume)=(controller.estimatedDuration, controller.estimatedVolume) 
    353379    print "Returning...", [estimatedDuration, estimatedVolume, secureToken] 
     380 
     381    if zsiversion<2.0: 
     382        estimatedDuration=[estimatedDuration] 
     383        estimatedVolume=[estimatedVolume] 
     384        secureToken=[secureToken] 
     385 
    354386    return [estimatedDuration, estimatedVolume, secureToken]        
    355387 
     
    425457 
    426458if __name__=="__main__":  
    427     """ 
    428     Serve all functions as Web Service methods. 
    429     """ 
    430     print "Importing SOAP library (ZSI)." 
    431     from ZSI import dispatch 
     459    # Serve all functions as Web Service methods. 
     460     
    432461    print "Setting up server" 
    433462    portNumber=SOAP_SERVER_PORT 
  • TI03-DataExtractor/trunk/dxs/datasets/inputDatasets.xml

    r1138 r1225  
    120120                                                                                                                                                                                                 
    121121                <usageMetadataLink> 
    122                                                                                                                         file:/usr/local/test/dxs/testdata/testdata1.xml                                                                                 
     122                                                                                                                        file:DATASET_PATH_TO_CHANGE/testdata1.xml                                                                                 
    123123                </usageMetadataLink> 
    124124                                                                                                                                                                                                 
     
    258258                                                                                                                                                                                                 
    259259                <usageMetadataLink> 
    260                                                                                                                         file:/usr/local/test/dxs/testdata/testdata2.xml                                                                                 
     260                                                                                                                        file:DATASET_PATH_TO_CHANGE/testdata2.xml                                                                                 
    261261                </usageMetadataLink> 
    262262                                                                                                                                                                                                 
     
    396396                                                                                                                                                                                                 
    397397                <usageMetadataLink> 
    398                                                                                                                         file:/usr/local/test/dxs/testdata/testdata3.xml                                                                                 
     398                                                                                                                        file:DATASET_PATH_TO_CHANGE/testdata3.xml                                                                                 
    399399                </usageMetadataLink> 
    400400                                                                                                                                                                                                 
     
    489489                </discoveryMetadataLink> 
    490490                <usageMetadataLink> 
    491                     file:/usr/local/test/dxs/testdata/csml1.xml 
     491                    file:DATASET_PATH_TO_CHANGE/csml1.xml 
    492492                </usageMetadataLink> 
    493493                <documentationLink> 
  • TI03-DataExtractor/trunk/install.sh

    r1109 r1225  
    1 v="0.2.1" 
     1v="0.3.0" 
    22rm -rR *tar *gz README.txt *conf dx? pydx? pydx?-?.? pydx?-?-?.? cgi web_extras 
    33 
  • TI03-DataExtractor/trunk/pydxc/SecurityViaCGI.py

    r1184 r1225  
    8080        else: 
    8181            return "Username '%s' unknown." % self.username 
    82  
    83     def dummy(self): 
    84         c=Cookie.SimpleCookie() 
    85         c["DX"]="somethingOrother" 
    86         c["DX"]["domain"]="localhost" 
    87         c["DX"]["path"]="/" 
    88         print c 
     82  
    8983 
    9084    def _createCookie(self, username, userRoles, expiryTime=None): 
     
    9286        Writes a cookie to the user's browser cookie cache. 
    9387        """ 
    94         self.dummy() 
    9588        # NOTE: This should be brought up to date with W3C spec on Cookies 
    9689        endTime=time.time()+TOKEN_VALID_LIFETIME 
     
    10396 
    10497        # Use expiry time of zero to delete a cookie, or other time if used 
    105         if expiryTime!=None: 
     98        if expiryTime==None: 
    10699            expiryTime=endTimeString 
    107100                 
  • TI03-DataExtractor/trunk/pydxc/WSCaller.py

    r1109 r1225  
    1313 
    1414# Import standard library modules 
    15 import os, sys 
     15import os, sys, re 
    1616 
    1717# Import SOAP library 
     
    3535        # Set up SOAP bindings 
    3636        trace=open('/tmp/tracefile.txt','w') 
    37         self.server=Binding(url='', host=SOAP_SERVER_NAME, port=SOAP_SERVER_PORT, tracefile=trace)               
     37         
     38        # Need to deal with different ZSI versions 
     39         
     40        urlPattern=re.compile(r"(\w+)://([\w.]+):(\d+)/(.*)$") 
     41        (transport, soap_server_host, soap_server_port, cmd)=urlPattern.match(SOAP_SERVER_URL).groups() 
     42        from ZSI.version import Version as zsiv 
     43        zsiv=float("%s.%s" % zsiv[:2]) 
     44        if zsiv<2.0: 
     45            self.server=Binding(url="", host=soap_server_host, port=soap_server_port) 
     46        else: 
     47            self.server = Binding(url=SOAP_SERVER_URL) 
     48         
     49        #self.server=Binding(url='', host=SOAP_SERVER_NAME, port=SOAP_SERVER_PORT, tracefile=trace)              
    3850 
    3951 
  • TI03-DataExtractor/trunk/pydxc/version.py

    r794 r1225  
    1111""" 
    1212 
    13 version="0.1.3.1" 
     13version="0.3.0" 
  • TI03-DataExtractor/trunk/pydxs/DXController.py

    r1160 r1225  
    195195        """ 
    196196        if SECURITY_MODEL=="basic": 
    197             secChecker=NDGSecurityManager(self.username, self.password, self.secureToken) 
     197            secChecker=SecurityManager(self.username, self.password, self.secureToken) 
    198198        elif SECURITY_MODEL=="ndg": 
    199             secChecker=SecurityManager(self.username, self.password, self.secureToken)  
     199            secChecker=NDGSecurityManager(self.username, self.password, self.secureToken)  
    200200        else: 
    201201            raise DXSecurityError, "Security model '%s' not supported." % SECURITY_MODEL 
  • TI03-DataExtractor/trunk/pydxs/DXDMLHandler.py

    r1200 r1225  
    7979                    dsName=ds.getElementsByTagName("dxDatasetLongName")[0].childNodes[0].nodeValue.strip() 
    8080                    dsURI=ds.getElementsByTagName("usageMetadataLink")[0].childNodes[0].nodeValue.strip() 
    81                     #dsURI="/disks/glue1/astephens/coapec_metadata/"+os.path.split(dsURI)[-1]+".xml" 
    8281                    rtlist.append([dsName, dsURI]) 
    8382 
     
    139138                return i[2] 
    140139        raise DXOptionHandlingError, "Cannot match any dataset group to the datasetURI: '%s'" % datasetURI 
    141  
    142  
    143     def getDatasetGroupAndDatasetFromURI(self, datasetURI): 
    144         """ 
    145         Gets the id of the dataset group and dataset from a 
    146         datasetURI (if it is known to the dx). 
    147         """ 
    148         URI_list=self.getDatasetURIList() 
    149         for i in URI_list: 
    150             print i 
    151             if i[0]==datasetURI or i[0]==("file:"+datasetURI): 
    152                 return (i[2], i[1]) 
    153         raise DXOptionHandlingError, "Cannot match any dataset group and dataset to the datasetURI: '%s'" % datasetURI 
    154140 
    155141 
  • TI03-DataExtractor/trunk/pydxs/OptionHandler.py

    r1201 r1225  
    6565                        optsRequested="dataset"  # to ensure all options are at this level 
    6666                    elif TOP_LEVEL=="datasetGroup": 
    67                         # What if you only have datasetURIs? 
    68                         if keyPatternMatch(self.bag, "datasetURI_\d+", "regex"): 
    69                             dsuriDict=getDictSubsetMatching(self.bag, "datasetURI_\d+", "regex") 
    70                              
    71                             dsgBag={} 
    72                             for key,dsuri in dsuriDict.items(): 
    73                                 n=int(key.split("_")[-1]) 
    74                                 (dsg, ds)=self.DXDML.getDatasetGroupAndDatasetFromURI(dsuri) 
    75                                 if not dsgBag.has_key(n): 
    76                                     dsgBag[n]={"dsg":dsg, "ds":[]} 
    77                                 dsgBag[n]["ds"].append(ds) 
    78  
    79                             # Now bag is full create session selection entries for dataset groups 
    80                             # and datasets to fill the gaps 
    81                             for key,value in dsgBag.items(): 
    82                                 self.bag["datasetGroup_%s" % key]=value["dsg"] 
    83                                 dscount=1 
    84                                 for ds in value["ds"]: 
    85                                     self.bag["dataset_%s.%s" % (key, dscount)]=ds 
    86                             optsRequested="variable" # Since we've now populated dsg and ds from dsuri 
    87                               
    88                         else: 
    89                             optsRequested="datasetGroup"  # to ensure all options are at this level 
     67                        optsRequested="datasetGroup"  # to ensure all options are at this level 
    9068                 
    9169                elif not keyPatternMatch(self.bag, "dataset_\d+\.\d+", "regex"): 
     
    300278        Method to return list of available variables for the given datasetGroup 
    301279        and dataset/datasetURI. 
    302         """  
     280        """ 
    303281        dataHandler=DatasetFormatDecider(datasetGroup, dataset, datasetURI).datasetFormat 
    304282             
  • TI03-DataExtractor/trunk/pydxs/__init__.py

    r1153 r1225  
    1818 
    1919# Set python path for CDAT packages 
    20 import sys 
    21 for d in LOCAL_PYTHONPATH: 
    22     sys.path.insert(0, d) 
     20#import sys 
     21#for d in LOCAL_PYTHONPATH: 
     22#    sys.path.insert(0, d) 
    2323 
    2424# SecurityManager is the class used to implement security 
  • TI03-DataExtractor/trunk/pydxs/version.py

    r794 r1225  
    1111""" 
    1212 
    13 version="0.2.1" 
     13version="0.3.0" 
  • TI03-DataExtractor/trunk/setup.py

    r1153 r1225  
    3838import sys, os, shutil, time, re 
    3939from ConfigParser import ConfigParser 
    40 version="0.2.1" 
     40version="0.3.0" 
    4141overwrite="OFF" 
    4242 
     
    111111    permissions where necessary to get the ancillary stuff working. 
    112112    """    
    113     testImportExternalPackages() 
     113    testImportExternalPackages(packages) 
    114114     
    115115    packMap={"s":"Server", "c":"Client"} 
     
    152152        print "Installing base package '%s' in: %s" % (package, BASEDIR) 
    153153 
     154        if package=="dxs": 
     155                dxsBasedir=BASEDIR # for message at end 
     156 
    154157        if overwrite!="ON": 
    155158            checkBeforeMakingDir(BASEDIR) 
    156              
    157             """destroy=raw_input("Type 'yes' to remove existing directory before re-installing: '%s' :" % BASEDIR) 
    158             if destroy!="yes": 
    159                 print "Exiting setup without completing." 
    160                 sys.exit() 
    161              
    162         if not os.path.isdir(BASEDIR): 
    163             try: 
    164                 os.makedirs(BASEDIR) 
    165             except: 
    166                 pass""" 
     159          
    167160         
    168161        for item in os.listdir(packageDir): 
     
    175168                shutil.copy(sourceCopy, target) 
    176169            elif os.path.isdir(sourceCopy): 
    177                 #if os.path.split(sourceCopy)[-1]=="logs":  
    178                 #    print "Not overwriting logs directory." 
    179                 #    if not os.path.isdir( 
    180                 #else: 
    181                     shutil.copytree(sourceCopy, target) 
     170                shutil.copytree(sourceCopy, target) 
    182171         
    183172        print "Installed non-python package and scripts under:", BASEDIR 
     
    187176                checkBeforeMakingDir(OUTPUT_DIR, OUTPUT_DIR_PERMISSION, OUTPUT_FILE_USER, OUTPUT_FILE_GROUP)             
    188177                 
    189                 """destroy=raw_input("Type 'yes' to remove existing directory before re-installing: '%s' :" % OUTPUT_DIR) 
    190                 if destroy!="yes": 
    191                     print "Exiting setup without completing." 
    192                     sys.exit()    
    193             try: 
    194                 os.system("rm -fR %s" % OUTPUT_DIR) 
    195                 os.makedirs(OUTPUT_DIR, OUTPUT_DIR_PERMISSION) 
    196                 #os.chmod(OUTPUT_DIR, OUTPUT_DIR_PERMISSION) 
    197                 os.system("chown -Rf %s.%s %s" % (OUTPUT_FILE_USER, OUTPUT_FILE_GROUP, OUTPUT_DIR)) 
    198             except: 
    199                 raise "Cannot create directory: %s" % OUTPUT_DIR""" 
    200178            else: 
    201179                makeDirAndPerm(OUTPUT_DIR, OUTPUT_DIR_PERMISSION, OUTPUT_FILE_USER, OUTPUT_FILE_GROUP)   
     
    206184            dirToMake=eval(configVarDict[dirToMake])       
    207185            if overwrite!="ON": 
    208                 checkBeforeMakingDir(OUTPUT_DIR_LOCAL_PATH)              
    209                      
    210              
    211                 """destroy=raw_input("Type 'yes' to remove existing directory before re-installing: '%s' :" % dirToMake) 
    212                 if destroy!="yes": 
    213                     print "Exiting setup without completing." 
    214                     sys.exit()     
    215             try: 
    216                 os.system("rm -fR %s" % dirToMake) 
    217                 os.makedirs(dirToMake, 0755) 
    218                 #os.chmod(dirToMake, 0755) 
    219                 #os.system("chown -Rf %s.%s %s" % (OUTPUT_FILE_USER, OUTPUT_FILE_GROUP, OUTPUT_DIR)) 
    220             except: 
    221                 raise "Cannot create directory: %s" % dirToMake""" 
    222                  
     186                checkBeforeMakingDir(OUTPUT_DIR_LOCAL_PATH)      
     187            else: 
     188                makeDirAndPerm(OUTPUT_DIR_LOCAL_PATH)         
     189 
    223190        if "CGI_SCRIPT_LOCAL_PATH" in configVarDict.keys(): 
    224             """if overwrite!="ON": 
    225                 destroy=raw_input("Type 'yes' to remove existing script before re-installing: '%s' :" % CGI_SCRIPT_URL_PATH) 
    226                 if destroy!="yes": 
    227                     print "Exiting setup without completing." 
    228                     sys.exit()"""     
    229191            try: 
    230192                shutil.copy("../cgi/dxui", CGI_SCRIPT_LOCAL_PATH) 
     
    233195                print thisPython 
    234196                os.system("perl -p -i -w -e 's:<YOUR_PYTHON_HERE>:%s:g;' %s*" % (thisPython, CGI_SCRIPT_LOCAL_PATH)) 
    235                 #os.system("perl -p -i -w -e 's!BASEDIR=\".*?\"!BASEDIR=\"%s\"!g;' %s*" % ("/home/as56/abstractWebService/test_installs/20060328/pydxc-0.1/pydxc", CGI_SCRIPT_LOCAL_PATH)) 
     197 
    236198                print "\nCopied CGI script to: %s" % CGI_SCRIPT_LOCAL_PATH 
    237199            except: 
     
    240202        if "WEB_EXTRAS_LOCAL_PATH" in configVarDict.keys(): 
    241203            if overwrite!="ON": 
    242                 checkBeforeMakingDir(WEB_EXTRAS_LOCAL_PATH, 0755)                    
    243                 """destroy=raw_input("Type 'yes' to remove existing directory before re-installing: '%s' :" % WEB_EXTRAS_LOCAL_PATH) 
    244                 if destroy!="yes": 
    245                     print "Exiting setup without completing." 
    246                     sys.exit()     
    247             try: 
    248                 os.system("rm -fR %s" % WEB_EXTRAS_LOCAL_PATH) 
    249                 os.makedirs(WEB_EXTRAS_LOCAL_PATH, 0755) 
    250                 #os.chmod(OUTPUT_DIR, OUTPUT_DIR_PERMISSION) 
    251                 #os.system("chown -Rf %s.%s %s" % (OUTPUT_FILE_USER, OUTPUT_FILE_GROUP, OUTPUT_DIR)) 
    252             except: 
    253                 raise "Cannot create directory: %s" % WEB_EXTRAS_LOCAL_PATH  """                 
     204                checkBeforeMakingDir(WEB_EXTRAS_LOCAL_PATH, 0755) 
     205            else: 
     206                makeDirAndPerm(WEB_EXTRAS_LOCAL_PATH, 0755)      
    254207 
    255208            webExtrasDir="../web_extras" 
     
    269222        if "REQUEST_XML_DIR_LOCAL_PATH" in configVarDict.keys(): 
    270223            if overwrite!="ON": 
    271                 checkBeforeMakingDir(REQUEST_XML_DIR_LOCAL_PATH, 0777)               
    272              
    273                 """destroy=raw_input("Type 'yes' to remove existing directory before re-installing: '%s' :" % REQUEST_XML_DIR_LOCAL_PATH) 
    274                 if destroy!="yes": 
    275                     print "Exiting setup without completing." 
    276                     sys.exit()     
    277             try: 
    278                 os.system("rm -fR %s" % REQUEST_XML_DIR_LOCAL_PATH) 
    279                 os.makedirs(REQUEST_XML_DIR_LOCAL_PATH) 
    280                 print "Made Request XML directory: %s" % REQUEST_XML_DIR_LOCAL_PATH 
    281                 os.chmod(REQUEST_XML_DIR_LOCAL_PATH, 0777) 
    282                 #os.system("chown -Rf %s.%s %s" % (OUTPUT_FILE_USER, OUTPUT_FILE_GROUP, OUTPUT_DIR)) 
    283             except: 
    284                 raise "Cannot create directory: %s" % REQUEST_XML_DIR_LOCAL_PATH """ 
     224                checkBeforeMakingDir(REQUEST_XML_DIR_LOCAL_PATH, 0777)   
     225            else: 
     226                makeDirAndPerm(REQUEST_XML_DIR_LOCAL_PATH, 0777) 
     227             
     228        if "SESSION_OBJECT_DIR" in configVarDict.keys(): 
     229            if overwrite!="ON": 
     230                checkBeforeMakingDir(SESSION_OBJECT_DIR, 0777) 
     231            else: 
     232                makeDirAndPerm(SESSION_OBJECT_DIR, 0777)                                 
    285233         
    286234        if "MAP_APPLET_TEMPLATE_LOCAL_PATH" in configVarDict.keys(): 
     
    343291     
    344292    print "\nIt looks like setup has completed successfully!\n" 
    345     print """You can start the server Web Service by typing: 
     293    if "dxs" in packages: 
     294        print """You can start the server Web Service by typing: 
    346295    python %s/bin/DXWSInterface.py 
    347  
    348 You should then be able to view the client package via a browser at: 
     296    """ % dxsBasedir 
     297 
     298    if "dxc" in packages: 
     299        print """You should then be able to view the client package via a browser at: 
    349300    %s 
    350      
     301    """ % CGI_SCRIPT_URL_PATH 
     302     
     303    print """ 
    351304Have fun!....and of course send any bugs to <a.stephens@rl.ac.uk> 
    352305 
    353 """ % (BASEDIR, CGI_SCRIPT_URL_PATH) 
    354      
    355      
    356 def testImportExternalPackages(): 
     306"""  
     307     
     308     
     309def testImportExternalPackages(packages): 
    357310    """ 
    358311    Tests that external packages can be imported. 
    359312    """ 
    360     print "Testing import of required cdms (CDAT) package...", 
    361     try: 
    362         import cdms          
    363         print "OK!" 
    364     except: 
    365         print """\n\nCannot import cdms package. Please try the one or more of the following to fix this: 
     313    if "dxs" in packages: 
     314        print "Testing import of required cdms (CDAT) package...", 
     315        try: 
     316            import cdms          
     317            print "OK!" 
     318        except: 
     319            print """\n\nCannot import cdms package. Please try the one or more of the following to fix this: 
    366320 
    3673211. Set your PYTHONPATH environment variable to pick up the correct directory containing the cdms package. 
    3683222. Retry using the correct python installation such as "<my_python>/bin/python setup.py" 
    3693233. Install CDAT (cdms).""" 
    370         sys.exit() 
     324            sys.exit() 
    371325 
    372326    print "Testing import required ZSI package...", 
     
    421375        os.mkdir(dirname) 
    422376        os.chmod(dirname, permissions) 
    423         os.system("chown %s %s" % (owner, dirname)) 
    424         os.system("chgrp %s %s" % (group, dirname)) 
     377        if owner!=None: 
     378            os.system("chown %s %s" % (owner, dirname)) 
     379        if group!=None: 
     380            os.system("chgrp %s %s" % (group, dirname)) 
    425381     
    426382 
Note: See TracChangeset for help on using the changeset viewer.