示例#1
0
    def evt_popup_fields_window(self, parent, projectName):
        if self.evt_fields_flg: return
        self.evt_fields_flg = True

        #---------------------------------------------------------------------------------
        # Create the Fields dialog window
        #---------------------------------------------------------------------------------
        self.fields = Pmw.Dialog(parent,
                                 buttons=('OK', 'Cancel'),
                                 defaultbutton='OK',
                                 title='Set Additional Mandatory Fields',
                                 command=pub_controls.Command(
                                     self.close_fields_dialog, parent))

        self.fields.withdraw()
        self.fields.transient(parent)

        frame = Pmw.ScrolledFrame(
            self.fields.interior(),
            usehullsize=1,
            horizflex='expand',
        )

        # Add additional mandatory fields to allow the user to set default settings
        handler = getHandlerByName(projectName, None, self.Session)
        list_fields = getQueryFields(handler)
        for x in list_fields:
            if handler.isMandatory(x):
                if x.lower() != "project":
                    field_options = handler.getFieldOptions(x)
                    if field_options is not None:
                        if x in self.defaultGlobalValues.keys():
                            set_to = self.defaultGlobalValues[x]
                        else:
                            set_to = x + " (Default Global Setting)"
                        field_options.insert(0,
                                             x + " (Default Global Setting)")
                        self.dataset_fields[x] = show_field(
                            parent, frame.interior(), x.capitalize(),
                            field_options, set_to, 1, 1)

        Pmw.alignlabels(self.dataset_fields.values())

        frame.pack(side='top', expand=1, fill='both')

        #---------------------------------------------------------------------------------
        # Position dialog popup
        #---------------------------------------------------------------------------------
        import string
        parent_geom = parent.geometry()
        geom = string.split(parent_geom, '+')
        d1 = string.atoi(geom[1])
        d2 = string.atoi(geom[2])
        self.fields.geometry("500x200+%d+%d" % (d1, d2))
        self.fields.show()
    def evt_popup_fields_window(self, parent, projectName):
        if self.evt_fields_flg:
            return
        self.evt_fields_flg = True

        # ---------------------------------------------------------------------------------
        # Create the Fields dialog window
        # ---------------------------------------------------------------------------------
        self.fields = Pmw.Dialog(
            parent,
            buttons=("OK", "Cancel"),
            defaultbutton="OK",
            title="Set Additional Mandatory Fields",
            command=pub_controls.Command(self.close_fields_dialog, parent),
        )

        self.fields.withdraw()
        self.fields.transient(parent)

        frame = Pmw.ScrolledFrame(self.fields.interior(), usehullsize=1, horizflex="expand")

        # Add additional mandatory fields to allow the user to set default settings
        handler = getHandlerByName(projectName, None, self.Session)
        list_fields = getQueryFields(handler)
        for x in list_fields:
            if handler.isMandatory(x):
                if x.lower() != "project":
                    field_options = handler.getFieldOptions(x)
                    if field_options is not None:
                        if x in self.defaultGlobalValues.keys():
                            set_to = self.defaultGlobalValues[x]
                        else:
                            set_to = x + " (Default Global Setting)"
                        field_options.insert(0, x + " (Default Global Setting)")
                        self.dataset_fields[x] = show_field(
                            parent, frame.interior(), x.capitalize(), field_options, set_to, 1, 1
                        )

        Pmw.alignlabels(self.dataset_fields.values())

        frame.pack(side="top", expand=1, fill="both")

        # ---------------------------------------------------------------------------------
        # Position dialog popup
        # ---------------------------------------------------------------------------------
        import string

        parent_geom = parent.geometry()
        geom = string.split(parent_geom, "+")
        d1 = string.atoi(geom[1])
        d2 = string.atoi(geom[2])
        self.fields.geometry("500x200+%d+%d" % (d1, d2))
        self.fields.show()
    def return_content2(self, appendOpt=False):
        from esgcet.publish import iterateOverDatasets, processIterator
        from esgcet.config import getHandlerByName
        from esgcet.model import eventName
        from esgcet.config import loadConfig

        # Initialize parameters for interating over datasets
        initcontext = {}
        aggregateOnly = False
        # appendOpt = False
        initcontext = {}
        properties = {}
        publish = False
        publishOnly = False
        thredds = False
        testProgress1 = [self.parent.parent.statusbar.show, 0, 50]
        testProgress2 = [self.parent.parent.statusbar.show, 50, 100]
        handlerDictionary = {}

        # Get the currently selected tab and the selected datasets
        tab_name = self.parent.parent.top_notebook.getcurselection()
        selected_page = self.parent.parent.main_frame.selected_top_page
        datasetNames = []
       # datasetNames2 = []
        if (selected_page is None):
           warning("Must generate a list of datasets to scan before data extraction can occur.")
           return

        if (selected_page is not None) or (self.parent.parent.hold_offline[selected_page] == True):
           extraFields = None 
           if (self.parent.parent.hold_offline[selected_page] == False) or (isinstance(self.parent.parent.hold_offline[selected_page], types.DictType)):
              for x in self.parent.parent.main_frame.top_page_id[selected_page]:
                dsetVersionName = self.parent.parent.main_frame.top_page_id2[selected_page][x].cget('text') # GANZ TODO version_label
                
                   # ganz added this 1/21/11
                if (self.parent.parent.main_frame.version_label[selected_page] ):
                    dset_name = self.parent.parent.main_frame.top_page_id2[selected_page][x].cget('text')               
                    dsetVersion = self.parent.parent.main_frame.version_label[selected_page][x].cget('text')                 
                  #####################################################################################               
                else:
                    dset_name, dsetVersion = parseDatasetVersionId(dsetVersionName)

                # Retrieve all the datasets in the collection for display
                """ ganz test code
                status = pollDatasetPublicationStatus(dset_name, self.Session)
                status_text = pub_controls.return_status_text( status )
                if status_text != 'Error':
                   dsetTuple = parseDatasetVersionId(self.parent.parent.main_frame.top_page_id2[selected_page][x].cget('text'))
                   datasetNames2.append(dsetTuple)
                """
                # Retrieve only the datasets that have been selected
                if self.parent.parent.main_frame.top_page_id[selected_page][x].cget('bg') != 'salmon':
                   dsetTuple =  parseDatasetVersionId(self.parent.parent.main_frame.top_page_id2[selected_page][x].cget('text'))
                   datasetNames.append(dsetTuple)

              dmap = self.parent.parent.main_frame.dmap[selected_page]
              extraFields = self.parent.parent.main_frame.extraFields[selected_page]
              datasetMapfile = self.parent.parent.main_frame.datasetMapfile[selected_page]
              projectName = self.parent.parent.main_frame.projectName[selected_page]
              directoryMap = self.parent.parent.directoryMap[selected_page]

              if dmap is not None:
                 for x in datasetNames:
                    dsetId = x[0] 
                    datasetName = x
                    try:
                        dmapentry = dmap[datasetName]
                    except:

                        # Check if the dataset map key was changed from (dsetname,-1) to (dsetname,version).
                        # If so, replace the entry with the new key.
                        trykey = (datasetName[0], -1)
                        dmapentry = dmap[trykey]
                        del dmap[trykey]
                        dmap[datasetName] = dmapentry
                    firstFile = dmapentry[0][0]
  
                    self.parent.parent.handlerDictionary[dsetId] = getHandlerByName(projectName, firstFile, self.Session)
                    handler = self.parent.parent.handlerDictionary[dsetId]
                 # Copy the defaultGlobalValues into initcontext
                 initcontext = self.parent.parent.main_frame.defaultGlobalValues[selected_page]
              else:
                  # more test code
                 myholdDirectoryMap = self.parent.parent.directoryMap[selected_page] 
                 #mydatasetNames = [(item,-1) for item in myholdDirectoryMap.keys()]
                 mydatasetNames = [(item) for item in myholdDirectoryMap.keys()]
                 #end
                 for x in mydatasetNames:
                    dsetId = x[0] 
                    datasetName = x
                    # ganz this is test code
                    try:
                        dmapentry = myholdDirectoryMap[datasetName]
                    except:

                        # Check if the dataset map key was changed from (dsetname,-1) to (dsetname,version).
                        # If so, replace the entry with the new key.
                        
                        trykey = (datasetName[0], -1)
                        dmapentry = myholdDirectoryMap[trykey]
                        del myholdDirectoryMap[trykey]
                        myholdDirectoryMap[datasetName] = dmapentry
                        
                    firstFile = dmapentry[0][1]
                    #end of test code
                    
                    #firstFile = self.parent.parent.main_frame.dirp_firstfile[selected_page]
 
                    self.parent.parent.handlerDictionary[dsetId] = getHandlerByName(projectName, firstFile, self.Session)
                    handler = self.parent.parent.handlerDictionary[dsetId]
           else:      # working off-line
              projectName = self.parent.parent.main_frame.projectName[selected_page]
              if self.parent.parent.offline_file_directory[selected_page] == "directory":
                 if self.parent.parent.config is None:
                    extraction_controls.call_sessionmaker( self.parent.parent )
                 datasetPaths = []
                 dmap = {self.parent.parent.offline_datasetName : datasetPaths}
                 listerSection = getOfflineLister(self.parent.parent.config, "project:%s"%projectName, None)
                 offlineLister = self.parent.parent.config.get(listerSection, 'offline_lister_executable')
                 lastargs = self.parent.parent.offline_directories
                 commandArgs = "--config-section %s "%listerSection
                 commandArgs += " ".join(lastargs)
                 for filepath, size in processIterator(offlineLister, commandArgs, filefilt=self.parent.parent.filefilt):
                   datasetPaths.append((filepath, str(size)))
                 datasetNames = self.parent.parent.datasetNames
                 directoryMap = None

                 # get the handler
                 for x in datasetNames:
                    dsetId = x[0] 
                    self.parent.parent.handlerDictionary[dsetId] = getHandlerByName(projectName, None, self.Session, offline=True)

              elif self.parent.parent.offline_file_directory[selected_page] == "file":
                 dmap = self.parent.parent.main_frame.dmap[selected_page]
                 extraFields = self.parent.parent.main_frame.extraFields[selected_page]
                 datasetMapfile = self.parent.parent.main_frame.datasetMapfile[selected_page]
                 projectName = self.parent.parent.main_frame.projectName[selected_page]
                 directoryMap = None
                 if datasetMapfile is not None:
                     dmap, extraFields = readDatasetMap(datasetMapfile, parse_extra_fields=True)
                     datasetNames = dmap.keys()

                 # get the handlers
                 for x in datasetNames:
                    dsetId = x[0] 
                    self.parent.parent.handlerDictionary[dsetId] = getHandlerByName(projectName, None, self.Session, offline=True)


           # Iterate over datasets
           if appendOpt:
               operation = UPDATE_OP
           else:
               operation = CREATE_OP
        
           datasets = iterateOverDatasets(projectName, dmap, directoryMap, datasetNames, self.Session, self.parent.parent.aggregateDimension, operation, self.parent.parent.filefilt, initcontext, self.parent.parent.hold_offline[selected_page], properties, comment=self.comments, testProgress1=testProgress1, testProgress2=testProgress2 , handlerDictionary=self.parent.parent.handlerDictionary, extraFields=extraFields, readFiles=True)

           # If working on-line then replace the scanned list of datasets with 
           # the complete list of datasets
           #test
           """
           print 'datasetNames:'
           for t1 in datasetNames:
               print t1
           print 'datasetNames2:'    
           for t2 in datasetNames2:
               print t2
           """   
           if not self.parent.parent.hold_offline[selected_page]:
              datasets = []
              versionObjs = []
              # ganz finally, tested datasetNames2 here
              for dsetName, version in datasetNames:
                  result = Dataset.lookup(dsetName, self.Session, version=version)
                  if result is not None:
                      entry, versionObj = result
                      datasets.append(entry)
                      versionObjs.append(versionObj)

           # Get the summary of errors after doing a data extraction
           dset_error = []
           for dset in datasets:
               status = dset.get_publication_status(self.Session)
               status_name = eventName[status]
               if dset.has_warnings(self.Session):
                   dset_error.append(dset.get_name(self.Session))

           try:
              list_fields = getQueryFields( handler )
           except:
              handler = getHandlerByName(projectName, None, self.Session)
              list_fields = getQueryFields( handler )

           # Display the datasets in the "Collection" page
