Exemplo n.º 1
0
    def myfun3(self, dirp, lock):
        import fnmatch, time

        index_count = 0
        lock.acquire()
        self.parent.parent.file_list = []
        self.parent.parent.file_size = []

        for root, dirs, files in os.walk(dirp):
            for filename in files:
                if fnmatch.fnmatch(filename, self.extension[0]):
                    sfilename = os.path.join(root, filename)
                    filesize = os.path.getsize(sfilename)
                    self.parent.parent.file_list.append(sfilename)
                    self.parent.parent.file_size.append(filesize)
                    self.parent.parent.file_line.append(
                        pub_editorviewer.create_publisher_editor_viewer_row(
                            self.parent.parent,
                            index=index_count,
                            size=filesize,
                            status_flg=1,
                            filename=sfilename))
                    index_count += 1

                    time.sleep(
                        0.1
                    )  # Must wait for the row to be generated before moving on.

                if self.stop_listing_flg == 1 and index_count > 0:
                    pub_busy.busyEnd(self.parent.parent)
                    self.parent.parent.pub_editorviewer.sf.configure(
                        hscrollmode='dynamic')
                    self.parent.parent.pub_editorviewer.sf.configure(
                        vscrollmode='dynamic')
                    self.parent.parent.file_counter = index_count
                    time.sleep(
                        0.1
                    )  # Must wait for the row to be generated before moving on.
                    self.parent.parent.log_output_window.appendtext(
                        "File list creation stopped. %s files in list.\n" %
                        index_count)
                    self.generating_file_list_flg = 0
                    thread.exit()
        lock.release()

        self.parent.parent.file_counter = index_count

        pub_busy.busyEnd(self.parent.parent)

        if index_count > 0:
            self.parent.parent.pub_editorviewer.sf.configure(
                hscrollmode='dynamic')
            self.parent.parent.pub_editorviewer.sf.configure(
                vscrollmode='dynamic')

        self.parent.parent.log_output_window.appendtext(
            "Finished creating the file list. %s files in list.\n" %
            index_count)
        self.generating_file_list_flg = 0
Exemplo n.º 2
0
    def write(self, s):
        self.parent.bottom_notebook.selectpage('Error')
        self.parent.log_error_window.appendtext(s)
        self.parent.log_error_window.yview("moveto", 1)
        self.parent.log_error_window.configure(vscrollmode='dynamic')

        # Remove the busy mouse
        pub_busy.busyEnd(self.parent.parent)
Exemplo n.º 3
0
    def write(self, s):
        self.parent.bottom_notebook.selectpage("Error")
        self.parent.log_error_window.appendtext(s)
        self.parent.log_error_window.yview("moveto", 1)
        self.parent.log_error_window.configure(vscrollmode="dynamic")

        # Remove the busy mouse
        pub_busy.busyEnd(self.parent.parent)
Exemplo n.º 4
0
    def open_text_file(self, dirfilename, lock):
        import time
        import gc

        index_count = 0
        lock.acquire()

        f = open(dirfilename, 'r')
        self.parent.parent.file_list = []
        self.parent.parent.file_size = []
        for dirfile in f:
            sfilename = dirfile[:-1]
            filesize = os.path.getsize(sfilename)
            self.parent.parent.file_list.append(sfilename)
            self.parent.parent.file_size.append(filesize)
            self.parent.parent.file_line.append(
                pub_editorviewer.create_publisher_editor_viewer_row(
                    self.parent.parent,
                    index=index_count,
                    size=filesize,
                    status_flg=0,
                    filename=sfilename))
            index_count += 1

            time.sleep(
                0.1)  # Must wait for the row to be generated before moving on.

            if self.stop_listing_flg == 1:
                pub_busy.busyEnd(self.parent.parent)
                self.parent.parent.pub_editorviewer.sf.configure(
                    hscrollmode='dynamic')
                self.parent.parent.pub_editorviewer.sf.configure(
                    vscrollmode='dynamic')
                self.parent.parent.file_counter = index_count
                time.sleep(
                    0.1
                )  # Must wait for the row to be generated before moving on.
                self.parent.parent.log_output_window.appendtext(
                    "File list creation stopped. %s files in list.\n" %
                    index_count)
                self.generating_file_list_flg = 0
                thread.exit()

        f.close()

        lock.release()

        self.parent.parent.file_counter = index_count

        pub_busy.busyEnd(self.parent.parent)
        self.parent.parent.pub_editorviewer.sf.configure(hscrollmode='dynamic')
        self.parent.parent.pub_editorviewer.sf.configure(vscrollmode='dynamic')

        self.parent.parent.log_output_window.appendtext(
            "Finished creating the file list. %s files in list.\n" %
            index_count)
        self.generating_file_list_flg = 0
Exemplo n.º 5
0
    def evt_popup_file_window(self):
        # Reset the button colors
        self.cw_dir.configure(background=self.save_dir_btn_color,
                              foreground='black')
        self.cw_file.configure(background=self.save_file_btn_color,
                               foreground='black')
        self.cw_reg.configure(background=self.save_reg_btn_color,
                              foreground='black')

        if self.generating_file_list_flg == 1: return
        dialog_icon = tkFileDialog.Open(master=self.parent.control_frame2,
                                        filetypes=pub_controls.filetypes,
                                        title='File Open Selection')
        dirfilename = dialog_icon.show(initialdir=os.getcwd())
        if dirfilename in [(), '']: return

        # Determine if working online or off-line
        if self.parent.parent.offline == True:
            onoff_line = "offline"
        else:
            onoff_line = "online"

        # Start the busy routine to indicate to the users something is happening
        self.parent.parent.busyCursor = 'watch'
        self.parent.parent.busyWidgets = [
            self.parent.parent.pane2.pane('EditPaneTop'),
            self.parent.parent.pane2.pane('EditPaneBottom'),
            self.parent.parent.pane2.pane('EditPaneStatus'),
            self.parent.parent.pane.pane('ControlPane')
        ]
        pub_busy.busyStart(self.parent.parent)
        try:
            # Change the color of the selected button
            bcolorbg = Pmw.Color.changebrightness(self.parent.parent,
                                                  'aliceblue', 0.25)
            bcolorfg = Pmw.Color.changebrightness(self.parent.parent,
                                                  'aliceblue', 0.85)
            self.cw_file.configure(background=bcolorbg, foreground=bcolorfg)

            # Load up the data information from data extraction. This must be done outside the start of the Thread.
            self.fill_in_data_information_file(dirfilename,
                                               onoff_line=onoff_line)

        except:
            pub_busy.busyEnd(
                self.parent.parent
            )  # catch here in order to turn off the busy cursor ganz
            raise
        finally:
            pub_busy.busyEnd(self.parent.parent)
