예제 #1
0
    def focus_node_from_path(self, fullpath, api_target):
        """ split path, find/create root with the first part,
            and calls expands_to_node to finish the job
            args : fullpath, string with dot (iph.core.tree)
        """

        for api_option in self.list_options:
            if api_option is api_target:
                api_option.rootnode.IsExpanded = True

            elif api_option.rootnode:
                api_option.rootnode.IsExpanded = False
        try:
            nodepath = fullpath.split(api_target.path)[1]
            nodeslist = [node for node in nodepath.split('.') if node][::-1]
            parent = api_target.rootnode

            while nodeslist:
                next_node = nodeslist.pop()
                for node in parent.members:
                    if node.model.name == next_node:
                        node.IsExpanded = True  # triggers members creation
                        parent = node
                        break
            if node:
                node.IsSelected = True

        except Exception as error:
            logger.error('Error focus_node_from_path :' + str(error))
예제 #2
0
파일: main.py 프로젝트: thongtv77/iph
    def save_settings_and_quit(self):
        """ check if changes in settings and ask for save or cancel
            window pos is saved anyway
        """
        _exit = True
        try:
            self.settings['window']['Left'] = self.main_form.Left
            self.settings['window']['Top'] = self.main_form.Top
            self.settings['window']['Width'] = self.main_form.Width
            self.settings['window']['Height'] = self.main_form.Height

            new_targets = [api.get_json()
                           for api in self.modelview.treemanager.list_options]
            
            if not new_targets == self.settings['api_set']:
                
                action_user = ok_no_cancel('Save the targets changes ?')
                if action_user:
                    self.settings['api_set'] = new_targets

                elif action_user is None:
                    _exit = False
            if _exit:
                save_settings_to_file(self.settings, self.settings_file)
            
        except Exception as error:
            logger.error('save_settings failed :\n' + str(error))

        finally:
            return _exit
예제 #3
0
 def release_option(self, optionitem):
     """ todo plug in UI
     """
     try:
         self.list_options.Remove(optionitem)
     except Exception as error:
         logger.error('Error release_option' + str(error))
예제 #4
0
파일: basemodel.py 프로젝트: thongtv77/iph
 def get_members(self):
     if self.templ_members:
         try:
             for name, ref in self.templ_members(self.ref):
                 yield ModelObject(ref, name)
         except Exception as error:
             logger.error(error)
예제 #5
0
 def remove_root_node(self, ref_node):
     """ delete rootnode from the tree
     """
     try:
         ref_node.members.Clear()
         self.list_roots.Remove(ref_node)
     except Exception as error:
         logger.error('Error remove_root_node' + str(error))
예제 #6
0
파일: main.py 프로젝트: thongtv77/iph
 def on_run_exception(self, sender, event):
     """
         catch runtime exception when running alone
     """
     msg = str(event.Exception.Message)
     ok_error(msg)
     logger.error('Runtime exception :\n' + msg)
     event.Handled = True
예제 #7
0
파일: config.py 프로젝트: thongtv77/iph
def replace_key_in_json(str_key, new_val, file_path):
    """ arg : str_key as string, new_val, path as string
    """
    try:
        saved_settings = load_settings_from_file(file_path)
        saved_settings[str_key] = new_val
        with open(file_path, 'w') as jfile:
            json.dump(saved_settings, jfile, indent=4, sort_keys=True)

    except Exception as error:
        logger.error('save_key_to_json failed :\n' + str(error))
예제 #8
0
 def update_current_tab(self, sel_tab, sel_node):
     """ replace details in selected tabview
         called by ui code-behind (on_node_select event)
     """
     try:
         if not len(self.tabs_list):
             self.tabs_list.Add(TabViewItem(sel_node.model))
         else:
             sel_tab.refresh(sel_node.model)
     except Exception as error:
         logger.error('update_current_tab for : {} - {}/ {}'.format(
             sel_tab, sel_node, error))
예제 #9
0
    def close_tab(self, item):
        """ close selected tab unless it's the last
        """
        try:
            if len(self.tabs_list) > 1:
                self.tabs_list.Remove(item)
                item.datagrid = None
                item = None
                gc.collect()

        except Exception as error:
            logger.error('Error close_tab : ' + str(error))
예제 #10
0
파일: config.py 프로젝트: thongtv77/iph
def load_json_index():
    """ 1st attempt to use index for autocompletion and additional doc
    """
    try:
        with open(os.path.join(DIR_PATH, 'index_revit.json'), 'r') as jfile:
            index = json.load(jfile)

    except Exception as error:

        logger.error('load_json index :\n' + str(error))

    return index
예제 #11
0
    def add_new_tab(self, newmodel):
        """ display a new tab
            arg: newmodel , model of the gridrow item given by ui event
            (works with treeitem too)
        """
        try:
            new_tab = TabViewItem(newmodel)
            self.tabs_list.Add(new_tab)
            self.manager.main_form.ui_tabs_control.SelectedIndex = len(
                self.tabs_list) - 1

        except Exception as error:
            logger.error('add_new_tab for : ' + str(error))
