示例#1
0
    def addImg(self, sImgFileName=None):
        """
        Добавить новый образ в библиотеку.
        """
        if self._img_lib_res.isEmpty():
            ic_dlg.icMsgBox(u'ОШИБКА', u'Не определена библиотека образов!',
                            self.getObject())
            return None

        dlg = self.GetNameObj('ImgLibDlg')
        if sImgFileName is None:
            sImgFileName = ic_dlg.icImageDlg(dlg, self._img_dir)
            # Сохранить выбранную папку как папку картинок
            self.setImgDir(ic_file.DirName(sImgFileName))
            self.saveImgDir()

        if sImgFileName:
            # Серилизовать и добавить образ
            self._img_lib_res.addImg(sImgFileName)
            self._img_lib_res.saveImgLib()

            # Добавить в словарь образов
            img_name = ic_file.SplitExt(ic_file.BaseName(sImgFileName))[0]
            # Заменить все минусы на подчеркивание
            # иначе в генерирумом фалйе будут имена объектов с минусами (SyntaxisError)
            img_name = img_name.replace('-', '_')
            img = ic_bmp.createBitmap(sImgFileName)
            self._img_dict[img_name] = img
            return img_name
        return None
示例#2
0
    def paste(self, Node_):
        """
        Вставить.
        @param Node_: Вставляемый узел.
        """
        # Можно вставлять толко модули или другие пакеты
        if issubclass(Node_.__class__, PrjModule) or \
           issubclass(Node_.__class__, PrjPackage):
            prj_node.PrjNode.paste(self, Node_)

            mod_name = Node_.getModuleName()
            mod_path = Node_.getPath()
            # Есть уже модуль с таким именем?
            if self.getRoot().prj_res_manager.isModByName(mod_name):
                ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                                u'Модуль <%s> уже существует!' % mod_name)
                return False
            # Добавить модуль в ресурс проекта
            Node_.getRoot().prj_res_manager.addModule(mod_name, mod_path)
            module_file_name = os.path.join(mod_path, mod_name + self.ext)
            copy_module_file_name = Node_.getCopyModuleName()
            ok = False
            if os.path.exists(copy_module_file_name):
                ok = ic_file.icCopyFile(copy_module_file_name,
                                        module_file_name)
                ic_file.Remove(copy_module_file_name)
            # Для синхронизации дерева проекта
            Node_.getRoot().save()
            return ok
        return False
示例#3
0
def runPublicWizard(Parent_, PrjResFileName_):
    """
    Запуск визарда создания пакета публикации.
    @param Parent_: Родительское окно.
    @param PrjResFileName_: Имя ресурса проекта.
    """
    public_maker = zipPublicSystem(ic_file.DirName(PrjResFileName_))
    
    wiz = wizard.Wizard(Parent_, -1,
                        u'Создание пакета публикации',
                        imglib.imgInstallWizard)
    page = PublicPage(wiz, u'Атрибуты пакета публикации', public_maker)
    
    wiz.FitToPage(page)
    
    if wiz.RunWizard(page):
        # Сохранить атрибуты проекта
        public_maker.setPrjName(page.sizer.evalSpace['_dict_obj']['TextPrjName'].GetValue())
        public_maker.setAutoVer(page.sizer.evalSpace['_dict_obj']['AutoVerCheckBox'].GetValue())
        public_maker.setPrjVersion(page.sizer.evalSpace['_dict_obj']['TextVersion'].GetValue())
        public_maker.setArchivator(page.sizer.evalSpace['_dict_obj']['TextArchiveSys'].GetValue())

        public_maker.makeInstallPackage()

        ic_dlg.icMsgBox(u'ВНИМАНИЕ', u'Создан пакет публикации.')
    else:
        ic_dlg.icMsgBox(u'ВЫХОД', u'Выход из визарда создания пакета публикации')
示例#4
0
 def create(self):
     """
     Функция создания ресурса.
     """
     tree_prj = self.getRoot().getParent()
     res_editor = tree_prj.res_editor
     if res_editor:
         res_name = self.getResName()
         res_path = self.getResPath()
         ic_file.MakeDirs(res_path)
         res_file = self.getResFileName()
         res_ext = self.getResFileExt()
         # Если ресурс/папка с таким именем уже есть в проекте, то
         # не создавать ресурс, а вывести сообщение.
         if self.getRoot().prj_res_manager.isResByNameANDType(
                 res_name, res_ext):
             ic_dlg.icMsgBox(
                 u'ВНИМАНИЕ!',
                 u'Ресурс/папка <%s> существует в проекте!' % res_name)
             return None
         # Добавить ресурс в ресурс проекта
         self.getRoot().prj_res_manager.addRes(res_name, res_ext,
                                               self._Parent.name)
         self.getRoot().save()
         return res_editor.CreateResource(res_name,
                                          res_path,
                                          res_file,
                                          res_ext,
                                          copy.deepcopy(self.template),
                                          bRecreate=True)
     return False