#       pub_busy.busyEnd( self.parent.parent )

# Disable the "Data Publication" button
        self.parent.parent.pub_buttonexpansion.ControlButton3.configure(
            state='disabled')
    def open_text_file(self, dirfilename, lock):
        import time
        import gc

        index_count = 0
        lock.acquire()

        f = open(dirfilename, "r")
        self.parent.parent.file_list = []
        self.parent.parent.file_size = []
        for dirfile in f:
            sfilename = dirfile[:-1]
            filesize = os.path.getsize(sfilename)
            self.parent.parent.file_list.append(sfilename)
            self.parent.parent.file_size.append(filesize)
            self.parent.parent.file_line.append(
                pub_editorviewer.create_publisher_editor_viewer_row(
                    self.parent.parent, index=index_count, size=filesize, status_flg=0, filename=sfilename
                )
            )
            index_count += 1

            time.sleep(0.1)  # Must wait for the row to be generated before moving on.

            if self.stop_listing_flg == 1:
                pub_busy.busyEnd(self.parent.parent)
                self.parent.parent.pub_editorviewer.sf.configure(hscrollmode="dynamic")
                self.parent.parent.pub_editorviewer.sf.configure(vscrollmode="dynamic")
                self.parent.parent.file_counter = index_count
                time.sleep(0.1)  # Must wait for the row to be generated before moving on.
                self.parent.parent.log_output_window.appendtext(
                    "File list creation stopped. %s files in list.\n" % index_count
                )
                self.generating_file_list_flg = 0
                thread.exit()

        f.close()

        lock.release()

        self.parent.parent.file_counter = index_count

        pub_busy.busyEnd(self.parent.parent)
        self.parent.parent.pub_editorviewer.sf.configure(hscrollmode="dynamic")
        self.parent.parent.pub_editorviewer.sf.configure(vscrollmode="dynamic")

        self.parent.parent.log_output_window.appendtext(
            "Finished creating the file list. %s files in list.\n" % index_count
        )
        self.generating_file_list_flg = 0
    def myfun3(self, dirp, lock):
        import fnmatch, time

        index_count = 0
        lock.acquire()
        self.parent.parent.file_list = []
        self.parent.parent.file_size = []

        for root, dirs, files in os.walk(dirp):
            for filename in files:
                if fnmatch.fnmatch(filename, self.extension[0]):
                    sfilename = os.path.join(root, filename)
                    filesize = os.path.getsize(sfilename)
                    self.parent.parent.file_list.append(sfilename)
                    self.parent.parent.file_size.append(filesize)
                    self.parent.parent.file_line.append(
                        pub_editorviewer.create_publisher_editor_viewer_row(
                            self.parent.parent, index=index_count, size=filesize, status_flg=1, filename=sfilename
                        )
                    )
                    index_count += 1

                    time.sleep(0.1)  # Must wait for the row to be generated before moving on.

                if self.stop_listing_flg == 1 and index_count > 0:
                    pub_busy.busyEnd(self.parent.parent)
                    self.parent.parent.pub_editorviewer.sf.configure(hscrollmode="dynamic")
                    self.parent.parent.pub_editorviewer.sf.configure(vscrollmode="dynamic")
                    self.parent.parent.file_counter = index_count
                    time.sleep(0.1)  # Must wait for the row to be generated before moving on.
                    self.parent.parent.log_output_window.appendtext(
                        "File list creation stopped. %s files in list.\n" % index_count
                    )
                    self.generating_file_list_flg = 0
                    thread.exit()
        lock.release()

        self.parent.parent.file_counter = index_count

        pub_busy.busyEnd(self.parent.parent)

        if index_count > 0:
            self.parent.parent.pub_editorviewer.sf.configure(hscrollmode="dynamic")
            self.parent.parent.pub_editorviewer.sf.configure(vscrollmode="dynamic")

        self.parent.parent.log_output_window.appendtext(
            "Finished creating the file list. %s files in list.\n" % index_count
        )
        self.generating_file_list_flg = 0
