Beispiel #1
0
 def setPrjResFileName(self, PrjResFileName_):
     self._PrjResFileName = PrjResFileName_
     if self._PrjResFileName is None:
         self._PrjResDir = ic_user.icGet('PRJ_DIR')
         self._PrjResFileName = self._PrjResDir + '/%s.pro' % self._PrjName
     else:
         self._PrjResDir = ic_file.DirName(self._PrjResFileName)
Beispiel #2
0
    def __init__(self,
                 parent,
                 id=-1,
                 component=None,
                 logType=0,
                 evalSpace=None,
                 bCounter=False,
                 progressDlg=None):
        """
        Конструктор.

        @type parent: C{wx.Window}
        @param parent: Указатель на родителя
        @type id: C{int}
        @param id: Идентификатор
        @type component: C{dictionary}
        @param component: Словарь описания компонента
        @type logType: C{int}
        @param logType: Тип лога (0 - консоль, 1- файл, 2- окно лога)
        @param evalSpace: Пространство имен, необходимых для вычисления внешних выражений
        @type evalSpace: C{dictionary}
        @type bCounter: C{bool}
        @param bCounter: Признак отображения в ProgressBar-е. Иногда это не нужно -
            для создания объектов полученных по ссылки. Т. к. они не учтены при подсчете
            общего количества объектов.
        @type progressDlg: C{wx.ProgressDialog}
        @param progressDlg: Указатель на идикатор создания формы.
        """
        component = util.icSpcDefStruct(self.component_spc, component)
        icwidget.icSimple.__init__(self, parent, id, component, logType,
                                   evalSpace)
        icuser.icUserGroup.__init__(
            self,
            ic_file.PathFile(ic_user.icGet('SYS_RES'),
                             icuser.DEFAULT_USERS_RES_FILE))
Beispiel #3
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))
Beispiel #4
0
 def getReportDir(self):
     """
     Папка отчетов.
     Папка отчетов по умолчанию всегда находиться в папке проекта.
     Например: /defis/NSI/NSI/reports.
     @return: Полный путь до директории отчетов.
     """
     if self._report_dir is None:
         prj_dir = ic_user.icGet('PRJ_DIR')
         self._report_dir = os.path.join(
             prj_dir, config.get_glob_var('DEFAULT_REPORT_DIRNAME'))
         # Проверить сразу существует ли папка
         if not os.path.exists(self._report_dir):
             try:
                 os.makedirs(self._report_dir)
                 io_prnt.outLog(u'Cоздание папки <%s>' % self._report_dir)
                 description_filename = os.path.join(
                     self._report_dir, 'descript.ion')
                 prj_name = os.path.basename(prj_dir)
                 ic_extend.save_file_text(
                     description_filename,
                     u'Отчеты прикладной системы <%s>' % prj_name)
                 init_filename = os.path.join(self._report_dir,
                                              '__init__.py')
                 ic_extend.save_file_text(init_filename,
                                          DEFAULT_INIT_PY_FMT % prj_name)
             except IOError:
                 io_prnt.outWarning(u'Ошибка создания папки <%s>' %
                                    self._report_dir)
     return self._report_dir
Beispiel #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']))
Beispiel #6
0
def icSaveRes(className,
              ext,
              pathRes=None,
              nameRes='resource',
              resData=None,
              ResFmt=PICKLE_RES_FMT):
    """
    Сохранить ресурсное описание объекта.
    @type className: C{string}
    @param className: Имя ресурса.
    @type ext: C{string}
    @param ext: Расширения ресурсного файла для данного ресурса.
    @type pathRes: C{string}
    @param pathRes: Имя ресурсного файла. Если путь не указан, то ресурсный файл
        в папке текущего проекта.
    @type nameRes: C{string}
    @param nameRes: Имя ресурсного файла. Если оно не указано, то используется
        'resource'. В старых версиях все ресурсы одного типа хранились в одном
        файле, поэтому этот параметр не использовался.
    @type ResFmt: C{bool}
    @param ResFmt: Формат ресурса 0 - pickle, 1 - text.
    @rtype: C{dictionary}
    @return: Ресурсное описание объекта. None если ресурс не найден.
    """
    if not pathRes:
        pathRes = ic_user.icGet('PRJ_DIR')
    fileResName = (pathRes + '/' + nameRes + '.' + ext).replace('\\',
                                                                '/').replace(
                                                                    '//', '/')

    if ResFmt == PICKLE_RES_FMT:
        return ic_res.SaveResourcePickle(fileResName, {className: resData})
    elif ResFmt == TEXT_RES_FMT:
        return ic_res.SaveResourceText(fileResName, {className: resData})