示例#5
0
    def Edit(self, parent=None, bRefreshPrj=True, path=None):
        """
        Открыть окно редактирования пользователей.
        """
        # Если ресурс уже не заблокирован
        rl = ic.resource_loader
        path = path or ic_user.icGet('PRJ_DIR')+'/users.acc'
        if not rl.is_lock_res(path):
            # Заблокировать ресурс
            # bAdd=False - признак того, что запись о блокировки при отсутствии объекта
            # добавлять не надо
            rl.lock_res(path)
            # Прочитать ресурс
            users_res = rl.load_res(path, bRefresh=True)

            result = self._edit(parent or ic_user.getMainWin(), users_res)
            if result is not None:
                # Если нажата <ОК>, то сохранить файл ресурсов
                rl.save_res(path, result)
                rl.save_file_res(path, result)
            # Снять блокировку
            rl.unlock_res(path)

            # Сохранить проект, для того чтобы дерево проекта обновилось
            # в режиме редактирования/конфигурирования
            if bRefreshPrj:
                self.refreshPrj()
        else:
            # Если ресурс заблокировн, то сообщить кем
            lock_rec = rl.get_lock_rec(path)
            ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                            u'Пользователи в настоящее время редактируются пользователем %s на компьютере %s' % (lock_rec['user'], lock_rec['computer']))
示例#6
0
def runDemoWizard(Parent_, PrjResFileName_):
    """
    Запуск визарда создания инсталяционного пакета.
    @param Parent_: Родительское окно.
    @param PrjResFileName_: Имя ресурса проекта.
    """
    install_maker = py2exeInstallSystem(os.path.dirname(PrjResFileName_))
    
    wiz = wizard.Wizard(Parent_, -1,
                        u'Создание демо-проекта',
                        imglib.imgInstallWizard)
    page = DemoPage(wiz, u'Атрибуты демо-проекта', install_maker)

    wiz.FitToPage(page)
    
    if wiz.RunWizard(page):
        # Сохранить атрибуты проекта
        install_maker.setPrjName(page.sizer.evalSpace['_dict_obj']['TextPrjName'].GetValue())
        install_maker.setPrjTitle(page.sizer.evalSpace['_dict_obj']['TextDiscr'].GetValue())
        install_maker.setPrjAuthor(page.sizer.evalSpace['_dict_obj']['TextAuthor'].GetValue())
        install_maker.setPrjCopyright(page.sizer.evalSpace['_dict_obj']['TextCopyright'].GetValue())
        install_maker.setPrjIcon(page.sizer.evalSpace['_dict_obj']['TextIcon'].GetValue())
        install_maker.setConsole(page.sizer.evalSpace['_dict_obj']['ConsoleCheckBox'].GetValue())

        install_maker.makeInstallPackage()

        ic_dlg.icMsgBox(u'ВНИМАНИЕ', u'Создан демо-проект.')
    else:
        ic_dlg.icMsgBox(u'ВЫХОД', u'Выход из визарда создания демо-проекта')
示例#7
0
文件: icApp.py 项目: XHermitOne/defis
 def _login_loop(self, User_=None, Password_=None, DBMode_='-s'):
     """
     Цикл входа в систему.
     @param User_: Имя пользователя.
     @param Password_: Пароль.
     @param DBMode_: Режим использования БД.
     """
     login_ok = False
     login_manager = icUser.icLoginManager()
     User_, Password_ = login_manager._getAutoLogin(User_, Password_)
     bAuto = login_manager.IsAutoAuth()
     while not login_ok:
         user_data = login_manager.Login(User_, Password_, DBMode_)
         if user_data is None:
             break
         user_name = user_data[ic_dlg.LOGIN_USER_IDX]
         user_password = user_data[ic_dlg.LOGIN_PASSWORD_IDX]
         user_password_md5 = user_data[ic_dlg.LOGIN_PASSWORD_MD5_IDX]
         res = login_manager.GetUserResource(user_name)
         # Если пользователя с таким именем нет, просим пользователя еще раз ввести
         # логин и пароль
         if res is None:
             User_, Password_ = None, None
             ic_dlg.icMsgBox(u'Вход в систему', u'Неправильный пользователь или пароль. Доступ запрещен.')
         else:
             self._User = self.createObjBySpc(None, res)
             self._User.setLoginManager(login_manager)
             try:
                 login_ok = self._User.Login(user_name, user_password, DBMode_, bAutoLogin=bAuto)
             except icexceptions.LoginInvalidException:
                 bAuto = False
                 User_, Password_ = None, None
         
     return login_ok