Exemplo n.º 8
0
 def evt_unselect_all_dataset(self, parent):
    # Start the busy routine to indicate to the users something is happening
    parent.busyCursor = 'watch'
    parent.busyWidgets = [parent.pane2.pane( 'EditPaneTop' ), parent.pane2.pane( 'EditPaneBottom' ), parent.pane2.pane( 'EditPaneStatus' ), parent.pane.pane( 'ControlPane' )]
    pub_busy.busyStart( parent )
    try:
       selected_page = parent.main_frame.selected_top_page
       if selected_page is not None:
          for x in parent.main_frame.top_page_id[selected_page]:
              parent.main_frame.top_page_id[selected_page][x].configure(relief = 'raised', background = 'salmon', image=self.off)
    except:
          pub_busy.busyEnd( parent )  # catch here in order to turn off the busy cursor ganz
          raise
    finally:
         pub_busy.busyEnd( parent )
    def evt_popup_file_window(self):
        # Reset the button colors
        self.cw_dir.configure(background=self.save_dir_btn_color, foreground="black")
        self.cw_file.configure(background=self.save_file_btn_color, foreground="black")
        self.cw_reg.configure(background=self.save_reg_btn_color, foreground="black")

        if self.generating_file_list_flg == 1:
            return
        dialog_icon = tkFileDialog.Open(
            master=self.parent.control_frame2, filetypes=pub_controls.filetypes, title="File Open Selection"
        )
        dirfilename = dialog_icon.show(initialdir=os.getcwd())
        if dirfilename in [(), ""]:
            return

        # Determine if working online or off-line
        if self.parent.parent.offline == True:
            onoff_line = "offline"
        else:
            onoff_line = "online"

        # Start the busy routine to indicate to the users something is happening
        self.parent.parent.busyCursor = "watch"
        self.parent.parent.busyWidgets = [
            self.parent.parent.pane2.pane("EditPaneTop"),
            self.parent.parent.pane2.pane("EditPaneBottom"),
            self.parent.parent.pane2.pane("EditPaneStatus"),
            self.parent.parent.pane.pane("ControlPane"),
        ]
        pub_busy.busyStart(self.parent.parent)
        try:
            # Change the color of the selected button
            bcolorbg = Pmw.Color.changebrightness(self.parent.parent, "aliceblue", 0.25)
            bcolorfg = Pmw.Color.changebrightness(self.parent.parent, "aliceblue", 0.85)
            self.cw_file.configure(background=bcolorbg, foreground=bcolorfg)

            # Load up the data information from data extraction. This must be done outside the start of the Thread.
            self.fill_in_data_information_file(dirfilename, onoff_line=onoff_line)

        except:
            pub_busy.busyEnd(self.parent.parent)  # catch here in order to turn off the busy cursor ganz
            raise
        finally:
            pub_busy.busyEnd(self.parent.parent)
        #       pub_busy.busyEnd( self.parent.parent )

        # Disable the "Data Publication" button
        self.parent.parent.pub_buttonexpansion.ControlButton3.configure(state="disabled")
Exemplo n.º 10
0
    def start_update_extraction_button( self, append_status=False ):
       from esgcet.publish.utility import filelistIterator, directoryIterator
       from esgcet.publish.utility import StopEvent

      
       # To prevent unexplained core dumps, the scrollbar to the right and bottom must be removed
     
       try:
          from tkMessageBox   import askquestion, showerror
          ans = tkMessageBox.askquestion("Dataset Comments?", "For all new datasets, would you like to supply comments in an editor?")
          #ans = tkMessageBox.askokcancel("Dataset Comments?", "For all new datasets, would you like to supply comments in an editor?")
          ans1 = str(ans)  # since we get back a _tkinter.Tcl_Obj not a string we need to convert to test...ganz
        

          if (ans1 == 'yes' ):
            myeditor = comments_editor.EDITOR(self.parent)
            self.comments = myeditor.edit()
         
     #        for x in self.comments:
     #          print x

          self.parent.parent.log_output_window.configure(hscrollmode = 'none', vscrollmode = 'none')
       except:
          pass
   
       self.parent.did_start = True
       self.parent.parent.se = StopEvent()
       self.parent.parent.se.wait = False

       # Start the busy routine to indicate to the users something is happening
       self.parent.parent.busyCursor = 'watch'
       self.parent.parent.busyWidgets = [self.parent.parent.pane2.pane( 'EditPaneTop' ), self.parent.parent.pane2.pane( 'EditPaneBottom' ), self.parent.parent.pane2.pane( 'EditPaneStatus' ), self.parent.parent.pane.pane( 'ControlPane' )]
       pub_busy.busyStart( self.parent.parent )
       try:
          self.return_content2( appendOpt = append_status )

       except:
            pub_busy.busyEnd( self.parent.parent )  # catch here in order to turn off the busy cursor ganz
            raise
       finally:
           pub_busy.busyEnd( self.parent.parent )
Exemplo n.º 11
0
 def evt_unselect_all_dataset(self, parent):
     # Start the busy routine to indicate to the users something is happening
     parent.busyCursor = 'watch'
     parent.busyWidgets = [
         parent.pane2.pane('EditPaneTop'),
         parent.pane2.pane('EditPaneBottom'),
         parent.pane2.pane('EditPaneStatus'),
         parent.pane.pane('ControlPane')
     ]
     pub_busy.busyStart(parent)
     try:
         selected_page = parent.main_frame.selected_top_page
         if selected_page is not None:
             for x in parent.main_frame.top_page_id[selected_page]:
                 parent.main_frame.top_page_id[selected_page][x].configure(
                     relief='raised', background='salmon', image=self.off)
     except:
         pub_busy.busyEnd(
             parent)  # catch here in order to turn off the busy cursor ganz
         raise
     finally:
         pub_busy.busyEnd(parent)
