Ignore:
Timestamp:
May 2, 2017 1:58:01 PM (7 years ago)
Author:
Paul Kienzle <pkienzle@…>
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, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
d66dbcc
Parents:
74d9780 (diff), 658dd57 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge with master

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/guiframe/CategoryInstaller.py

    refe730d r914ba0a  
    1212import sys 
    1313import json 
    14 from collections import defaultdict 
     14import logging 
     15from collections import defaultdict, OrderedDict 
    1516 
    1617from sas.sasgui import get_user_dir 
    1718 
    1819USER_FILE = 'categories.json' 
     20 
     21logger = logging.getLogger(__name__) 
    1922 
    2023class CategoryInstaller: 
     
    2427    Note - class is entirely static! 
    2528    """ 
    26  
    2729 
    2830    def __init__(self): 
     
    4446        import sas.sasgui.perspectives.fitting.models 
    4547        return sas.sasgui.perspectives.fitting.models.get_model_python_path() 
    46      
     48 
    4749    @staticmethod 
    4850    def _get_default_cat_file_dir(): 
     
    5557        import sas.sasview 
    5658        cat_file = "default_categories.json" 
    57          
     59 
    5860        possible_cat_file_paths = [ 
    5961            os.path.join(os.path.split(sas.sasview.__file__)[0], cat_file),           # Source 
     
    6567            if os.path.isfile(path): 
    6668                return os.path.dirname(path) 
    67              
     69 
    6870        raise RuntimeError('CategoryInstaller: Could not find folder containing default categories') 
    6971 
     
    7880        by_model_dict = defaultdict(list) 
    7981        model_enabled_dict = defaultdict(bool) 
    80          
     82 
    8183        for category in master_category_dict: 
    8284            for (model, enabled) in master_category_dict[category]: 
    8385                by_model_dict[model].append(category) 
    8486                model_enabled_dict[model] = enabled 
    85      
     87 
    8688        return (by_model_dict, model_enabled_dict) 
    87  
    8889 
    8990    @staticmethod 
    9091    def _regenerate_master_dict(by_model_dict, model_enabled_dict): 
    9192        """ 
    92         regenerates master_category_dict from by_model_dict  
     93        regenerates master_category_dict from by_model_dict 
    9394        and model_enabled_dict 
    9495        returns the master category dictionary 
     
    99100                master_category_dict[category].append(\ 
    100101                    (model, model_enabled_dict[model])) 
    101          
    102         return master_category_dict 
     102        return OrderedDict(sorted(master_category_dict.items(), key=lambda t: t[0])) 
    103103 
    104104    @staticmethod 
     
    111111    @staticmethod 
    112112    def get_default_file(): 
    113         """ 
    114         returns the path of the default file 
    115         e.g. blahblah/default_categories.json 
    116         """ 
    117         return os.path.join(\ 
    118             CategoryInstaller._get_default_cat_file_dir(), "default_categories.json") 
    119          
     113        logger.warning("CategoryInstaller.get_default_file is deprecated.") 
     114 
    120115    @staticmethod 
    121116    def check_install(homedir = None, model_list=None): 
     
    125120        compile it and install 
    126121        :param homefile: Override the default home directory 
    127         :param model_list: List of model names except customized models 
     122        :param model_list: List of model names except those in Plugin Models 
     123               which are user supplied. 
    128124        """ 
    129         #model_list = [] 
    130         default_file = CategoryInstaller.get_default_file() 
     125        _model_dict = { model.name: model for model in model_list} 
     126        _model_list = _model_dict.keys() 
     127 
    131128        serialized_file = None 
    132         master_category_dict = defaultdict(list) 
    133         if homedir == None: 
     129        if homedir is None: 
    134130            serialized_file = CategoryInstaller.get_user_file() 
    135131        else: 
    136132            serialized_file = os.path.join(homedir, USER_FILE) 
    137133        if os.path.isfile(serialized_file): 
    138             cat_file = open(serialized_file, 'rb') 
     134            with open(serialized_file, 'rb') as f: 
     135                master_category_dict = json.load(f) 
    139136        else: 
    140             cat_file = open(default_file, 'rb') 
    141         master_category_dict = json.load(cat_file) 
    142 #        master_category_dict = pickle.Unpickler(cat_file).load() 
     137            master_category_dict = defaultdict(list) 
     138 
    143139        (by_model_dict, model_enabled_dict) = \ 
    144140                CategoryInstaller._regenerate_model_dict(master_category_dict) 
    145         cat_file.close() 
    146         add_list = model_list 
     141        add_list = _model_list 
    147142        del_name = False 
    148143        for cat in master_category_dict.keys(): 
    149144            for ind in range(len(master_category_dict[cat])): 
    150145                model_name, enabled = master_category_dict[cat][ind] 
    151                 if model_name not in model_list: 
    152                     del_name = True  
     146                if model_name not in _model_list: 
     147                    del_name = True 
    153148                    try: 
    154149                        by_model_dict.pop(model_name) 
    155150                        model_enabled_dict.pop(model_name) 
    156151                    except: 
    157                         pass 
     152                        logger.error("CategoryInstaller: %s", sys.exc_value) 
    158153                else: 
    159154                    add_list.remove(model_name) 
     
    161156            for model in add_list: 
    162157                model_enabled_dict[model]= True 
    163                 by_model_dict[model].append('Uncategorized') 
    164      
     158                if _model_dict[model].category is None or len(str(_model_dict[model].category.capitalize())) == 0: 
     159                    by_model_dict[model].append('Uncategorized') 
     160                else: 
     161                    category = _model_dict[model].category 
     162                    toks = category.split(':') 
     163                    category = toks[-1] 
     164                    toks = category.split('-') 
     165                    capitalized_words = [t.capitalize() for t in toks] 
     166                    category = ' '.join(capitalized_words) 
     167 
     168                    by_model_dict[model].append(category) 
     169 
    165170            master_category_dict = \ 
    166171                CategoryInstaller._regenerate_master_dict(by_model_dict, 
    167172                                                          model_enabled_dict) 
    168              
    169             json.dump( master_category_dict, 
    170                          open(serialized_file, 'wb') ) 
     173 
     174            json.dump(master_category_dict, open(serialized_file, 'wb')) 
Note: See TracChangeset for help on using the changeset viewer.