Beispiel #7
0
def IsDebugMode():
    """
    Признак режима отладки.
    """
    if ic_user.icIs('DEBUG_MODE'):
        return ic_user.icGet('DEBUG_MODE')
    else:
        return False
Beispiel #8
0
def icGetSubsysResPaths():
    """
    Возвращает список путей до всех подсистем.
    """
    paths = ic_user.icGet('SUBSYS_RES')
    if not paths:
        paths = [icGetResPath()]

    return paths
Beispiel #9
0
    def Login(self, User_=None, Password_=None, DBMode_='-s'):
        """
        Регистрация пользователя в системе.
        @param User_: Имя пользователя.
        @param Password_: Пароль.
        @param DBMode_: Режим использования БД.
        """
        from ic.engine import ic_user

        ok = self._login_loop(User_, Password_, DBMode_)
        if ok:
            # self.run(self._User.getMainWinPsp(), self._User.getMenubarsPsp())
            # Удалить файлы блокировок при входе в систему
            lock.UnLockAllFile(ic_user.icGet('LOCK_DIR'))
            return True

        # Удалить файлы блокировок при входе в систему
        lock.UnLockAllFile(ic_user.icGet('LOCK_DIR'))
        
        return False
Beispiel #10
0
def setProjectSettingsToEnvironment(ProjectName_=None, ReDefine_=False):
    """
    Добавить все переменные из *.ini файла в окружение системы.
    @param ProjectName_: Имя проекта. Если None, то берется
    текущий проект.
    @param ReDefine_: Переопределять переменные в окружении?
    @return: True/False.
    """
    prj_settings = None
    if ic_user.getSettings() is None:
        if ic_mode.isDebugMode():
            io_prnt.outLog(u'Не определена переменная настроек проекта.')
        prj_dir = ic_user.icGet('PRJ_DIR')
        prj_name = ic_user.icGet('PrjName')
        if prj_dir and prj_name:
            prj_ini_file_name = prj_dir + '/' + prj_name + '.ini'
            prj_settings = ini.INI2Dict(prj_ini_file_name)
    else:
        if ProjectName_ is None:
            prj_settings = ic_user.getSettings().THIS.get()
        else:
            prj_settings = getattr(ic_user.getSettings(), ProjectName_).get()

    if prj_settings:
        for section_name, section in prj_settings.items():
            for param, value in section.items():
                if ic_user.icIs(param):
                    io_prnt.outLog(
                        u'Переменная %s уже определена в окружении' % param)
                    if ReDefine_:
                        ic_user.icLet(param, value)
                        io_prnt.outLog(
                            u'Переменная %s переопределена в окружении' %
                            param)
                else:
                    ic_user.icLet(param, value)
        if ic_mode.isDebugMode():
            ic_user.icPrintStore()
        return True
    return False
Beispiel #11
0
 def _get_ini_file_name(self):
     """
     Определить полное имя файла настроек из имени проекта.
     """
     prj_dir = ic_user.icGet('PRJ_DIR')
     if prj_dir:
         ini_file_name = prj_dir + '/' + self._cur_settings_list[0] + '.ini'
     else:
         prj_name = self._cur_settings_list[0]
         ini_file_name = ic_file.DirName(
             ic_file.DirName(ic_file.DirName(__file__))
         ) + '/%s/%s/%s.ini' % (prj_name, prj_name, prj_name)
     return ini_file_name
Beispiel #12
0
def icGetUserPath():
    """
    Возвращает путь до директории пользователя.
    """
    userName = ic_user.icGet('UserName')
    path = icGetResPath()
    if not userName:
        return None

    res = icGetRes(userName, 'acc', path, nameRes='users')
    if res:
        user_path = res['local_dir']
        return user_path

    return None