Exemplo n.º 12
0
    def evt_popup_directory_window(self):
        # Reset the button colors
        self.cw_dir.configure(background=self.save_dir_btn_color,
                              foreground='black')
        self.cw_file.configure(background=self.save_file_btn_color,
                               foreground='black')
        #self.cw_reg.configure( background=self.save_reg_btn_color, foreground='black' )

        # Start the busy routine to indicate to the users something is happening
        self.parent.parent.busyCursor = 'watch'
        self.parent.parent.busyWidgets = [
            self.parent.parent.pane2.pane('EditPaneTop'),
            self.parent.parent.pane2.pane('EditPaneBottom'),
            self.parent.parent.pane2.pane('EditPaneStatus'),
            self.parent.parent.pane.pane('ControlPane')
        ]
        pub_busy.busyStart(self.parent.parent)

        try:
            # if true, then the dataset is not directly readable and on tertiary storage
            if self.parent.parent.offline == True:
                onoff_line = "offline"
                dirfilename = None
                # Create the dialog to prompt for the entry input
                self.dialog = Pmw.Dialog(
                    self.parent.control_frame2,
                    title='Working off-line',
                    buttons=('OK', 'Cancel'),
                    defaultbutton='OK',
                    command=pub_controls.Command(
                        self.evt_work_off_line_directory, ),
                )

                self.entry1 = Pmw.EntryField(
                    self.dialog.interior(),
                    labelpos='w',
                    label_text='Directory:',
                    entry_width=75,
                    entry_background='aliceblue',
                    entry_foreground='black',
                )
                self.entry1.pack(side='top',
                                 fill='x',
                                 expand=1,
                                 padx=10,
                                 pady=5)
                self.entry2 = Pmw.EntryField(
                    self.dialog.interior(),
                    labelpos='w',
                    label_text='Dataset Name:',
                    entry_width=75,
                    entry_background='aliceblue',
                    entry_foreground='black',
                )
                self.entry2.pack(side='top',
                                 fill='x',
                                 expand=1,
                                 padx=10,
                                 pady=5)

                Pmw.alignlabels((self.entry1, self.entry2))

                parent_geom = self.parent.parent.geometry()
                geom = string.split(parent_geom, '+')
                d1 = string.atoi(geom[1])
                d2 = string.atoi(geom[2])
                p1 = string.atoi(geom[0].split('x')[0]) * 0.3
                p2 = string.atoi(geom[0].split('x')[1]) * 0.3
                self.dialog.activate(geometry="+%d+%d" % (p1 + d1, p2 + d2))
                if self.parent.parent.offline_directories != "Cancel":
                    # Load up the data information from data extraction
                    self.fill_in_data_information_directory(
                        dirfilename, True, onoff_line=onoff_line)
            else:
                onoff_line = "online"
                if self.generating_file_list_flg == 1: return
                dialog_icon = tkFileDialog.Directory(
                    master=self.parent.control_frame2,
                    title='Directory and File Selection')
                dirfilename = dialog_icon.show(initialdir=os.getcwd())
                if dirfilename in [(), '']:
                    pub_busy.busyEnd(self.parent.parent)
                    return

                self.stop_listing_flg = 0

                self.parent.parent.extension = []
                self.parent.parent.extension.append(
                    (self.data_filter._entryfield.get().split()[-1]))

                # Load up the data information from data extraction
                self.fill_in_data_information_directory(dirfilename,
                                                        True,
                                                        onoff_line=onoff_line)

        # Change the color of the selected button
            bcolorbg = Pmw.Color.changebrightness(self.parent.parent,
                                                  'aliceblue', 0.25)
            bcolorfg = Pmw.Color.changebrightness(self.parent.parent,
                                                  'aliceblue', 0.85)
            self.cw_dir.configure(background=bcolorbg, foreground=bcolorfg)

#
        except:
            pub_busy.busyEnd(
                self.parent.parent
            )  # catch here in order to turn off the busy cursor ganz
            raise
        finally:
            pub_busy.busyEnd(self.parent.parent)
#
#       pub_busy.busyEnd( self.parent.parent )

# Disable the "Data Publication" button
        self.parent.parent.pub_buttonexpansion.ControlButton3.configure(
            state='disabled')
