Example #1
0
def convert_xml_file2dict(xml_filename, codepage='utf-8'):
    """
    Простая конвертация XML файла в словарь.
    @param xml_filename: Полное наименование XML файла
    @param codepage: Кодовая страница XML файла.
    @return: Словарь, соотыветствующий XML файлу.
    """
    if not os.path.exists(xml_filename):
        log.warning(u'XML файл не найден <%s>' % xml_filename)
        return dict()

    body_xml = ic_extend.load_file_text(xml_filename, 'utf-8')

    # Перекодировать текст, если надо
    src_codepage = ic_str.get_codepage(body_xml)
    if src_codepage and src_codepage.lower() != codepage:
        log.info(u'Перекодировка XML файла <%s> из <%s> в <%s> кодировку' %
                 (xml_filename, src_codepage, codepage))
        body_xml = ic_str.recode_text(body_xml, src_codepage, codepage)
    elif not src_codepage:
        log.warning(u'Не возможно определить кодовую страницу XML файла <%s>' %
                    xml_filename)
        return dict()

    return convert_xml_text2dict(body_xml, codepage)
Example #2
0
    def _runPrjCmd(self, AppDir_, PrjPath_, username=None):
        """
        Запуск проекта на исполнение.
        @param AppDir_: Папка приложения.
        @param PrjPath_: Папка проекта.
        @param username: Имя пользователя, запускающего проект.
            Если не указано (None), то производиться выбор из списка пользователей,
            присутствующих в проекте.
        """
        import ic.utils.ic_exec as ic_exec

        ic_exec.CreateRunApp(AppDir_)

        # Коммандная строка
        dbg_mode_cmd = ''

        if username is None:
            username = self.choiceUsernameDlg()

        if username is None:
            log.warning(u'Не определен пользователь запуска проекта')
            return

        if self.debug_mode:
            dbg_mode_cmd = '-dbg'

        if ic_util.isOSWindowsPlatform():
            cmd = '\"%s/python.exe\" \"%s/run.py\" -run %s \"%s/\" -s %s' % (
                sys.prefix, AppDir_, dbg_mode_cmd, PrjPath_, username)
        else:
            cmd = '%s %s/run.py -run %s %s/ -s %s' % (
                sys.executable, AppDir_, dbg_mode_cmd, PrjPath_, username)

        log.info(u'RUN PROJECT: <%s>' % cmd)
        ic_exec.RunTask(cmd)
Example #3
0
def CreateInitFile(Path_):
    """
    Создает файл __init__.py в директории Path_ если его там нет.
    @return: Возвращает True, если файл был создан или уже есть.
    """
    if not Path_:
        return False

    try:
        os.makedirs(Path_)
    except:
        pass

    init_file = os.path.join(Path_, '__init__.py')
    if os.path.isfile(init_file):
        return True

    f = None
    try:
        f = open(init_file, 'w')
        f.write(_InitFileDefault)
        f.close()
        log.info(u'Создан файл: <%s>.' % init_file)
        return True
    except:
        if f:
            f.close()
        log.fatal(u'Ошибка создания модуля %s/__init__.py %s' % Path_)
        return False
Example #4
0
def icPassportListDlg(Win_=None, Prj_=None, Default_=None):
    """
    Выбор списка паспортов выбранных объектов.
    @param Win_: Ссылка на окно.
    @param Prj_: Объект проекта.
    @return: Возвращает список паспортов выбранных объектов или None в случае ошибки.
    """
    dlg = None
    win_clear = False
    try:
        if Win_ is None:
            id_ = wx.NewId()
            Win_ = wx.Frame(None, id_, '')
            win_clear = True

        dlg = icPassportListDialog(Win_, Prj_, Default_)
        if dlg.ShowModal() == wx.ID_OK:
            result = dlg.getPassports()
            dlg.Destroy()
            # Удаляем созданное родительское окно
            if win_clear:
                Win_.Destroy()
            log.info(u'<<<PASSPORTS>> <%s> type <%s>' % (result, type(result)))
            return result

    finally:
        if dlg:
            dlg.Destroy()

        # Удаляем созданное родительское окно
        if win_clear:
            Win_.Destroy()

    return None