Beispiel #13
0
def get_reestr_name_lst():
    """
    Возвращает список имен реестров.
    """
    pth = ic_user.icGet('SYS_RES')
    subsys = ''
    
    if pth:
        lst = pth.replace('\\', '/').split('/')
        if lst[-1] == '':
            subsys = lst[-2]
        else:
            subsys = lst[-1]

    lst = ic_user.get_names_in_res(('mtd',), 'StdReestrBox')
    return ['%s:%s' % (subsys, x) for x in lst]
Beispiel #14
0
def getRolesChoiceList():
    """
    Функция получения списка ролей, определенных в проекте.
    """
    prj_dir = ic_user.icGet('PRJ_DIR')
    role_files = ic_file.GetFilesByExt(prj_dir, '.rol')
    # Сразу отфильтровать Pkl файлы
    role_files = [
        role_file for role_file in role_files
        if '_pkl.rol' not in role_file.lower()
    ]
    # Получить только базовые имена файлов
    role_files = [
        ic_file.SplitExt(ic_file.BaseName(role_file))[0]
        for role_file in role_files
    ]
    return role_files
Beispiel #15
0
    def __getattribute__(self, AttrName_):
        """
        Поддержка доступа к настройкам проекта через точку.
        """
        try:
            return object.__getattribute__(self, AttrName_)
        except AttributeError:
            pass

        prj = icPrjDotUse(object.__getattribute__(self, '_cur_settings_list'))

        if AttrName_ == object.__getattribute__(self, 'THIS_PRJ'):
            prj._cur_settings_list[0] = ic_user.icGet('PrjName')
        else:
            prj._cur_settings_list[-1] = AttrName_

        return prj
Beispiel #16
0
 def OnExit(self):
     """
     Функция выхода из системы.
     """
     # Удалить корректно все объекты таблиц
     from ic.engine import ic_user
     from ic.utils import resource
     
     lock.UnLockAllFile(ic_user.icGet('LOCK_DIR'))
     # Сохраняем локальное хранилище настроек 
     resource.icCloseLocalStorage()
     
     # Завершить работу
     self._User.Logout()
     # Выполнение обработчика события при старте движка
     io_prnt.outLog(u'Выход из системы.')
     ic_util.print_defis_logo()
     return True
Beispiel #17
0
    def __getattribute__(self, AttrName_):
        """
        Поддержка доступа к метаописанию через точку.
        """
        try:
            return object.__getattribute__(self, AttrName_)
        except AttributeError:
            pass

        prj = icPrjDotUse(object.__getattribute__(self, '_cur_passport_list'))

        if AttrName_ == object.__getattribute__(self, 'THIS_PRJ'):
            ic_user.icPrintStore()
            prj._cur_passport_list[-1] = ic_user.icGet('PrjName')
        else:
            prj._cur_passport_list[-1] = AttrName_

        return prj
Beispiel #18
0
    def __init__(self,
                 uniq_name,
                 assc_key,
                 assc_val,
                 res_path=None,
                 subsys='',
                 buffSize=accDictBuffSize):
        """
        Конструктор частотного словаря.
        
        @type uniq_name: C{string}
        @param uniq_name: Уникальное имя словаря.
        @type assc_key: C{tuple}
        @param assc_key: Картеж, задающий ассоциативный ключ. Элементами картежа
            являются имена ключевых полей.
        @type assc_val: C{tuple}
        @param assc_val: Картеж, задающий значение ассоциации.
        @type res_path: C{string}
        @param res_path: Путь до папки где хранится словрь <res_path/resource.var>.
        @type subsys: C{string}
        @param subsys: Имя подсистемы.
        @type buffSize: C{int}
        @param buffSize: Размер буфера по определенному ключу.
        """
        self.assc_key = assc_key
        self.assc_val = assc_val
        self.buffSize = buffSize

        persistant.icPersistant.__init__(self, uniq_name, 'adt', res_path,
                                         subsys)

        local_dir = ic_user.icGet('LOCAL_DIR')
        if not self.res_path and local_dir:
            self.res_path = ic_file.NormPathUnix(local_dir + '/')

        #   Читаем словарь
        self._model = {}
        self._model = self.LoadDict()

        #   Если он не создан еще - создаем его
        if not self._model:
            self._model = {}
