Changeset 9466f2d6 in sasview for sansview/perspectives/fitting


Ignore:
Timestamp:
Mar 29, 2011 11:08:55 AM (14 years ago)
Author:
Gervaise Alina <gervyh@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
29ef718
Parents:
852354c8
Message:

make sure plugin model are recompile online when the plugin dir has changed

Location:
sansview/perspectives/fitting
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • sansview/perspectives/fitting/basepage.py

    r66ff250 r9466f2d6  
    18181818        Fill panel's combo box according to the type of model selected 
    18191819        """ 
    1820         self.model_list_box = self.parent.update_model_list() 
    18211820        if self.shape_rbutton.GetValue(): 
    18221821            ##fill the combobox with form factor list 
  • sansview/perspectives/fitting/fitpage.py

    r9a22655 r9466f2d6  
    5050        self._set_bookmark_flag(False) 
    5151        self._set_save_flag(False) 
    52  
     52     
     53   
     54         
    5355    def _on_fit_complete(self): 
    5456        """ 
     
    532534        self.initialize_combox() 
    533535        wx.EVT_COMBOBOX(self.formfactorbox, -1, self._on_select_model) 
     536 
    534537        wx.EVT_COMBOBOX(self.structurebox, -1, self._on_select_model) 
    535538        wx.EVT_COMBOBOX(self.multifactorbox, -1, self._on_select_model) 
     
    9971000        call back for model selection 
    9981001        """   
    999         if self.plugin_rbutton.GetValue(): 
    1000             self._show_combox_helper() 
    1001             print "went here" 
     1002         
    10021003             
    10031004        self._on_select_model_helper()  
     
    10591060            event = PageInfoEvent(page = self) 
    10601061            wx.PostEvent(self.parent, event)  
     1062            #update list of plugins if new plugin is available 
     1063            if self.plugin_rbutton.GetValue(): 
     1064                temp = self.parent.update_model_list() 
     1065                if temp: 
     1066                    self.model_list_box = temp 
     1067                    current_val = self.formfactorbox.GetValue() 
     1068                    pos = self.formfactorbox.GetSelection() 
     1069                    self._show_combox_helper() 
     1070                    self.formfactorbox.SetSelection(pos) 
     1071                    self.formfactorbox.SetValue(current_val) 
    10611072        self.SetupScrolling() 
     1073     
    10621074       
    10631075    def _onparamEnter(self,event): 
  • sansview/perspectives/fitting/fitpanel.py

    r66ff250 r9466f2d6  
    7878        """ 
    7979        """ 
    80         self.model_list_box = self.menu_mng.update() 
    81         return self.model_list_box 
     80        temp = self.menu_mng.update() 
     81        if len(temp): 
     82            self.model_list_box = temp 
     83        return temp 
    8284         
    8385         
  • sansview/perspectives/fitting/fitting.py

    r58e0c83 r9466f2d6  
    6969        self.calc_1D = None 
    7070        self.fit_thread_list = {} 
    71          
     71        self.fit_panel = None 
    7272        # Start with a good default 
    7373        self.elapsed = 0.022 
  • sansview/perspectives/fitting/models.py

    r9a22655 r9466f2d6  
    33import wx.lib.newevent 
    44import imp 
    5 import os,sys,math 
     5import os 
     6import sys 
     7import math 
    68import os.path 
    7  
    8 (ModelEvent, EVT_MODEL) = wx.lib.newevent.NewEvent() 
    9 from sans.guiframe.events import StatusEvent   
    109# Time is needed by the log method 
    1110import time 
    1211 
     12from sans.guiframe.events import StatusEvent   
    1313# Explicitly import from the pluginmodel module so that py2exe 
    1414# places it in the distribution. The Model1DPlugin class is used 
    1515# as the base class of plug-in models. 
    1616from sans.models.pluginmodel import Model1DPlugin 
    17      
     17    
     18PLUGIN_DIR = 'plugins'  
     19 
    1820def log(message): 
    1921    """ 
     
    2325    out.close() 
    2426 
    25 def findModels(): 
    26     """ 
    27     """ 
    28     log("looking for models in: %s/plugins" % os.getcwd()) 
    29     if os.path.isdir('plugins'): 
    30         return _findModels('plugins') 
    31     return [] 
    32      
     27 
    3328def _check_plugin(model, name): 
    3429    """ 
     
    8277    try: 
    8378        list = os.listdir(dir) 
    84         #always recompile the folder plugin 
    85         import compileall 
    86         compileall.compile_dir(dir, force=1) 
    8779        for item in list: 
    8880            toks = os.path.splitext(os.path.basename(item)) 
     
    166158    ## Event owner (guiframe) 
    167159    event_owner = None 
     160    last_time_dir_modified = 0 
     161     
    168162    def __init__(self): 
    169163        """ 
     
    172166        self._getModelList() 
    173167         
     168    def findModels(self): 
     169        """ 
     170        find  plugin model in directory of plugin .recompile all file 
     171        in the directory if file were modified 
     172        """ 
     173        if self.is_changed(): 
     174            #always recompile the folder plugin 
     175            import compileall 
     176            compileall.compile_dir(dir=PLUGIN_DIR, force=1) 
     177            log("looking for models in: %s/plugins" % os.getcwd()) 
     178            return _findModels(PLUGIN_DIR) 
     179        return  {} 
     180        
     181     
    174182    def _getModelList(self): 
    175183        """ 
     
    392400     
    393401        #Looking for plugins 
    394         self.stored_plugins = findModels() 
     402        self.stored_plugins = self.findModels() 
    395403        self.plugins = self.stored_plugins.values() 
    396404        self.plugins.append(ReflectivityModel) 
     
    400408        return 0 
    401409 
     410    def is_changed(self): 
     411        """ 
     412        check the last time the plugin dir has changed and return true 
     413         is the directory was modified else return false 
     414        """ 
     415        is_modified = False 
     416        if os.path.isdir(PLUGIN_DIR): 
     417            temp =  os.path.getmtime(PLUGIN_DIR) 
     418            if  self.last_time_dir_modified != temp: 
     419                is_modified = True 
     420                self.last_time_dir_modified = temp 
     421        return is_modified 
    402422     
    403423    def update(self): 
    404424        """ 
    405         """ 
    406         new_plugins = findModels() 
    407         for name, plug in  new_plugins.iteritems(): 
    408             if name not in self.stored_plugins.keys(): 
    409                 self.stored_plugins[name] = plug 
    410                 self.plugins.append(plug) 
    411         self.model_combobox.set_list("Customized Models", self.plugins) 
    412         return self.model_combobox.get_list() 
     425        return a dictionary of model if  
     426        new models were added else return empty dictionary 
     427        """ 
     428        new_plugins = self.findModels() 
     429        if len(new_plugins) > 0: 
     430            for name, plug in  new_plugins.iteritems(): 
     431                if name not in self.stored_plugins.keys(): 
     432                    self.stored_plugins[name] = plug 
     433                    self.plugins.append(plug) 
     434            self.model_combobox.set_list("Customized Models", self.plugins) 
     435            return self.model_combobox.get_list() 
     436        else: 
     437            return {} 
    413438         
    414439    def populate_menu(self, modelmenu, event_owner): 
Note: See TracChangeset for help on using the changeset viewer.