示例#8
0
 def CanAuthent(self, Permit_, ResName_, ResType_=ACC_NONE, ShowMsg_=True):
     """
     Функция определяет ограничения на запрашиваемый ресурс.
     @param Permit_: символ или группа символов,
         определяющий право доступа на действие.
         'u' - использование (ACCESS_USE).
         'v' - отображение  (ACCESS_VIEW).
         'r' - чтение (ACCESS_READ).
         'w' - редактирование (ACCESS_EDIT).
         'a' - добавление (ACCESS_APPEND).
         'd' - удаление (ACCESS_DELETE).
     @param ResName_: имя ресурса.
     @param ResType_: тип ресурса, необязательный параметр.
         Если он не определен, ресурс ищется среди всех типов ресурсов.
     @param ShowMsg_: флаг, описывающий разрешение на отображения
         сообщения о заблокированном ресурсе для данного пользователя.
         Параметр необязателен. По умолчанию сообщение показывается.
     @return: Возвращает True, если ресурс не ограничен,
         запрашиваемыми правами доступа, False - ресурс ограничен.
     """
     try:
         can = True
         # Если определен тип ресурса, ...
         # Вывести сообщение
         if (not can) and ShowMsg_:
             ic_dlg.icMsgBox(
                 u'Ошибка!',
                 u'Доступ к ресурсу <%s> заблокирован.' % ResName_)
         return can
     except:
         log.fatal(u'Ошибка проверки прав доступа для ресурса')
示例#9
0
 def buildSubSystemsTree(self, SubSystems_):
     """
     Построить дерево подсистемы в дереве проекта.
     @param SubSystems_: Список указаний подсистем (<*.pro>[1:]).
     """
     for sub_sys in SubSystems_:
         # Создать и инициализировать узел импортируемой системы
         imp_sys_node = PrjImportSys(self)
         imp_sys_node.Default()
         imp_sys_node.name = sub_sys['name']
         # Путь к подсистеме
         sub_sys_dir = imp_sys_node.getPathInPrj()
         if os.path.exists(sub_sys_dir):
             try:
                 self.addChild(imp_sys_node)
                 # Построить дерево-содержание импортируемой подсистемы
                 imp_sys_node._is_build = False
             except:
                 io_prnt.outErr(u'Ошибка подключения подсистемы <%s>' %
                                sub_sys_dir)
                 ic_dlg.icMsgBox(
                     u'ОШИБКА',
                     u'Ошибка подключения подсистемы <%s>' % sub_sys_dir)
         else:
             ic_dlg.icMsgBox(
                 u'ОШИБКА',
                 u'Не корректный путь к подсистеме <%s>' % sub_sys_dir)
             # Добавить узел не импортированной подсистемы
             not_imp_sys_node = PrjNotImportSys(self)
             not_imp_sys_node.name = sub_sys['name']
             # Путь к подсистеме
             not_sub_sys_dir = not_imp_sys_node.getPathInPrj()
             self.addChild(not_imp_sys_node)
             not_imp_sys_node._is_build = True