#           if self.parent.parent.hold_offline[selected_page] == True:
#              tab_name = "Collection_Offline"
#              from_tab = "Collection"
#              pub_editorviewer = self.parent.parent.create_publisher_editor_viewer( self.parent.parent, tab_name, dataset, from_tab, self.Session)

           # Show the extracted datasets
           self.set_column_labels( len(datasets), list_fields )
           self.show_extracted_info(datasets, dset_error, list_fields, versionObjs)

        # Enable the "Data Publication" button
        self.parent.ControlButton3.configure( state = 'normal' )
    def dataset_page(self, dataset=None, Session=None, handler=None):
        if handler != None:
            try:
                self.parent.canvas.pack_forget()  # Remove the white canvas
            except:
                pass

        self.field_list = {}
        validate = []
        mandatory = []
        options = {}
        values = {}
        #--------------------------------------------------------------------------------
        # Generate a dataset page with dummy fields if no dataset was given
        #--------------------------------------------------------------------------------
        if handler == None:
            return_fields = [
                "Project", "Dataset name", "Model", "Experiment", "Run number",
                "Product", "Format"
            ]
            validate = [1, 2, 3, 4, 1, 2, 3, 4, 1]
            mandatory = [
                True, False, True, False, True, False, True, False, True
            ]
            options = values = {
                "Project": None,
                "Dataset name": None,
                "Model": None,
                "Experiment": None,
                "Run number": None,
                "Product": None,
                "Format": None
            }
        else:
            #--------------------------------------------------------------------------------
            # Retrieve the dataset fields and properties from the queryDataset command
            #--------------------------------------------------------------------------------
            list_fields = getQueryFields(handler)
            properties = {'id': (1, dataset.get_id(Session))}
            for x in list_fields:
                if x is not "id": properties[x] = (2, "%")
            values, return_fields = queryDatasets(dataset.get_project(Session),
                                                  handler, Session, properties)
            for x in return_fields:
                validate.append(handler.getFieldType(x))
                options[x] = handler.getFieldOptions(x)
                mandatory.append(handler.isMandatory(x))

        #--------------------------------------------------------------------------------
        # View the dataset fields in the page
        #--------------------------------------------------------------------------------
        for i in range(len(return_fields)):
            #print " ganz dataset test %s", return_fields[i]
            #print values[0][i]
            value = values[0][i]
            try:
                self.field_list[return_fields[i]] = show_field(
                    self.parent, self.dataset_frame,
                    return_fields[i].capitalize(), options[return_fields[i]],
                    value, mandatory[i], validate[i])
            except:
                field = return_fields[i]
                opts = options[field]
                mand = mandatory[i]
                valid = validate[i]
                error(
                    "Error in show_fields: field=%s, options=%s, value=%s, mandatory=%s, validate=%s"
                    % (field, ` opts `, ` value `, mand, valid))
                error(traceback.format_exc())
                raise

        Pmw.alignlabels(
            self.field_list.values())  # alien the labels for a clean look

        self.dataset_frame.pack(side='left', expand=1, fill='both', pady=2)

        #--------------------------------------------------------------------------------
        # Create and pack the Group to display the message about mandatory fields
        #--------------------------------------------------------------------------------
        txtFont = tkFont.Font(self.parent,
                              family=pub_controls.text_font_type,
                              size=pub_controls.text_font_size,
                              weight=font_weight)
        g = Pmw.Group(self.dataset_sframe.interior(),
                      tag_text='Mandatory Fields',
                      tag_font=txtFont)
        g.pack(fill='x', padx=36)
        cw = Tkinter.Label(
            g.interior(),
            text=
            'All fields that begin with an asterisk\n"*" and in blue, must have an entry.',
            font=txtFont)
        cw.pack(padx=2, pady=2, expand='yes', fill='both')
    def __init__(self, parent):
        self.parent = parent
        self.Session = parent.parent.Session
        self.select_button = {}
        self.select_labelV = {}
        self.select_label = {}

        # ----------------------------------------------------------------------------------------
        # Begin the creation of the dataset ID pulldown query selection
        # ----------------------------------------------------------------------------------------
        glFont = tkFont.Font(
            self.parent.parent,
            family=pub_controls.button_group_font_type,
            size=pub_controls.button_group_font_size,
            weight=font_weight,
        )
        bnFont = tkFont.Font(
            self.parent.parent,
            family=pub_controls.label_button_font_type,
            size=pub_controls.label_button_font_size,
            weight=font_weight,
        )
        self.group_query = Pmw.Group(self.parent.control_frame4, tag_text="Query ID", tag_font=glFont, tagindent=25)

        # ----------------------------------------------------------------------------------------
        # Create and pack the EntryFields
        # ----------------------------------------------------------------------------------------
        self.query_entry = Pmw.EntryField(
            self.group_query.interior(),
            labelpos="w",
            label_text="Dataset Id:",
            label_font=bnFont,
            entry_width=200,
            validate=None,
            command=pub_controls.Command(self.evt_show_data_set_from_id),
        )

        self.query_entry.pack(side="left", expand=1, padx=10, pady=10)
        # ----------------------------------------------------------------------------------------
        # End the creation of the dataset ID pulldown query selection
        # ----------------------------------------------------------------------------------------

        # ----------------------------------------------------------------------------------------
        # Begin the creation of the project pulldown query selection
        # ----------------------------------------------------------------------------------------
        self.button_controls = Pmw.Group(
            self.parent.control_frame4, tag_text="Query Project Infomation", tag_font=glFont, tagindent=25
        )

        # ----------------------------------------------------------------------------------------
        # Create an instance of the notebook
        # ----------------------------------------------------------------------------------------
        ntk = generate_notebook(parent, self.Session)
        parent.parent.ntk = ntk  # Set the first instance of the notebook

        self.bdataset_sframe = Pmw.ScrolledFrame(self.button_controls.interior())
        self.bdataset_sframe.pack(side="top")
        self.bdataset_frame = self.bdataset_sframe.interior()

        # ----------------------------------------------------------------------------------------
        # Display the Project selection
        # ----------------------------------------------------------------------------------------
        projectOption = self.parent.parent.config.get("initialize", "project_options")
        projectSpecs = splitRecord(projectOption)
        projectName = projectSpecs[0][0]
        projectList = []
        for x in projectSpecs:
            projectList.append(x[0])
        projectList.sort()

        parent.query_fields = {}
        parent.validate = {}
        parent.query_fields["project"] = show_field(
            self.parent, self.bdataset_frame, "Project", projectList, projectName, 1, 1, for_query=True
        )
        parent.validate["project"] = 1

        handler = getHandlerByName(projectName, None, self.Session)
        list_fields = getQueryFields(handler)

        validate = []
        mandatory = []
        options = {}
        for x in list_fields:
            if handler.getFieldType(x) is not None:
                validate.append(handler.getFieldType(x))
            else:
                validate.append(2)
            options[x] = handler.getFieldOptions(x)
            mandatory.append(handler.isMandatory(x))

        for j in range(1, 5):
            for i in range(len(list_fields)):
                if list_fields[i] is not "project":
                    if options[list_fields[i]] is None:
                        value = ""
                    else:
                        value = options[list_fields[i]]  # ganz bug fix [0]
                    if validate[i] == 1:
                        options[list_fields[i]].insert(0, "-Any-")
                        value = "-Any-"
                    if j == validate[i]:
                        parent.query_fields[list_fields[i]] = show_field(
                            self.parent,
                            self.bdataset_frame,
                            list_fields[i].capitalize(),
                            options[list_fields[i]],
                            value,
                            mandatory[i],
                            validate[i],
                            for_query=True,
                        )
                        parent.validate[list_fields[i]] = validate[i]

        Pmw.alignlabels(parent.query_fields.values())

        # ----------------------------------------------------------------------------------------
        # Create button to update extraction
        # ----------------------------------------------------------------------------------------
        w = Tkinter.Button(
            self.button_controls.interior(),
            text="Query Data Information",
            font=bnFont,
            background="lightblue",
            command=pub_controls.Command(ntk.new_query_page, parent, None),
        )
        w.pack(side="top", padx=0, pady=3)

        self.button_controls.pack(side="top", fill="x", pady=3)
