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)
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')