Exemplo n.º 13
0
   def evt_remove_dataset(self, parent):
      from esgcet.publish import pollDatasetPublicationStatus

      # Start the busy routine to indicate to the users something is happening
      parent.busyCursor = 'watch'
      parent.busyWidgets = [parent.pane2.pane( 'EditPaneTop' ), parent.pane2.pane( 'EditPaneBottom' ), parent.pane2.pane( 'EditPaneStatus' ), parent.pane.pane( 'ControlPane' )]
      pub_busy.busyStart( parent )

      datasetNames = []
      GUI_line = {}
      DELETE = 1
      #UNPUBLISH = 2
      NO_OPERATION = 3
      DeleteLocalDB = pub_expand_deletion_control_gui.deletion_widgets.get_CheckBox1() #   DeleteLocalDB 
      DeleteGateway = pub_expand_deletion_control_gui.deletion_widgets.get_CheckBox2() #   DeleteGateway
      DeleteThredds = pub_expand_deletion_control_gui.deletion_widgets.get_CheckBox3() #   DeleteThredds


      selected_page = parent.main_frame.selected_top_page
      if selected_page is not None:
         tab_name = parent.top_notebook.getcurselection()
         for x in parent.main_frame.top_page_id[selected_page]:
            if parent.main_frame.top_page_id[selected_page][x].cget('bg') != 'salmon' and parent.main_frame.top_page_id2[selected_page][x].cget('bg') != 'salmon':
                dset_name = parent.main_frame.top_page_id2[selected_page][x].cget('text')
                               
                #dsetVersionName1 = self.parent.parent.main_frame.top_page_id2v[selected_page][x].cget('text')
                #query_name, dset_version = parseDatasetVersionId(dsetVersionName1)
                """ ganz I am modifying this so that if a user selects a dataset without a version then we delete all versions of that dataset"""
                try:
                    dset_version = parent.main_frame.version_label[selected_page][x].cget('text')
                except:
                    dset_version = -1
                    #print 'Delete all versions'   
                #dset_version = 1
                if (dset_version == 'N/A' or not dset_version):
                    dset_version = -1
                    # continue   # not published, yet
                # Only delete published events
                status = pollDatasetPublicationStatus(dset_name, self.Session)
                if status == 3  or DeleteGateway or DeleteThredds or DeleteLocalDB:
                   #datasetNames.append(generateDatasetVersionId((dset_name, dset_version)))   
                   datasetNames.append([dset_name, dset_version])   # ganz create name/version to delete                 
                else:
                   parent.main_frame.top_page_id[selected_page][x].configure(relief = 'raised', background = 'salmon', image = self.off)
                GUI_line[ dset_name ] = x
            else:
                if parent.main_frame.top_page_id2[selected_page][x].cget('bg') == 'salmon':
                   parent.main_frame.top_page_id[selected_page][x].configure(relief = 'raised', background = 'salmon', image = self.off)
      else:
         warning("%d: No pages generated for selection. Remove is only used to remove datasets from the Publisher." % logging.WARNING)

      # Remove dataset from the gateway, etc.
      if ((DeleteGateway==0 or DeleteThredds==0) and DeleteLocalDB==1) :
          ans = self.warn_On_Removal()
          if (ans == FALSE):
              return
      
      if DeleteGateway==1:
          gatewayOp = DELETE
      else:
          gatewayOp = NO_OPERATION
    # now decide if there is anything to do
      if (gatewayOp==1 or DeleteThredds==1 or DeleteLocalDB==1) :   
          las=False
          thredds = (DeleteThredds==1)              
          deleteDset = (DeleteLocalDB==1)
              
          testProgress = (parent.parent.statusbar.show, 0, 100)
          status_dict = deleteDatasetList(datasetNames, self.Session, gatewayOp, thredds, las, deleteDset, progressCallback=testProgress)


      # Show the published status
      try:
         for x in status_dict.keys():
            status = status_dict[ x ]
            parent.main_frame.status_label[selected_page][GUI_line[x]].configure(text=pub_controls.return_status_text( status) )
      except:
         pass

      pub_busy.busyEnd( parent )
      # ganz refresh [if there were no exceptions] dataset list after deletions 
      parent.pub_buttonexpansion.query_widgets.parent.parent.ntk.evt_refresh_list_of_datasets(selected_page )
    def evt_popup_directory_window(self):
        # Reset the button colors
        self.cw_dir.configure(background=self.save_dir_btn_color, foreground="black")
        self.cw_file.configure(background=self.save_file_btn_color, foreground="black")
        # self.cw_reg.configure( background=self.save_reg_btn_color, foreground='black' )

        # Start the busy routine to indicate to the users something is happening
        self.parent.parent.busyCursor = "watch"
        self.parent.parent.busyWidgets = [
            self.parent.parent.pane2.pane("EditPaneTop"),
            self.parent.parent.pane2.pane("EditPaneBottom"),
            self.parent.parent.pane2.pane("EditPaneStatus"),
            self.parent.parent.pane.pane("ControlPane"),
        ]
        pub_busy.busyStart(self.parent.parent)

        try:
            # if true, then the dataset is not directly readable and on tertiary storage
            if self.parent.parent.offline == True:
                onoff_line = "offline"
                dirfilename = None
                # Create the dialog to prompt for the entry input
                self.dialog = Pmw.Dialog(
                    self.parent.control_frame2,
                    title="Working off-line",
                    buttons=("OK", "Cancel"),
                    defaultbutton="OK",
                    command=pub_controls.Command(self.evt_work_off_line_directory),
                )

                self.entry1 = Pmw.EntryField(
                    self.dialog.interior(),
                    labelpos="w",
                    label_text="Directory:",
                    entry_width=75,
                    entry_background="aliceblue",
                    entry_foreground="black",
                )
                self.entry1.pack(side="top", fill="x", expand=1, padx=10, pady=5)
                self.entry2 = Pmw.EntryField(
                    self.dialog.interior(),
                    labelpos="w",
                    label_text="Dataset Name:",
                    entry_width=75,
                    entry_background="aliceblue",
                    entry_foreground="black",
                )
                self.entry2.pack(side="top", fill="x", expand=1, padx=10, pady=5)

                Pmw.alignlabels((self.entry1, self.entry2))

                parent_geom = self.parent.parent.geometry()
                geom = string.split(parent_geom, "+")
                d1 = string.atoi(geom[1])
                d2 = string.atoi(geom[2])
                p1 = string.atoi(geom[0].split("x")[0]) * 0.3
                p2 = string.atoi(geom[0].split("x")[1]) * 0.3
                self.dialog.activate(geometry="+%d+%d" % (p1 + d1, p2 + d2))
                if self.parent.parent.offline_directories != "Cancel":
                    # Load up the data information from data extraction
                    self.fill_in_data_information_directory(dirfilename, True, onoff_line=onoff_line)
            else:
                onoff_line = "online"
                if self.generating_file_list_flg == 1:
                    return
                dialog_icon = tkFileDialog.Directory(
                    master=self.parent.control_frame2, title="Directory and File Selection"
                )
                dirfilename = dialog_icon.show(initialdir=os.getcwd())
                if dirfilename in [(), ""]:
                    pub_busy.busyEnd(self.parent.parent)
                    return

                self.stop_listing_flg = 0

                self.parent.parent.extension = []
                self.parent.parent.extension.append((self.data_filter._entryfield.get().split()[-1]))

                # Load up the data information from data extraction
                self.fill_in_data_information_directory(dirfilename, True, onoff_line=onoff_line)

            # Change the color of the selected button
            bcolorbg = Pmw.Color.changebrightness(self.parent.parent, "aliceblue", 0.25)
            bcolorfg = Pmw.Color.changebrightness(self.parent.parent, "aliceblue", 0.85)
            self.cw_dir.configure(background=bcolorbg, foreground=bcolorfg)

        #
        except:
            pub_busy.busyEnd(self.parent.parent)  # catch here in order to turn off the busy cursor ganz
            raise
        finally:
            pub_busy.busyEnd(self.parent.parent)
        #
        #       pub_busy.busyEnd( self.parent.parent )

        # Disable the "Data Publication" button
        self.parent.parent.pub_buttonexpansion.ControlButton3.configure(state="disabled")