Example #5
0
def RunProgramm(Cmd_, Mode_=os.P_NOWAIT):
    """
    Запуск программы на выполнение.
    @type Cmd_: C{string}
    @param Cmd_: Комманда системы.
    @param Mode_: Режим выполнения комманды. См os режимы выполнения.
    @return: True/False.
    """
    try:
        parse_args = Cmd_.strip().split(' ')
        args = []
        i = 0
        while i < len(parse_args):
            parse_arg = parse_args[i]
            if parse_arg[0] == '"' and parse_arg[-1] != '"':
                while parse_arg[-1] != '"' and i < len(parse_args):
                    i += 1
                    parse_arg += ' ' + parse_args[i]
            # Стереть """
            if parse_arg[0] == '"':
                parse_arg = parse_arg[1:]
            if parse_arg[-1] == '"':
                parse_arg = parse_arg[:-1]

            args.append(parse_arg)
            i += 1
        log.info(u'Run programm: %s' % args)
        os.spawnve(Mode_, args[0], args, os.environ)
        return True
    except:
        log.fatal(u'Run programm error: %s' % Cmd_)
        return False
Example #6
0
    def _debugWinPDB_old(self):
        """
        Отладка в WinPDB.
        """
        import ic.utils.ic_exec as ic_exec
        import sys

        python_exe = sys.executable
        winpdb_module = '%s%sLib%ssite-packages%swinpdb.py' % (
            sys.prefix, ic_file.PATH_SEPARATOR, ic_file.PATH_SEPARATOR,
            ic_file.PATH_SEPARATOR)

        if os.path.exists(winpdb_module):
            # Если установлен WinPDB
            prj_path = os.path.dirname(self.getRoot().getPrjFileName())
            defis_dir = os.path.dirname(os.path.dirname(prj_path))

            ic_exec.CreateRunApp(defis_dir)

            # Коммандная строка
            cmd = '\'%s\' \'%s\' -c -t \'%s/run.py\' -run \'%s/\' -s' % (
                python_exe, winpdb_module, defis_dir, prj_path)

            log.info('DEBUG PROJECT: <%s>' % cmd)
            ic_exec.RunTaskBAT(cmd)
Example #7
0
    def init_scan_objects(self):
        """
        Инициализация сканируемых объектов.
        @return: True/False.
        """
        self._scan_classes = dict()

        # Теги
        self._scan_tags = self._init_scan_objects(self.getChildrenTags())
        # События
        self._scan_events = self._init_scan_objects(self.getChildrenEvents())
        # Аварии
        self._scan_alarms = self._init_scan_objects(self.getChildrenAlarms())

        log.info(u'Информация о сканируемых объектах в <%s>:' % self.getName())
        if not self._scan_classes:
            log.warning(u'\tНе определены классы сканирования')
        else:
            log.info(u'\tКлассы сканирования: %s' %
                     [psp[0][1] for psp in self._scan_classes.keys()])
        if not self._scan_tags:
            log.warning(u'\tНе определены сканируемые теги')
        else:
            log.info(u'\tСканируемые теги:')
            self._log_scan_objects(self._scan_tags)
        if not self._scan_events:
            log.warning(u'\tНе определены сканируемые события')
        else:
            log.info(u'\tСканируемые события:')
            self._log_scan_objects(self._scan_events)
        if not self._scan_alarms:
            log.warning(u'\tНе определены сканируемые аварии')
        else:
            log.info(u'\tСканируемые аварии:')
            self._log_scan_objects(self._scan_alarms)
Example #8
0
    def run(self):
        """
        Функция основного цикла обработки.
        """
        log.info(u'Запуск цикла обработки <%s>' % self.getName())
        self.is_running = False
        while not self.exit_run:
            start_tick = time.time()

            scan_classes_psp = self.get_active_scan_classes_psp(start_tick)

            # Подготовка тегов для чтения
            read_tags = self.get_refreshable_tags(*scan_classes_psp)
            # Чтение тегов
            self.read_tags(*read_tags)

            # События
            self.do_events(*scan_classes_psp)

            # Аварии
            self.do_alarms(*scan_classes_psp)

            # Движок считается запущенным после удачного первого цикла обработки
            self.is_running = True

        self.is_running = False
        log.info(u'Останов цикла обработки <%s>' % self.getName())
Example #9
0
 def _log_scan_objects(self, scan_dict):
     """
     """
     for psp in scan_dict.keys():
         log.info(u'\t\tКласс сканирования <%s>' % psp[0][1])
         for obj in scan_dict[psp]:
             log.info(u'\t\t\tОбъект <%s>' % obj.name)