示例#10
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('node', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('OPCNode', 'MemoryNode'):
                ic_dlg.icMsgBox(
                    u'ВНИМАНИЕ!',
                    u'Выбранный объект не является узлом/контроллером SCADA.',
                    parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
        elif ret in (None, ''):
            return coderror.IC_CTRL_OK
    elif attr in ('scan_class', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('ScanClass', ):
                ic_dlg.icMsgBox(
                    u'ВНИМАНИЕ!',
                    u'Выбранный объект не является КЛАССОМ СКАНИРОВАНИЯ.',
                    parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
        elif ret in (None, ''):
            return coderror.IC_CTRL_OK
示例#11
0
 def createResClass(self):
     """
     Функция создания ресурсного класса.
     """
     try:
         self.img = imglib.imgEdtModule
         self.typ = 'py'
         res_name = self.getResName()
         mod_path = self.getParent().getPath()
         # Создать инит файл, если его нет
         ic_res.CreateInitFile(mod_path)
         mod_file = self.getResFileName()
         mod_ext = self.getResFileExt()
         # Есть уже модуль с таким именем?
         if self.getRoot().prj_res_manager.isModByName(mod_file):
             ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                             u'Модуль <%s> уже существует!' % mod_file)
             return False
         # Добавить модуль в ресурс проекта
         ok = self.getRoot().getParent().res_editor.CreateResource(
             res_name,
             mod_path,
             mod_file,
             mod_ext,
             copy.deepcopy(self.template),
             bRecreate=True)
         # Для синхронизации дерева проекта
         self.getRoot().synchroPrj(Refresh_=True)
         return ok
     except:
         io_prnt.outErr(u'Create resource class error <%s>' % self.name)
         return None
示例#12
0
 def getEditFormName(self):
     """
     Форма для редактирования данных справочника.
     """
     edit_form=self.getICAttr('edit_form')
     if edit_form is None:
         ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
             u'В справочнике %s не определена форма редактирования.'%(self.name))
     return edit_form
示例#13
0
 def getChoiceFormName(self):
     """
     Форма для выбора данных справочника.
     """
     choice_form=self.getICAttr('choice_form')
     if choice_form is None:
         ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
             u'В справочнике %s не определена форма выбора.'%(self.name))
     return choice_form
示例#14
0
def onCodControl(evalSpace):
    """
    Контроль кода.
    """
    try:
        print('onCodControl START!!!!!!!!!!!!!!!!!!')

        #onCodControl.func_globals['__builtins__']['locals']().update(evalSpace)
        #Вытащить глобальные переменные из пространства имен,
        #иначе они не попадут в локальное пространство имен
        old_value = evalSpace['old_value']
        value = evalSpace['value']
        #sprav=evalSpace['sprav']
        sprav = evalSpace['OBJ']
        #GetInterface=evalSpace['GetInterface']
        #GetObject=evalSpace['GetObject']

        #Проверка уникальности кода
        try:
            new_cod = evalSpace.GetObject('spravTree').getSelectionRecord()[0]
        except:
            new_cod = None

        #Проверка, есть ли подкоды
        if old_value and sprav.isSubCodes(old_value):
            ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                            u'Нельзя изменять значение кода. Есть подкоды.')
            return (3, None)

        try:
            grid = evalSpace.GetInterface('spravGrid').get_grid()
        except:
            grid = evalSpace.GetObject('spravGrid')
        buff_codes = map(lambda rec: rec[0], grid.GetDataset().data)[:-1]

        ctrl_ret = coderror.IC_CTRL_OK
        if value in buff_codes:
            ctrl_ret = coderror.IC_CTRL_FAILED_IGNORE

        if not ctrl_ret in [coderror.IC_CTRL_OK, coderror.IC_CTRL_REPL]:
            ic_dlg.icMsgBox(u'ВНИМАНИЕ!', u'Такой код есть уже в справочнике!')
            return (ctrl_ret, None)

        # Проверяем по связанному справочнику, если он есть
        if new_cod == None:
            new_cod = ''

        #print '*********** NEW_COD=', new_cod
        ref_sprav = sprav.getLevelRefSpravByCod(new_cod)
        if ref_sprav:
            return ref_sprav.Ctrl(value, field='cod')
        return (ctrl_ret, None)
    except:
        ic_log.icLogErr(u'Ошибка контроля кода справочника.')
        return (coderror.IC_CTRL_FAILED_IGNORE, None)