Exemplo n.º 15
0
    def new_query_page(self, parent, tab_name=None, query_id=None):
        # Start the busy routine to indicate to the users something is happening

        self.parent.parent.busyCursor = "watch"
        self.parent.parent.busyWidgets = [
            self.parent.parent.pane2.pane("EditPaneTop"),
            self.parent.parent.pane2.pane("EditPaneBottom"),
            self.parent.parent.pane2.pane("EditPaneStatus"),
            self.parent.parent.pane.pane("ControlPane"),
        ]
        pub_busy.busyStart(self.parent.parent)

        try:
            properties = {}
            projectName = self.parent.query_fields["project"].get()  # Must have projectName
            handler = getHandlerByName(projectName, None, self.Session)
            tabcolor = Pmw.Color.changebrightness(self.parent.parent, pub_controls.query_tab_color, 0.6)

            # works up to here

            if query_id is None:
                for x in self.parent.query_fields.keys():
                    query_string = self.parent.query_fields[x].get().lstrip()
                    if (query_string == "-Any-") or (len(query_string) == 0):
                        properties[x] = (2, "%")
                    elif query_string != "-Any-":
                        properties[x] = (1, query_string)

                if properties["id"] == (2, "%"):
                    del properties["id"]  # This causes an error because you cannot modify the 'id'

                listProperties = False

                result, headers = queryDatasets(projectName, handler, self.Session, properties)
                # works up to here

                # running this causes it to fail!
                self.new_page(
                    parent,
                    tabName=None,
                    tab_color=tabcolor,
                    page_type="query",
                    query_result=result,
                    list_fields=headers,
                )

            else:
                result, headers = queryDatasets(projectName, handler, self.Session, properties)
                for x in result:
                    query_id_found = False
                    if query_id == x[0][:-1]:
                        self.new_page(
                            parent,
                            tabName=None,
                            tab_color=tabcolor,
                            page_type="query",
                            query_result=[x],
                            list_fields=headers,
                        )
                        query_id_found = True
                        break
                if query_id_found is False:
                    warning("The specified dataset id '%s' was not found.", query_id)

            # fails here

            # Enable the "Data Publication" button
            self.parent.ControlButton3.configure(state="normal")

            datasetNames = []
            for x in result:
                datasetNames.append(x[1])
            dmap, offline_map, extraFields = queryDatasetMap(datasetNames, self.Session, extra_fields=True)
            # Check if offline or not, then set the iteration values for each page

            selected_page = self.parent.parent.main_frame.selected_top_page
            self.parent.parent.hold_offline[selected_page] = offline_map
            self.parent.parent.main_frame.projectName[selected_page] = projectName
            self.parent.parent.main_frame.dmap[selected_page] = dmap
            self.parent.parent.main_frame.extraFields[selected_page] = extraFields
            self.parent.parent.main_frame.datasetMapfile[selected_page] = None
            self.parent.parent.directoryMap[selected_page] = None
            self.parent.parent.main_frame.dirp_firstfile[selected_page] = None
            self.parent.parent.defaultGlobalValues[selected_page] = {}

        except:
            pub_busy.busyEnd(self.parent.parent)  # catch here in order to turn off the busy cursor ganz
            raise
        finally:
            pub_busy.busyEnd(self.parent.parent)
Exemplo n.º 16
0
    def evt_refresh_list_of_datasets(self, selected_page):

        # Start the busy routine to indicate to the users something is happening
        self.parent.parent.busyCursor = "watch"
        self.parent.parent.busyWidgets = [
            self.parent.parent.pane2.pane("EditPaneTop"),
            self.parent.parent.pane2.pane("EditPaneBottom"),
            self.parent.parent.pane2.pane("EditPaneStatus"),
            self.parent.parent.pane.pane("ControlPane"),
        ]
        pub_busy.busyStart(self.parent.parent)

        try:
            if self.parent.parent.refreshButton[selected_page].cget("relief") == "raised":
                for x in self.parent.parent.main_frame.top_page_id[selected_page]:
                    if self.parent.parent.main_frame.top_page_id[selected_page][x].cget("relief") == "raised":
                        dsetVersionName = self.parent.parent.main_frame.top_page_id2[selected_page][x].cget("text")

                        # ganz added this 1/18/11
                        query_name = self.parent.parent.main_frame.top_page_id2[selected_page][x].cget("text")
                        versionNum = self.parent.parent.main_frame.version_label[selected_page][x].cget("text")
                        #####################################################################################

                        query_name, versionNum = parseDatasetVersionId(dsetVersionName)
                        # ganz TODO test only remove
                        #                  print query_name
                        #                  print versionNum

                        status = pollDatasetPublicationStatus(query_name, self.Session)
                        # ganz catch non selected Red entries to skip 3/20/2011
                        try:
                            self.parent.parent.main_frame.status_label[selected_page][x].configure(
                                text=pub_controls.return_status_text(status)
                            )
                        except:
                            continue

                        # Make sure you update the Ok/Err button
                        # ganz added this (1/18/11) here to catch the case when dset=None (e.g. no local db entry exists)
                        dset = Dataset.lookup(query_name, self.Session)
                        if dset == None:
                            buttonColor = "yellow"
                            buttonText = "Warning"
                            self.parent.parent.main_frame.ok_err[selected_page][x].configure(
                                bg=buttonColor, text=buttonText
                            )
                        elif dset.has_warnings(self.Session):
                            warningLevel = dset.get_max_warning_level(self.Session)
                            if warningLevel >= ERROR_LEVEL:
                                buttonColor = "pink"
                                buttonText = "Error"
                            else:
                                buttonColor = "yellow"
                                buttonText = "Warning"
                            self.parent.parent.main_frame.ok_err[selected_page][x].configure(
                                bg=buttonColor, text=buttonText
                            )
        except:
            pub_busy.busyEnd(self.parent.parent)  # catch here in order to turn off the busy cursor ganz
            raise
        finally:
            pub_busy.busyEnd(self.parent.parent)
        #  pub_busy.busyEnd( self.parent.parent )
        info("Completed refreshing the display.")
