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)
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))
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))
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
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']))
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})
def IsDebugMode(): """ Признак режима отладки. """ if ic_user.icIs('DEBUG_MODE'): return ic_user.icGet('DEBUG_MODE') else: return False
def icGetSubsysResPaths(): """ Возвращает список путей до всех подсистем. """ paths = ic_user.icGet('SUBSYS_RES') if not paths: paths = [icGetResPath()] return paths
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
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
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
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
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]
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
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
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
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
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 = {}
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
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
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
def setPrjName(self, PrjName_): self._PrjName = PrjName_ if self._PrjName is None: self._PrjName = ic_user.icGet('PrjName')
def icGetResPath(): """ Возвращает путь до директории, где располагаются ресурсные файлы """ return ic_user.icGet('SYS_RES')