示例#15
0
def onCodControl(evalSpace):
    """ 
    Контроль кода.
    """
    try:
        #Вытащить глобальные переменные из пространства имен,
        #иначе они не попадут в локальное пространство имен
        sprav = evalSpace[CONTEXT_SPRAV_NAME]
        value = evalSpace['value']
        tree_grid = evalSpace.GetObject(SPR_TREE_NAME)
        #Проверка уникальности кода
        new_cod = tree_grid.get_sel_cod()
        grid = evalSpace.GetObject(SPR_GRID_NAME)
        dataset = grid.GetDataset()
        prev_change_code = dataset.getNameValue('cod')
        #Проверка, есть ли подкоды
        print('***** ver prev_change_code:', value, prev_change_code,
              dataset.cursor)
        if prev_change_code and sprav.isSubCodes(prev_change_code):
            ic_dlg.icMsgBox(
                u'ВНИМАНИЕ!',
                u'Нельзя изменять значение кода %s. Есть подкоды.' %
                prev_change_code, evalSpace.GetObject(SPR_TREE_NAME))
            return (coderror.IC_CTRL_FAILED_IGNORE, None)

        buff_codes = [rec['cod'] for rec in dataset.getDataDict()]
        ctrl_ret = coderror.IC_CTRL_OK
        if value in buff_codes:
            ctrl_ret = coderror.IC_CTRL_FAILED_IGNORE

        if not ctrl_ret in [coderror.IC_CTRL_OK, coderror.IC_CTRL_REPL]:
            ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                            u'Код %s есть уже в справочнике!' % value)
            return (ctrl_ret, None)

        # Проверяем по связанному справочнику, если он есть
        if new_cod is None:
            new_cod = ''

        ref_sprav = sprav.getLevelRefSpravByCod(new_cod)
        if ref_sprav:
            #            val = value[len(new_cod):]
            #            crtl_ret = ref_sprav.Ctrl(val, field='cod')
            #            print '****** CTRL VAL$$:', value, new_cod, val, ctrl_ret
            val = value[len(new_cod):]
            ref_cod = ''.join(sprav._get_refspr_parent_cod(new_cod))
            crtl_ret = ref_sprav.Ctrl(ref_cod + val, field='cod', cod=ref_cod)

            return crtl_ret

        return (ctrl_ret, None)
    except:
        io_prnt.outErr(u'Ошибка контроля кода справочника.')
        return (coderror.IC_CTRL_FAILED_IGNORE, None)