Exemplo n.º 17
0
    def evt_remove_dataset(self, parent):
        from esgcet.publish import pollDatasetPublicationStatus

        # Start the busy routine to indicate to the users something is happening
        parent.busyCursor = 'watch'
        parent.busyWidgets = [
            parent.pane2.pane('EditPaneTop'),
            parent.pane2.pane('EditPaneBottom'),
            parent.pane2.pane('EditPaneStatus'),
            parent.pane.pane('ControlPane')
        ]
        pub_busy.busyStart(parent)

        datasetNames = []
        GUI_line = {}
        DELETE = 1
        #UNPUBLISH = 2
        NO_OPERATION = 3
        DeleteLocalDB = pub_expand_deletion_control_gui.deletion_widgets.get_CheckBox1(
        )  #   DeleteLocalDB
        DeleteGateway = pub_expand_deletion_control_gui.deletion_widgets.get_CheckBox2(
        )  #   DeleteGateway
        DeleteThredds = pub_expand_deletion_control_gui.deletion_widgets.get_CheckBox3(
        )  #   DeleteThredds

        selected_page = parent.main_frame.selected_top_page
        if selected_page is not None:
            tab_name = parent.top_notebook.getcurselection()
            for x in parent.main_frame.top_page_id[selected_page]:
                if parent.main_frame.top_page_id[selected_page][x].cget(
                        'bg') != 'salmon' and parent.main_frame.top_page_id2[
                            selected_page][x].cget('bg') != 'salmon':
                    dset_name = parent.main_frame.top_page_id2[selected_page][
                        x].cget('text')

                    #dsetVersionName1 = self.parent.parent.main_frame.top_page_id2v[selected_page][x].cget('text')
                    #query_name, dset_version = parseDatasetVersionId(dsetVersionName1)
                    """ ganz I am modifying this so that if a user selects a dataset without a version then we delete all versions of that dataset"""
                    try:
                        dset_version = parent.main_frame.version_label[
                            selected_page][x].cget('text')
                    except:
                        dset_version = -1
                        #print 'Delete all versions'
                    #dset_version = 1
                    if (dset_version == 'N/A' or not dset_version):
                        dset_version = -1
                        # continue   # not published, yet
                    # Only delete published events
                    status = pollDatasetPublicationStatus(
                        dset_name, self.Session)
                    if status == 3 or DeleteGateway or DeleteThredds or DeleteLocalDB:
                        #datasetNames.append(generateDatasetVersionId((dset_name, dset_version)))
                        datasetNames.append([
                            dset_name, dset_version
                        ])  # ganz create name/version to delete
                    else:
                        parent.main_frame.top_page_id[selected_page][
                            x].configure(relief='raised',
                                         background='salmon',
                                         image=self.off)
                    GUI_line[dset_name] = x
                else:
                    if parent.main_frame.top_page_id2[selected_page][x].cget(
                            'bg') == 'salmon':
                        parent.main_frame.top_page_id[selected_page][
                            x].configure(relief='raised',
                                         background='salmon',
                                         image=self.off)
        else:
            warning(
                "%d: No pages generated for selection. Remove is only used to remove datasets from the Publisher."
                % logging.WARNING)

        # Remove dataset from the gateway, etc.
        if ((DeleteGateway == 0 or DeleteThredds == 0) and DeleteLocalDB == 1):
            ans = self.warn_On_Removal()
            if (ans == FALSE):
                return

        if DeleteGateway == 1:
            gatewayOp = DELETE
        else:
            gatewayOp = NO_OPERATION

    # now decide if there is anything to do
        if (gatewayOp == 1 or DeleteThredds == 1 or DeleteLocalDB == 1):
            las = False
            thredds = (DeleteThredds == 1)
            deleteDset = (DeleteLocalDB == 1)

            testProgress = (parent.parent.statusbar.show, 0, 100)
            status_dict = deleteDatasetList(datasetNames,
                                            self.Session,
                                            gatewayOp,
                                            thredds,
                                            las,
                                            deleteDset,
                                            progressCallback=testProgress)

        # Show the published status
        try:
            for x in status_dict.keys():
                status = status_dict[x]
                parent.main_frame.status_label[selected_page][
                    GUI_line[x]].configure(
                        text=pub_controls.return_status_text(status))
        except:
            pass

        pub_busy.busyEnd(parent)
        # ganz refresh [if there were no exceptions] dataset list after deletions
        parent.pub_buttonexpansion.query_widgets.parent.parent.ntk.evt_refresh_list_of_datasets(
            selected_page)
    def start_harvest(self, parent):
        from esgcet.publish import publishDatasetList
        from esgcet.model import Dataset, PUBLISH_FAILED_EVENT, ERROR_LEVEL

        dcolor1 = Pmw.Color.changebrightness(self.parent.parent, 'aliceblue',
                                             0.8)

        # Make sure the publisher is logged in
        # if not self.parent.parent.password_flg:
        #    self.parent.parent.menu.login_menu.evt_login( self.parent.parent )

        # Start the busy routine to indicate to the users something is happening
        self.parent.parent.busyCursor = 'watch'
        self.parent.parent.busyWidgets = [
            self.parent.parent.pane2.pane('EditPaneTop'),
            self.parent.parent.pane2.pane('EditPaneBottom'),
            self.parent.parent.pane2.pane('EditPaneStatus'),
            self.parent.parent.pane.pane('ControlPane')
        ]
        pub_busy.busyStart(self.parent.parent)
        try:
            # Generate the list of datasets to be published
            datasetNames = []
            GUI_line = {}
            tab_name = self.parent.parent.top_notebook.getcurselection()
            selected_page = self.parent.parent.main_frame.selected_top_page

            if (selected_page is None):
                warning(
                    "Must generate a list of datasets to scan before publishing can occur."
                )
                pub_busy.busyEnd(self.parent.parent)
                return

            for x in self.parent.parent.main_frame.top_page_id[selected_page]:

                if self.parent.parent.main_frame.top_page_id[selected_page][x].cget(
                        'bg'
                ) != 'salmon' and self.parent.parent.main_frame.top_page_id2[
                        selected_page][x].cget('bg') != 'salmon':
                    dset_name = self.parent.parent.main_frame.top_page_id2[
                        selected_page][x].cget('text')
                    #######################################
                    # ganz added this 1/18/11
                    versionNum = self.parent.parent.main_frame.version_label[
                        selected_page][x].cget('text')
                    dsetTuple = (dset_name, versionNum)
                    #dsetName = generateDatasetVersionId(dsetTuple)
                    #####################################################################################
                    # dsetTuple = parseDatasetVersionId(dset_name) # ganz no longer necessary
                    datasetNames.append(dsetTuple)
                    GUI_line[dset_name] = x
                else:
                    if self.parent.parent.main_frame.top_page_id2[
                            selected_page][x].cget('bg') == 'salmon':
                        self.parent.parent.main_frame.top_page_id[
                            selected_page][x].configure(relief='raised',
                                                        background='salmon',
                                                        image=self.off)

        # Publish collection of datasets
            testProgress = (self.parent.parent.statusbar.show, 0, 100)
            publishThredds = (quality_control_widgets.get_CheckBox3() == 1)
            publishGateway = (quality_control_widgets.get_CheckBox2() == 1)
            if (publishThredds):
                print 'publishing to Thredds'
            if (publishGateway):
                print 'publishing to Gateway'

            status_dict = publishDatasetList(datasetNames,
                                             self.Session,
                                             publish=publishGateway,
                                             thredds=publishThredds,
                                             progressCallback=testProgress)

            # Show the published status
            for x in status_dict.keys():
                status = status_dict[x]
                dsetName, versionNo = x
                dsetVersionName = generateDatasetVersionId(x)
                guiLine = GUI_line[dsetName]  # dsetVersionName]

                self.parent.parent.main_frame.status_label[selected_page][
                    guiLine].configure(
                        text=pub_controls.return_status_text(status))
                dset = Dataset.lookup(dsetName, self.Session)
                if dset.has_warnings(self.Session):
                    warningLevel = dset.get_max_warning_level(self.Session)
                    if warningLevel >= ERROR_LEVEL:
                        buttonColor = "pink"
                        buttonText = "Error"
                    else:
                        buttonColor = "yellow"
                        buttonText = "Warning"
                    self.parent.parent.main_frame.ok_err[selected_page][
                        guiLine].configure(
                            text=buttonText,
                            bg=buttonColor,
                            relief='raised',
                            command=pub_controls.Command(
                                self.parent.parent.pub_buttonexpansion.
                                extraction_widgets.error_extraction_button,
                                dset))
                else:
                    self.parent.parent.main_frame.ok_err[selected_page][
                        guiLine].configure(
                            text='Ok',
                            bg=dcolor1,
                            highlightcolor=dcolor1,
                            relief='sunken',
                        )
        except:
            pub_busy.busyEnd(
                self.parent.parent
            )  # catch here in order to turn off the busy cursor ganz
            raise
        finally:
            pub_busy.busyEnd(self.parent.parent)
            self.my_refresh()
    def start_harvest( self, parent ):
        from esgcet.publish import publishDatasetList
        from esgcet.model import Dataset, PUBLISH_FAILED_EVENT, ERROR_LEVEL

        dcolor1 = Pmw.Color.changebrightness(self.parent.parent, 'aliceblue', 0.8 )

        # Make sure the publisher is logged in
       # if not self.parent.parent.password_flg:
       #    self.parent.parent.menu.login_menu.evt_login( self.parent.parent )

        # Start the busy routine to indicate to the users something is happening
        self.parent.parent.busyCursor = 'watch'
        self.parent.parent.busyWidgets = [self.parent.parent.pane2.pane( 'EditPaneTop' ), self.parent.parent.pane2.pane( 'EditPaneBottom' ), self.parent.parent.pane2.pane( 'EditPaneStatus' ), self.parent.parent.pane.pane( 'ControlPane' )]
        pub_busy.busyStart( self.parent.parent )
        try:
        # Generate the list of datasets to be published
           datasetNames=[]
           GUI_line = {}
           tab_name = self.parent.parent.top_notebook.getcurselection()
           selected_page = self.parent.parent.main_frame.selected_top_page

           if (selected_page is None):
              warning("Must generate a list of datasets to scan before publishing can occur.")
              pub_busy.busyEnd( self.parent.parent )
              return

           for x in self.parent.parent.main_frame.top_page_id[selected_page]:

               if self.parent.parent.main_frame.top_page_id[selected_page][x].cget('bg') != 'salmon' and self.parent.parent.main_frame.top_page_id2[selected_page][x].cget('bg') != 'salmon':
                   dset_name = self.parent.parent.main_frame.top_page_id2[selected_page][x].cget('text')
                #######################################
                                  # ganz added this 1/18/11    
                   versionNum = self.parent.parent.main_frame.version_label[selected_page][x].cget('text') 
                   dsetTuple = (dset_name, versionNum)
                #dsetName = generateDatasetVersionId(dsetTuple)                
                  #####################################################################################
                # dsetTuple = parseDatasetVersionId(dset_name) # ganz no longer necessary
                   datasetNames.append(dsetTuple)
                   GUI_line[ dset_name ] = x
               else:
                   if self.parent.parent.main_frame.top_page_id2[selected_page][x].cget('bg') == 'salmon':
                      self.parent.parent.main_frame.top_page_id[selected_page][x].configure(relief = 'raised', background = 'salmon', image = self.off)

        # Publish collection of datasets
           testProgress = (self.parent.parent.statusbar.show, 0, 100)
           publishThredds = (quality_control_widgets.get_CheckBox3()==1)
           publishGateway = (quality_control_widgets.get_CheckBox2()==1)
           if (publishThredds):
               print 'publishing to Thredds'
           if (publishGateway):
               print 'publishing to Gateway'  
                      
           status_dict = publishDatasetList(datasetNames, self.Session, publish=publishGateway, thredds=publishThredds, progressCallback=testProgress)

        # Show the published status
           for x in status_dict.keys():
                status = status_dict[ x ]
                dsetName, versionNo = x
                dsetVersionName = generateDatasetVersionId(x)
                guiLine = GUI_line[dsetName] # dsetVersionName]
            
                self.parent.parent.main_frame.status_label[selected_page][guiLine].configure(text=pub_controls.return_status_text( status) )
                dset = Dataset.lookup(dsetName, self.Session)
                if dset.has_warnings(self.Session):
                    warningLevel = dset.get_max_warning_level(self.Session)
                    if warningLevel>=ERROR_LEVEL:
                        buttonColor = "pink"
                        buttonText = "Error"
                    else:
                        buttonColor = "yellow"
                        buttonText = "Warning"
                    self.parent.parent.main_frame.ok_err[selected_page][guiLine].configure(
                        text = buttonText,
                        bg = buttonColor,
                        relief = 'raised',
                        command = pub_controls.Command( self.parent.parent.pub_buttonexpansion.extraction_widgets.error_extraction_button, dset ) )
                else:
                    self.parent.parent.main_frame.ok_err[selected_page][guiLine].configure(
                        text = 'Ok',
                        bg = dcolor1,
                        highlightcolor = dcolor1,
                        relief = 'sunken',
                        )
        except:
            pub_busy.busyEnd( self.parent.parent )  # catch here in order to turn off the busy cursor ganz
            raise
        finally:
           pub_busy.busyEnd( self.parent.parent )
           self.my_refresh()