Example #10
0
def run_parser(v8unpack_filename, cf_filename, cf_dirname, txt_ctrl=None):
    """
    Запуск парсера на исполнение.
    @param v8unpack_filename: Полное имя файла парсера.
    @param cf_filename: Файл CF конфигурации.
    @param cf_dirname: Папка в которую будет производиться вывод метаобъектов.
    @param txt_ctrl: Контрол wxTextCtrl для вывода сообщений утилиты парсера.
    @return:  True/False.
    """
    if not os.path.exists(v8unpack_filename):
        log.warning(u'Файл парсера конфигурации 1С <%s> не найден' % v8unpack_filename)
        return False

    # Перед запуском проверить права доступа на запуск утилиты парсера
    if not os.access(v8unpack_filename, os.X_OK):
        os.chmod(v8unpack_filename, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
        log.info(u'Установка прав на исполнение для файла: <%s>' % v8unpack_filename)

    try:
        cmd = '%s -PARSE "%s" "%s"' % (v8unpack_filename, cf_filename, cf_dirname)

        log.info(u'RUN COMMAND: <%s>' % cmd)
        log_console.log_cmd(cmd, txt_ctrl=txt_ctrl)
        return True
    except:
        log.fatal(u'Ошибка выполнения парсинга конфигурационного файла <%s>' % cf_filename)
    return False
Example #11
0
def getPrjRoot():
    """
    Корневой объект дерева проекта.
    """
    try:
        kernel = getKernel()
        if kernel:
            kernel_prj_root = kernel.GetContext().getPrjRoot()
            if kernel_prj_root:
                log.info(u'KERNEL: <%s>\tPROJECT: <%s>' %
                         (kernel, kernel_prj_root))
                return kernel_prj_root
            else:
                log.warning(
                    u'Не инициализирован проект в контексте ядра системы')
            # Берем из глобального контекста
            prj_root = icGet('PRJ_ROOT')
            if prj_root:
                return prj_root
            else:
                log.warning(
                    u'Не инициализирован проек в хранилище/окружении системы')
        return None
    except:
        log.fatal(u'Ошибка определения корневого элемента дерева')
Example #12
0
 def Admin(self,
           ParentForm_=None,
           Title_=u'Администрирование справочников',
           MsgTxt_=u'Выберите справочник для редактирования:'):
     """
     Администрирование справочной системы, описываемой данным менеджером.
     @param ParentForm_: Родительское окно для формы редактирования справочника.
     """
     if ParentForm_ is None:
         ParentForm_ = ic_user.icGetMainWin()
     spravs = self.getContainer().getAll().values()
     choice_str = [
         sprav.name + u' - ' +
         sprav.description if sprav.description else u'' for sprav in spravs
     ]
     idx = ic_dlg.icSingleChoiceIdxDlg(ParentForm_, Title_, MsgTxt_,
                                       choice_str)
     if idx >= 0:
         edit_sprav = spravs[idx]
         log.info(u'Редактирование справочника: %d %s' %
                  (idx, edit_sprav.name))
         try:
             edit_sprav.Edit(ParentForm_=ParentForm_)
         except icexceptions.MethodAccessDeniedException:
             wx.MessageBox(
                 u'У пользователя [%s] нет прав на редактирвоние справочников.'
                 % ic.getCurUserName())
Example #13
0
def SaveResourceText(FileName_, Resource_):
    """
    Сохранить ресурс в файле в текстовом формате.
    @param FileName_: Полное имя ресурсного файла.
    @Resource_: Словарно-списковая структура спецификации.
    @return: Возвращает результат выполнения операции True/False.
    """
    f = None
    try:
        # Если необходимые папки не созданы, то создать их
        dir_name = os.path.dirname(FileName_)
        try:
            os.makedirs(dir_name)
        except:
            pass

        f = open(FileName_, 'w')
        text = ic_util.StructToTxt(Resource_)
        f.write(text)
        f.close()
        log.info(u'Файл <%s> сохранен в текстовом формате.' % FileName_)
        return True
    except:
        if f:
            f.close()
        log.fatal(u'Ошибка сохраненения файла <%s> в текстовом формате.' %
                  FileName_)
        return False
Example #14
0
def lockRes(ResName_, ResFileName_, ResFileExt_, LockDir_=None):
    """
    Заблокировать ресурс.
        Имя файла блокировки гонерируется 
        как ИмяРесурса_ИмяФайлаРесурса_РасширениеФайлаРесурса.lck.
        В файл блокировки записывается информация о владельце блокировки 
        в виде словаря {'computer':Имя хоста с которого заблокировался ресурс}.
    @param ResName_: Имя ресурса. 
        Если имя ресурса None, то блокируется файл ресурса целиком.
    @param ResFileName_: Имя файла ресурса.
    @param ResFileExt_: Расширение файла ресурса/тип ресурса.    
    @param LockDir_: Папка блокировок.
    """
    if LockDir_ is None:
        LockDir_ = lock.getLockDir()
        try:
            os.makedirs(LockDir_)
        except:
            pass
    if ResName_ is None:
        ResName_ = ResFileName_
        
    lock_file = LockDir_+'/%s_%s_%s%s' % (ResName_.strip(),
                                          ResFileName_.strip(),
                                          ResFileExt_.strip(), lock.LOCK_FILE_EXT)
    comp_name = lock.ComputerName()
    user_name = ic_user.icGet('UserName')
    log.info(u'Lock resource <%s>' % lock_file)
    return lock.LockFile(lock_file, u'{\'computer\':\'%s\',\'user\':\'%s\'}' % (comp_name,
                                                                                user_name))
Example #15
0
def CreateInitFile(Path_):
    """
    Создает файл __init__.py в директории Path_ если его там нет.
    @return: Возвращает True, если файл был создан или уже есть.
    """
    if not Path_:
        return False

    try:
        os.makedirs(Path_)
    except:
        pass

    init_file = Path_+'/__init__.py'
    if os.path.isfile(init_file):
        return True

    try:
        f = None
        f = open(init_file, 'w')
        f.write(_InitFileDefault)
        f.close()
        log.info(u'File <%s> is created.' % init_file)
        return True
    except:
        log.fatal(u'Create module error: %s/__init__.py' % Path_)
        if f:
            f.close()
        return False
Example #16
0
def SaveResourceText(FileName_, Resource_, ToStruct_=False):
    """
    Сохранить ресурс в файле в текстовом формате.
    @param FileName_: Полное имя ресурсного файла.
    @param Resource_: Словарно-списковая структура спецификации.
    @param ToStruct_: Сохранить в структурном виде ресурс?
    @return: Возвращает результат выполнения операции True/False.
    """
    FileName_ = ic_file.AbsolutePath(FileName_)
    f = None
    try:
        # Если необходимые папки не созданы, то создать их
        dir_name = os.path.dirname(FileName_)
        try:
            os.makedirs(dir_name)
        except:
            pass

        f = open(FileName_, 'w')
        if ToStruct_:
            text = ic_util.StructToTxt(Resource_)
        else:
            text = str(Resource_)
        f.write(text)
        f.close()
        log.info(u'Resource file <%s> is saved in text format.' % FileName_)
        return True
    except:
        log.fatal(u'Faild save file in text format: %s.' % FileName_)
        if f:
            f.close()
        return False
Example #17
0
def SaveResourcePickle(FileName_, Resource_):
    """
    Сохранить ресурс в файле в формате Pickle.
    @param FileName_: Полное имя ресурсного файла.
    @param Resource_: Словарно-списковая структура спецификации.
    @return: Возвращает результат выполнения операции True/False.
    """
    FileName_ = ic_file.AbsolutePath(FileName_)
    f = None
    try:
        # Если необходимые папки не созданы, то создать их
        dir_name = os.path.dirname(FileName_)
        try:
            os.makedirs(dir_name)
        except:
            pass

        f = open(FileName_, 'w')
        cPickle.dump(Resource_, f)
        f.close()
        log.info(u'File <%s> is saved in pickle format.' % FileName_)
        return True
    except:
        log.fatal(u'Faild save file in pickle format: <%s>.' % FileName_)
        if f:
            f.close()
        return False
Example #18
0
def CreatePyFile(PyFileName_, PyFileBody_=None):
    """
    Создать файл питоновского модуля.
    @param PyFileName_: Имя файла *.py.
    @param PyFileBody_: Тело файла. 
        Если None, то заполняется по умолчанию.
    @return: Возвращает True, если файл был создан или уже есть.
    """
    if os.path.isfile(PyFileName_):
        return True
    try:
        f = None
        try:
            os.makedirs(os.path.dirname(PyFileName_))
        except:
            pass
        f = open(PyFileName_, 'w')
        if PyFileBody_ is None:
            f.write(_PyFileDefault)
        else:
            f.write(str(PyFileBody_))
        f.close()
        log.info(u'Module <%s> is created.' % PyFileName_)
        return True
    except:
        log.fatal(u'Create module error: %s' % PyFileName_)
        if f:
            f.close()
        return False
Example #19
0
 def do_scan_export(self, scan_filename):
     """
     Запуск сканирования документа с
     сохранением в определенном файле.
     @param scan_filename: Имя файла скана документа.
     @return: True/False.
     """
     if os.path.exists(self._scanner_exec_filename):
         scan_dir = os.path.dirname(scan_filename)
         file_name = os.path.splitext(os.path.basename(scan_filename))[0]
         file_type = os.path.splitext(
             os.path.basename(scan_filename))[1].replace('.', '').upper()
         cmd = 'python2 %s --scan_dir=%s --file_name=%s --file_type=%s' % (
             self._scanner_exec_filename, scan_dir, file_name, file_type)
         try:
             log.info(u'Запуск внешней программы <%s>' % cmd)
             os.system(cmd)
             return True
         except:
             log.fatal(
                 u'Запуск программы <icScanner> в режиме экспорта: <%s>' %
                 cmd)
     else:
         log.warning(
             u'Запускаемый модуль программы <icScanner> : <%s> не найден' %
             self._scanner_exec_filename)
     return False
Example #20
0
 def _new_prj_init_file(self, PrjPath_):
     """
     Создать новый __init__.py файл проекта.
     """
     log.info(_('__init__.py is created in folder %s') % PrjPath_)
     return ic_file.icCopyFile(
         os.path.dirname(__file__) + '/prj__init__prototype.py',
         PrjPath_ + '/__init__.py', False)
Example #21
0
def icCloseLocalStorage():
    """
    Закрывает и сохраняет локальное хранилище.
    """
    global isUserObjectStorage
    if isUserObjectStorage:
        isUserObjectStorage.save()
        isUserObjectStorage.Close()
        log.info('*** save and close local storage ***')
Example #22
0
def createEditorKernel():
    """
    Создание и регистрация ядра в режиме радактирования.
    """
    from ic.engine import glob
    # Определить ядро
    kernel = glob.set_glob_var('KERNEL', icKernel())
    log.info(u'[KERNEL] CREATE EDITOR KERNEL <%s>' % kernel.context.__class__)
    return kernel
Example #23
0
 def delMyLocks(self):
     """
     Удалить все блокировки.
     """
     # Удалить за собой все блокировки
     self.unlockResInResEditor()
     log.info(u'DELETE ALL PROJECT LOCKS <%s>' % self.lock_dir)
     if self.lock_dir:
         ic_res.delAllLockRes(self.lock_dir)
Example #24
0
    def Create(self, passport, parent=None, context=None, *arg, **kwarg):
        """
        Функция создания объекта системы. Объекты системы делятся на два типа:
        1) объекты, создаваемые по ресурсному описанию.
        2) объекты, создаваемые на основе Python класса.
        Если расширение файла ресурса 'py', то объект относится ко второму типу;
        все файлы с другими расширениями описывают объекты первого типа.
        @type passport: C{icObjectPassport}
        @param passport: идентификатор описания (паспорт) объекта.
        @type parent: C{wx.Window}
        @param parent: Родительское окно.
            Расширение задает тип ресурса.
        @rtype: C{icObject}
        @return: Возвращает созданный объект.
        """
        objType = passport.getDescrType()
        className = passport.getDescrName()
        resName, extName = passport.getDescrMod().split('.')
        subsys = passport.getDescrSubsys()

        #   Картинки создаются отдельно
        if extName == 'py' and objType in ('wx.StaticBitmap',
                                           'wxStaticBitmap'):
            path = resource.icGetSysPath()
            path = '%s/%s/%s' % (path, subsys, passport.getDescrMod())
            # Импортируем модуль
            mod = self.load_source(resName, path)
            # Создаем объект
            if hasattr(mod, className):
                log.info(
                    u'Изображение <%s> загружено из библиотеке образов <%s>' %
                    (className, passport.getDescrMod()))
                return getattr(mod, className)
            else:
                log.warning(
                    u'Изображение <%s> в библиотеке образов <%s> не найдено' %
                    (className, passport.getDescrMod()))
        elif extName == 'py':
            return self.createObjByClass(resName,
                                         className,
                                         extName,
                                         parent,
                                         subsys,
                                         context=context,
                                         **kwarg)
        # Ставим жесткое условие - объект по куску ресурса можно получить только у метаданных
        elif objType and className and extName == 'mtd':
            return self.createResObjByPsp(passport, context, parent)
        else:
            return self.createObjByRes(resName,
                                       className,
                                       extName,
                                       parent,
                                       subsys,
                                       context=context,
                                       **kwarg)
Example #25
0
def createRuntimeKernel():
    """
    Создание и регистрация ядра в режиме исполнения.
    """
    from ic.engine import icApp
    from ic.engine import glob
    # Определить ядро
    kernel = glob.set_glob_var('KERNEL', icApp.icApp())
    log.info(u'[KERNEL] CREATE RUNTIME KERNEL !')
    return kernel
Example #26
0
def outDevice(msg, Device_=IC_CONSOLE):
    """
    Вывод на устройство регистрации специальных сообщений.
    @type msg: C{string}
    @param msg: Сообщение об ошибке.
    @type Device_: C{int}
    @param Device_: Указание устройства вывода.
    """
    if Device_ & IC_CONSOLE:
        try:
            print(msg)
        except:
            return False

    if Device_ & IC_CONSOLE_INFO:
        try:
            log.info(msg)
        except:
            return False

    if Device_ & IC_CONSOLE_ERR:
        try:
            log.error(msg)
        except:
            return False

    if Device_ & IC_CONSOLE_WARN:
        try:
            log.warning(msg)
        except:
            return False

    if Device_ & IC_CONSOLE_DBG:
        try:
            log.debug(msg)
        except:
            return False

    if Device_ & IC_FILE:
        try:
            log_file = None
            log_file = open(IC_LOG_FILE_DEFAULT, 'w+')
            log_file.write(msg)
            log_file.close()
        except:
            if log_file:
                log_file.close()
            return False
    if Device_ & IC_MSG_INFO:
        import ic.dlg
        ic.dlg.ic_dlg.icMsgBox(u'ВНИМАНИЕ', msg)
    if Device_ & IC_MSG_ERR:
        import ic.dlg
        ic.dlg.ic_dlg.icErrBox(u'ОШИБКА', msg)
    return True
Example #27
0
    def exit(self):
        """
        Выход из проекта. Вызывается при закрытии IDE.
        """
        # Удалить все блокировки при выходе из редактора
        log.info('PROJECT EXIT')
        ic_util.print_defis_logo()

        kernel = ic_user.getKernel()
        if kernel:
            kernel.stop()
        self.logout()
        self.delMyLocks()
Example #28
0
def showPrintDialog(args):
    app = wx.PySimpleApp()

    dlg = icPrintDlg(None)
    dlg.setPrintOptions(args)
    result = dlg.ShowModal()
    log.info('Result: %s OK: %s' % (result, wx.OK))
    # app.MainLoop()

    dlg.Destroy()
    dlg = None

    return result == wx.OK
Example #29
0
 def OnImgGridCellChange(self, event):
     """
     Изменение значения ячейки.
     """
     row = event.GetRow()
     col = event.GetCol()
     if col == 1:
         img_grid = self.GetNameObj('ImgLibGrid')
         new_img_name = img_grid.GetCellValue(row, 1)
         log.info(u'IMAGE RENAME <%s> -> <%s>' %
                  (self._edit_img_name, new_img_name))
         self.renameImg(self._edit_img_name, new_img_name)
     event.Skip()
Example #30
0
 def TestComponentResource(res, context, parent, *arg, **kwarg):
     import ic.components.icResourceParser as prs
     log.info(u'Тестирование диалогового окна <%s>' % res['name'])
     testObj = prs.CreateForm('Test', formRes=res,
                              evalSpace=context, parent=parent, bIndicator=False)
     #   Для оконных компонентов надо вызвать метод Show
     try:
         if testObj.context['_root_obj']:
             testObj.context['_root_obj'].SetFocus()
             testObj.context['_root_obj'].ShowModal()
             testObj.context['_root_obj'].Destroy()
     except:
         log.fatal(u'Ошибка тестирования диалогового окна')