示例#16
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('db', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            # parent = propEdt.GetPropertyGrid().GetView()
            parent = propEdt
            if not ret[0][0] in ('PostgreSQLDB', 'SQLiteDB'):
                ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                                u'Выбранный объект не является БД.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
        else:
            # Не определена БД
            parent = propEdt
            ic_dlg.icMsgBox(
                u'ВНИМАНИЕ!',
                u'Свойство <%s> обязательно должно быть определено для этого объекта.'
                % attr, parent)

    elif attr in ('init_form', 'edit_form', 'view_form', 'search_form',
                  'choice_form'):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('Dialog', 'Frame', 'Panel', 'ScrolledWindow'):
                ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                                u'Выбранный объект не является формой.',
                                parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
    elif attr in ('prototype', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('BusinessObj', ):
                ic_dlg.icMsgBox(
                    u'ВНИМАНИЕ!',
                    u'Выбранный объект не является БИЗНЕС-ОБЪЕКТОМ.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
    elif attr in ('history', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('ObjHistory', ):
                ic_dlg.icMsgBox(
                    u'ВНИМАНИЕ!',
                    u'Выбранный объект не является ИСТОРИЕЙ БИЗНЕС-ОБЪЕКТА.',
                    parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
示例#17
0
    def createStorage(self, ShowMsg_=True):
        """
        Создать хранилище справочников.
        @param ShowMsg_: Признак отображения предупреждения о неправильно определенном хранилище.
        """
        db_name = self.getDBName()
        self._storage = None

        if db_name:
            path_res = None
            db_subsys = self.getDBResSubSysName()
            if db_subsys:
                path_res = resource.getSubsysPath(db_subsys)

            db_res = resource.icGetRes(db_name,
                                       ext='src',
                                       pathRes=path_res,
                                       nameRes=db_name)
            if db_res:
                try:
                    if db_res['type'] != storesrc.OBJ_STORAGE_SRC_TYPE:
                        # SQL-ная БД
                        self._storage = icspravstorage.icSpravSQLStorage(
                            self,
                            db_name,
                            self.getTableName(),
                            DBSubSys_=db_subsys,
                            TabSubSys_=self.getTabResSubSysName())
                    elif db_res['type'] == storesrc.OBJ_STORAGE_SRC_TYPE:
                        # Объектная БД
                        from . import icodb_spravstorage
                        self._storage = icodb_spravstorage.icSpravODBStorage(
                            self, db_name, self.getTableName())
                    else:
                        io_prnt.outWarning(
                            u'ОШИБКА! Не определенный тип БД %s СПРАВОЧНИКА %s'
                            % (db_res['type'], self.getName()))
                except:
                    io_prnt.outErr(
                        u'Ошибка создания хранилища справочников %s %s' %
                        (db_name, self.getTableName()))
        else:
            # База данных не указана, поэтому считаем что по умолчанию
            # это SQL БД и таблица сама определяет в какой БД ей храниться
            # SQL-ная БД
            self._storage = icspravstorage.icSpravSQLStorage(
                self, None, self.getTableName())

        if ShowMsg_ and not self._storage:
            ic_dlg.icMsgBox(
                u'ВНИМАНИЕ!',
                u'Не определено хранилище справочника: %s БД: %s Таблица: %s' %
                (self.getName(), db_name, self.getTableName()))
        return self._storage
示例#18
0
    def _login_loop(self, User_=None, Password_=None, DBMode_='-s'):
        """
        Цикл входа в систему.
        @param User_: Имя пользователя.
        @param Password_: Пароль.
        @param DBMode_: Режим использования БД.
        """
        from ic.dlg import ic_dlg
        from ic.engine import icUser

        login_ok = False
        login_manager = icUser.icLoginManager()
        User_, Password_ = login_manager._getAutoLogin(User_, Password_)
        bAuto = login_manager.IsAutoAuth()
        while not login_ok:
            user_data = login_manager.Login(User_,
                                            Password_,
                                            DBMode_,
                                            RuntimeMode_=False)
            if user_data is None:
                break
            user_name = user_data[ic_dlg.LOGIN_USER_IDX]
            user_password = user_data[ic_dlg.LOGIN_PASSWORD_IDX]
            user_password_md5 = user_data[ic_dlg.LOGIN_PASSWORD_MD5_IDX]
            res = login_manager.GetUserResource(user_name)

            if res is None:
                User_, Password_ = None, None
                ic_dlg.icMsgBox(
                    u'Вход в систему',
                    u'Неправильный пользователь или пароль. Доступ запрещен.')
            else:
                self._User = self.createObjBySpc(None, res)
                self._User.setLoginManager(login_manager)
                passwd_md5 = self._User._password_md5(user_password)
                try:
                    login_ok = self._User.login_ok(user_name,
                                                   user_password,
                                                   passwd_md5,
                                                   DBMode_,
                                                   RuntimeMode_=False)
                except icexceptions.LoginInvalidException:
                    if bAuto:
                        bAuto = False
                        User_, Password_ = None, None
                        ic_dlg.icMsgBox(
                            u'Вход в систему',
                            u'Неправильный пользователь или пароль. Доступ запрещен.'
                        )
                    else:
                        raise

        return login_ok
示例#19
0
def onCodControl(obj):
    """ Контроль кода."""
    try:
        evalSpace = obj.GetView().context
        sprav = evalSpace[CONTEXT_SPRAV_NAME]
        value = evalSpace['value']
        #Проверка уникальности кода
        try:
            new_cod = evalSpace.GetObject(
                SPR_TREE_NAME).getSelectionRecord()[0]
        except:
            new_cod = None

        grid = evalSpace.GetObject(SPR_GRID_NAME)
        dataset = grid.GetDataset()
        prev_change_code = grid.getNameValue(
            'cod')  #dataset.getNameValue('cod')
        #Проверка, есть ли подкоды
        if prev_change_code and sprav.isSubCodes(prev_change_code):
            ic_dlg.icMsgBox(
                u'ВНИМАНИЕ!',
                u'Нельзя изменять значение кода <%s>. Есть подкоды.' %
                prev_change_code, evalSpace.GetObject(SPR_TREE_NAME))
            return (coderror.IC_CTRL_FAILED_IGNORE, None)

        buff_codes = [rec['cod'] for rec in dataset.getDataDict()]
        ctrl_ret = coderror.IC_CTRL_OK
        if value in buff_codes:
            ctrl_ret = coderror.IC_CTRL_FAILED_IGNORE

        if not ctrl_ret in [coderror.IC_CTRL_OK, coderror.IC_CTRL_REPL]:
            ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                            u'Код %s есть уже в справочнике!' % value)
            return (ctrl_ret, None)

        # Проверяем по связанному справочнику, если он есть
        if new_cod is None:
            new_cod = ''

        ref_sprav = sprav.getLevelRefSpravByCod(new_cod)
        if ref_sprav:
            val = value[len(new_cod):]
            ref_cod = ''.join(_get_refspr_parent_cod(sprav, new_cod))
            crtl_ret = ref_sprav.Ctrl(ref_cod + val, field='cod', cod=ref_cod)
            #            print '****** CTRL VAL$$1:', val, ref_cod, ctrl_ret
            #            print '****** CTRL VAL$$2:', ctrl_ret, type(ctrl_ret)
            return crtl_ret
        return (ctrl_ret, None)
    except:
        #ic_log.icLogErr(u'Ошибка контроля кода справочника.')
        return io_prnt.outErr('Code control Error!')
        return (coderror.IC_CTRL_FAILED_IGNORE, None)
示例#20
0
    def edit(self):
        """
        Редактирование модуля.
        """
        # Определяем имя модуля
        py_name = self.getModuleName()
        py_dir = self.getModulePath()
        py_file = os.path.join(py_dir, py_name + self.ext)

        # Определяем IDE
        ide = self.getRoot().getParent().ide
        if ide is None:
            io_prnt.outWarning(
                u'Не определен IDE для редактрования модуля <%s>' % py_file)
            io_prnt.outLog(u'Используется внешний редактор модулей Python')
            ide = ext_python_editor.icExtPythonEditor()

        if ide:
            # Сначала разблокировать все модули
            self.getRoot().unlockAllPyFilesInIDE()
            if ide.IsOpenedFile(py_file):
                ide.CloseFile(py_file)
            else:
                parent_pack = os.path.basename(py_dir)
                # Если модуль заблокирован,
                # тогда открыть его только для просмотра
                if ic_res.isLockRes(self.name, parent_pack, 'py',
                                    self.getRoot().lock_dir):
                    lock_rec = ic_res.getLockResRecord(self.name, parent_pack,
                                                       'py',
                                                       self.getRoot().lock_dir)
                    ic_dlg.icMsgBox(
                        u'ВНИМАНИЕ!',
                        u'Ресурс <%s> заблокирован пользователем <%s>. Компьютер: <%s>.'
                        % (self.name, lock_rec['user'], lock_rec['computer']))
                    self.readonly = True
                else:
                    # Заблокировать файл
                    ic_res.lockRes(self.name, parent_pack, 'py',
                                   self.getRoot().lock_dir)

            # Условие открытия в редакторе ресурса
            if self.isResClass(py_file):
                self.getRoot().getParent().res_editor.SetResource(self.name,
                                                                  py_dir,
                                                                  self.name,
                                                                  'py',
                                                                  bEnable=True)

            return ide.OpenFile(py_file, True, readonly=self.readonly)

        return False
示例#21
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('db', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('PostgreSQLDB', 'SQLiteDB'):
                ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                                u'Выбранный объект не является БД.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
示例#22
0
 def extend(self):
     """
     Дополнительные инструменты узла.
     """
     # Данном случае проверка связи с БД
     yes = ic_dlg.icAskBox(u'Поверить связь с БД?')
     if yes:
         from ic.db import icsqlalchemy
         res = self.getMyRes()
         db_url = icsqlalchemy.createDBUrl(res)
         check_connect = icsqlalchemy.checkDBConnect(db_url)
         msg = u'Связь с БД <%s> успешно установлена' % db_url if check_connect else u'Нет связи с БД <%s>' % db_url
         ic_dlg.icMsgBox(u'Проверка связи с БД', msg)
示例#23
0
 def rename(self, OldName_, NewName_):
     """
     Переименование ресурса.
     @param OldName_: Старое имя ресурса.
     @param NewName_: Новое имя ресурса.
     """
     new_name = NewName_.lower()
     old_name = OldName_.lower()
     if new_name != NewName_ or OldName_ != old_name:
         ic_dlg.icMsgBox(
             u'ВНИМАНИЕ!',
             u'All table, field and link name must be in lower case')
     return PrjResource.rename(self, old_name, new_name)
示例#24
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('table', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt.GetPropertyGrid().GetView()
            if not ret[0][0] in ('Table', ):
                ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                                u'Выбранный объект не является ТАБЛИЦЕЙ.',
                                parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
示例#25
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('sprav',):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('Sprav',):
                ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                                u'Выбранный объект не является Справочником.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
        elif ret in (None, ''):
            return coderror.IC_CTRL_OK
示例#26
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('content', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt.GetPropertyGrid().GetView()
            if not ret[0][0] in ('Panel', 'ScrolledWindow', 'Notebook',
                                 'SplitterWindow'):
                ic_dlg.icMsgBox(
                    u'ОШИБКА РЕДАКТИРОВАНИЯ',
                    u'Выбранный объект не является главным окном.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
示例#27
0
 def edit(self):
     """
     Запуск ресурса на редактирование.
     """
     tree_prj = self.getRoot().getParent()
     res_editor = tree_prj.res_editor
     if res_editor:
         res_name = self.getResName()
         res_path = self.getResPath()
         ic_file.MakeDirs(res_path)
         res_file = self.getResFileName()
         res_ext = self.getResFileExt()
         self.getRoot().unlockResInResEditor(res_editor)
         if not self.readonly:
             is_lock = ic_res.isLockRes(res_name, res_file, res_ext,
                                        self.getRoot().lock_dir)
             if not is_lock:
                 # Если ресурс не заблокирован, то заблокировать его
                 # и отдать на редактирование
                 ic_res.lockRes(res_name, res_file, res_ext,
                                self.getRoot().lock_dir)
                 return res_editor.SetResource(res_name,
                                               res_path,
                                               res_file,
                                               res_ext,
                                               bEnable=True)
             else:
                 lock_rec = ic_res.getLockResRecord(res_name, res_file,
                                                    res_ext,
                                                    self.getRoot().lock_dir)
                 ic_dlg.icMsgBox(
                     u'ВНИМАНИЕ!',
                     u'Resource <%s> is locked by user <%s>. Computer: <%s>.'
                     % (res_name, lock_rec['user'], lock_rec['computer']))
                 # Открыть только для чтения
                 self.readonly = True
                 return res_editor.SetResource(res_name,
                                               res_path,
                                               res_file,
                                               res_ext,
                                               bEnable=False)
         else:
             return res_editor.SetResource(res_name,
                                           res_path,
                                           res_file,
                                           res_ext,
                                           bEnable=False)
     return None
示例#28
0
    def createUser(self, UserName_='new_user'):
        """
        Создание нового пользователя в структуре.
        @param UserName_: Имя пользователя.
        @return: Возвращает результат выполнения операции True/False.
        """
        if self._user_res is None:
            self._user_res = {}

        if UserName_ in self._user_res:
            ic_dlg.icMsgBox(u'ВНИМАНИЕ!',
                            u'Пользователь <%s> уже существует!' % UserName_)
            return False
        else:
            self._user_res[UserName_] = self.newDefaultUser(UserName_)
        return True
示例#29
0
    def CopyDefender(self):
        """
        Функция проверки защиты от копирования.
        """
        # Если проверка защиты отключена, тогда все ок и не проверять
        if not COPY_DEFENDER_ON:
            return True

        hdd_sn = ic_util.GetHDDSerialNo()
        reg_hdd_sn = ic_util.GetRegValue('Software\\DEFIS\\HDD', 'SerialNo')
        if hdd_sn == reg_hdd_sn:
            return True
        ic_dlg.icMsgBox(
            u'Вход в систему',
            u'Не зарегестрированная копия. Вход в систему не возможен.')
        return False
示例#30
0
    def refreshSubSystems(self):
        """
        Обновление подсистем.
        """
        sub_systems = self.getRoot().prj_res_manager.getImportSystems()
        prj_dir = os.path.dirname(
            os.path.dirname(self.getRoot().getPrjFileName()))
        try:
            ic_dlg.icOpenProgressDlg(None, u'Обновление подсистем',
                                     u'Обновление подсистем', 0,
                                     len(sub_systems))
            for i_sub_sys in range(len(sub_systems)):
                sub_sys_dir = os.path.dirname(sub_systems[i_sub_sys]['path'])

                ic_dlg.icUpdateProgressDlg(
                    i_sub_sys,
                    _('Refreshing') + ': ' + sub_sys_dir)
                if (not os.path.isdir(sub_sys_dir)) or (
                        not os.path.exists(sub_sys_dir)):
                    ic_dlg.icMsgBox(
                        u'ОШИБКА',
                        u'Не корректный путь к подсистеме <%s>' % sub_sys_dir)
                    continue
                if (not os.path.isdir(prj_dir)) or (
                        not os.path.exists(prj_dir)):
                    ic_dlg.icMsgBox(
                        u'ОШИБКА',
                        u'Не корректный путь к проекту <%s>' % prj_dir)
                    continue
                self._copySubSysDir(sub_sys_dir, prj_dir)

            # Обновить дерево пользовательских компонентов
            io_prnt.outLog(u'<<<Init Objects Info >>>')
            ic_user.refreshImports()
            tree_prj = self.getParentRoot().getParent()
            tree_prj.res_editor.CloseResource()
            tree_prj.res_editor.InitObjectsInfo(bRefresh=True)

            ic_dlg.icCloseProgressDlg()
        except:
            io_prnt.outErr(u'Ошибка обновления подсистем')
            ic_dlg.icCloseProgressDlg()
            return False

        # Обновить дерево проекта
        self.getRoot().synchroPrj(True)
        return True