Beispiel #19
0
    def readRoles(self, PrjDir_=None, isSort_=False):
        """
        Чтение ролей из папки проекта.
        @param PrjDir_: Папка проекта.
        @param isSort_: Сортировать роли по имени?
        """
        if PrjDir_ is None:
            PrjDir_ = ic_user.icGet('PRJ_DIR')
        role_files = ic_file.GetFilesByExt(PrjDir_, '.rol')
        # Отфильтровать pickle файлы
        role_files = [role_file for role_file in role_files if role_file[-8:].lower() != '_pkl.rol']

        result = []
        for role_file in role_files:
            role_data = util.readAndEvalFile(role_file)
            role_spc = role_data[role_data.keys()[0]]
            role_name = role_spc['name']
            role_description = role_spc.get('description', u'') or u''
            result.append((role_name, role_description))
        if isSort_:
            result.sort()
        return result
Beispiel #20
0
    def setRes(self, res, res_path, res_name, res_type='var'):
        """
        Установить ресурс.
        @param res: Сам ресурс.
        @param res_path: путь к ресурсным файлам (d:/aaa/fff).
        @param res_name: имя ресурса.
        @param res_type: тип ресурса.
        @return: Возвращает True или False в случае ошибки.
        """
        try:
            local_dir = ic_file.getPrjProfilePath(
            ) if res_path is None else res_path
            full_file_name = os.path.join(
                local_dir,
                res_name.replace(':', '_') + '.' + res_type)
            lock_file_name = os.path.join(
                local_dir, '#lock',
                res_name.replace(':', '_') + lock.LOCK_FILE_EXT)
            if not lock.IsLockedFile(lock_file_name):
                try:
                    lock_rec = {
                        'computer': lock.ComputerName(),
                        'user': ic_user.icGet('UserName')
                    }
                    lock.LockFile(lock_file_name, lock_rec)
                    ic_res.SaveResourcePickle(full_file_name, res)
                    lock.UnLockFile(lock_file_name)
                except:
                    log.fatal(u'Save resource file error: %s' % full_file_name)
                    lock.UnLockFile(lock_file_name)
            else:
                log.warning(u'Persistant file <%s> is locked to write.' %
                            full_file_name)
                return False

            return True
        except:
            log.fatal(u'PERSISTANT ERROR')
            return False
Beispiel #21
0
    def __init__(self, Parent_=None):
        """
        Конструктор.
        """
        ImpNode.PrjImportSys.__init__(self, Parent_)
        self.img = imglib.imgEdtPrj
        self.description = u'Проект'
        self.name = 'new_prj'
        # Проект и является корнем
        self._root = self
        # Проект открыт?
        self._is_opened_prj = False

        # Ресурс проекта
        self.prj_res_manager = PrjRes.icPrjRes()
        # Папка блокировок
        self.lock_dir = None
        # Текущее время создания файла ресурса проекта (для синхронизации проектов)
        self.prj_res_time = 0
        # Текущий размер файла ресурса проекта (для синхронизации проектов)
        self.prj_res_size = 0

        # Признак того что надо отображать всплывающие подсказки о ресурсах, модулях
        # и компонентах
        self.show_popup_help = False

        # Сразу зарегестрировать этот объект в хранилище переменных
        if not ic_user.icIs('PRJ_ROOT') or ic_user.icGet('PRJ_ROOT') is None:
            ic_user.icLet('PRJ_ROOT', self)

        # Режим отладки
        self.debug_mode = ic_mode.isDebugMode()

        # Система разграничения прав доступа
        self._prj_user = None
        self.prj_security = None
Beispiel #22
0
 def setPrjName(self, PrjName_):
     self._PrjName = PrjName_
     if self._PrjName is None:
         self._PrjName = ic_user.icGet('PrjName')
Beispiel #23
0
def icGetResPath():
    """
    Возвращает путь до директории, где располагаются ресурсные файлы
    """
    return ic_user.icGet('SYS_RES')