예제 #12
0
파일: config.py 프로젝트: thongtv77/iph
def save_settings_to_file(settings, file_path):
    """try to save settings to file
        arg : settings as dict, path as string
    """
    try:
        for opt in settings['api_set']:
            opt['enabled'] = bool(
                opt['enabled'])  # revit saves with uppercase bool ?
        with open(file_path, 'w') as jfile:
            json.dump(settings, jfile, indent=4, sort_keys=True)

    except Exception as error:
        logger.error('save_settings_to_file failed :\n' + str(error))
예제 #13
0
파일: tabs.py 프로젝트: thongtv77/iph
    def update_grid(self):
        """ refresh grid rows from new model/new template filters
        """
        self.datagrid = []
        gc.collect()
        try:
            for model in self.model.get_members():
                try:
                    self.datagrid.append(ModelGridRow(model))
                except Exception as error:
                    logger.error('update_grid row error : ' + str(error))

        except Exception as error:
            logger.error('update_grid template error : ' + str(error))

        self.backup = self.datagrid[:]
        self.NotifyPropertyChanged("datagrid")
예제 #14
0
    def create_root_node(self, ref_object, name=''):
        """ add a new root to the tree
            args : ref_object, reference
                  name, optional, string
        """
        if not name:
            name = get_member_name(ref_object)
        try:
            rootnode = NodeBase(ModelObject(ref_object, name), None)
            rootnode.expand_node()

        except Exception as error:
            rootnode = NodeBase(ModelObject(None, str(error)), None)
            logger.error('Error create_root_node :' + str(error))

        self.list_roots.Add(rootnode)

        return rootnode
예제 #15
0
파일: config.py 프로젝트: thongtv77/iph
def load_settings_from_file(file_path):
    """try to read settings from file in directory
        else return the defaults
        arg : path as string
    """
    try:
        with open(file_path, 'r') as jfile:
            settings = json.load(jfile)

    except Exception as error:
        settings = DEFAULT_SETTINGS
        if ok_or_not(
                'Something wrong in the file, restore defaults settings ?'):
            save_settings_to_file(DEFAULT_SETTINGS, file_path)

        logger.error('load_settings_from_file failed :\n' + str(error))

    return settings
예제 #16
0
파일: __init__.py 프로젝트: thongtv77/iph
def discover_and_run(verbose=False):
    """ loads all 'test_*' files and performs all 'test_*' functions
        
    """
    if verbose:
        logger.verbose(True)
    logger.title('Test all components')

    NB_TESTS = 0
    NB_FAILS = 0
    NB_CRASH = 0
    NB_PASSED = 0
    TODO = set()

    import glob, os
    os.chdir(os.path.dirname(__file__))
    modules_tests = glob.glob('test*.py')
    NB_MODS = len(modules_tests)
    checkmod = 0
    for file in modules_tests:
        name_mod = file.split('.')[0]

        test_cases = []
        try:
            tmodule = importlib.import_module('.' + name_mod, 'iph.tests')

            test_cases = [
                case for case in dir(tmodule) if case.startswith('test_')
            ]

            if not test_cases:
                continue

            logger.title('\n   *   *  MODULE : ' + name_mod)
            nb_cases = len(test_cases)
            NB_TESTS += nb_cases
            crashs = NB_CRASH
            fails = NB_FAILS
            passed = NB_PASSED

            for case in test_cases:

                msg = 'Test : ' + case + '.' * (50 - len(case))
                try:
                    dbg_timercheck(getattr(tmodule, case))()
                    msg += 'OK'
                    NB_PASSED += 1

                except AssertionError as error:

                    msg += 'FAILED {}'.format(error)
                    NB_FAILS += 1
                    TODO.add(case)
                except:
                    logger.error(msg)
                    TODO.add(case)
                    NB_CRASH += 1
                    msg += 'CRASHED '
                    if verbose:
                        import traceback
                        traceback.print_exc()

                finally:
                    logger.info(msg)

            logger.title(
                '\tEnd ===> {} fails - {} crashed ({} errors raised) - {}/{}\n'
                .format(NB_FAILS - fails, NB_CRASH - crashs,
                        len(logger.errors), NB_PASSED - passed, nb_cases))
            checkmod += 1
예제 #17
0
파일: __init__.py 프로젝트: thongtv77/iph
                    TODO.add(case)
                    NB_CRASH += 1
                    msg += 'CRASHED '
                    if verbose:
                        import traceback
                        traceback.print_exc()

                finally:
                    logger.info(msg)

            logger.title(
                '\tEnd ===> {} fails - {} crashed ({} errors raised) - {}/{}\n'
                .format(NB_FAILS - fails, NB_CRASH - crashs,
                        len(logger.errors), NB_PASSED - passed, nb_cases))
            checkmod += 1

        except Exception as error:
            break
            logger.error(name_mod + ' crashed !!!!! : {}'.format(error))
            import traceback
            traceback.print_exc()

    logger.title(
        '\n\t\tTESTS END : {} modules test - {}/{} PASSED -  {} fails / {} crashed'
        .format(NB_MODS, NB_PASSED, NB_TESTS, NB_FAILS, NB_CRASH))

    logger.info('guilty functions :\n' + '\n'.join(TODO))

    if not checkmod == NB_MODS:
        logger.info('tests CRASHED !!')