示例#6
0
   def dataset_page( self, dataset = None, Session = None, handler = None ):
        if handler != None:
           try: self.parent.canvas.pack_forget()  # Remove the white canvas
           except: pass

        self.field_list = {}
        validate = []
        mandatory = []
        options = {}
        values = {}
        #--------------------------------------------------------------------------------
        # Generate a dataset page with dummy fields if no dataset was given
        #--------------------------------------------------------------------------------
        if handler == None:
           return_fields = ["Project", "Dataset name", "Model", "Experiment", "Run number", "Product", "Format"]
           validate = [1,2,3,4,1,2,3,4,1]
           mandatory = [True,False,True,False,True,False,True,False,True]
           options = values = {"Project":None, "Dataset name":None, "Model":None, "Experiment":None, "Run number":None, "Product":None, "Format":None}
        else:
           #--------------------------------------------------------------------------------
           # Retrieve the dataset fields and properties from the queryDataset command
           #--------------------------------------------------------------------------------
           list_fields = getQueryFields( handler )
           properties = {'id':(1, dataset.get_id( Session ))}
           for x in list_fields:
               if x is not "id": properties[ x ] = (2, "%")
           values, return_fields = queryDatasets(dataset.get_project( Session ), handler, Session, properties)
           for x in return_fields:
                validate.append( handler.getFieldType( x ) )
                options[ x ] = handler.getFieldOptions( x )
                mandatory.append( handler.isMandatory( x ) )

        #--------------------------------------------------------------------------------
        # View the dataset fields in the page
        #--------------------------------------------------------------------------------
        for i in range(len(return_fields)):
            #print " ganz dataset test %s", return_fields[i]
            #print values[0][i]
            value = values[0][i]
            try:
                self.field_list[return_fields[i]] = show_field( self.parent, self.dataset_frame, return_fields[i].capitalize(), options[ return_fields[i] ], value, mandatory[i], validate[i] )
            except:
                field = return_fields[i]
                opts = options[field]
                mand = mandatory[i]
                valid = validate[i]
                error("Error in show_fields: field=%s, options=%s, value=%s, mandatory=%s, validate=%s"%(field, `opts`, `value`, mand, valid))
                error(traceback.format_exc())
                raise

        Pmw.alignlabels (self.field_list.values()) # alien the labels for a clean look

        self.dataset_frame.pack(side = 'left', expand=1, fill='both' , pady = 2)

        #--------------------------------------------------------------------------------
        # Create and pack the Group to display the message about mandatory fields
        #--------------------------------------------------------------------------------
        txtFont=tkFont.Font(self.parent, family = pub_controls.text_font_type, size=pub_controls.text_font_size, weight=font_weight)
	g = Pmw.Group(self.dataset_sframe.interior(),
                      tag_text='Mandatory Fields',
                      tag_font=txtFont
                     )
	g.pack(fill = 'x', padx = 36)
	cw = Tkinter.Label(g.interior(),
		text = 'All fields that begin with an asterisk\n"*" and in blue, must have an entry.',
                font = txtFont
             )
	cw.pack(padx = 2, pady = 2, expand='yes', fill='both')