def getObjectsInResByTypes(self, ResFileName_, ObjTypes_, CurObj_=None): """ Поиск объектов в ресурсе по типу. @param ResFileName_: Имя файла ресурса. @param OBjTypes_: Кортеж типов объектов, например ('icButton',). @return: Список кортежей формата: [('тип объекта','имя объекта','описание'),...] """ if CurObj_ is None: spc = util.readAndEvalFile(ResFileName_, bRefresh=True) CurObj_ = spc[spc.keys()[0]] find_list = [] try: if CurObj_ is None: # Ресурс пустой return find_list if CurObj_['type'] in ObjTypes_: find_list.append( (CurObj_['type'], CurObj_['name'], CurObj_['description'])) if 'child' in CurObj_ and CurObj_['child']: for child in CurObj_['child']: find_grp = self.getObjectsInResByTypes( ResFileName_, ObjTypes_, child) find_list += find_grp except: log.fatal( u'Search error in function getObjectsInResByTypes: (%s, %s, %s)' % (ResFileName_, ObjTypes_, CurObj_)) return find_list
def getMyRes(self): """ Получить ресурс узла. """ full_res_file_name = self.getFullResFileName() res = util.readAndEvalFile(full_res_file_name) return res
def Load(self, UserName_, ResFile_=None): """ Загузить все реквизиты из ресурсного файла. @param UserName_: Имя пользователя в ресурсном файле. @param ResFile_: Имя ресурсного файла. """ try: if ResFile_ is not None: self._ResFile = ResFile_ access_dict = util.readAndEvalFile(self._ResFile, bRefresh=True) # Запомнить имя ... self._UserName = UserName_ if UserName_ in access_dict: # Собрать данные из словаря по одному пользователю. self._UserRequisit = self.CutUserRequisit( access_dict, UserName_, self._UserRequisit) if self._UserRequisit != {}: pass else: self._UserName = '' else: self._UserName = '' self._UserRequisit = {} return self._UserRequisit except: log.fatal(u'Ошибка загрузки реквизитов пользователя.') self._UserName = '' self._UserRequisit = {}
def openPrj(self, PrjFileName_): """ Открыть файл проекта. """ path, name = os.path.split(PrjFileName_) ic.set_ini_file(path) self.prj_file_name = PrjFileName_ if ic_file.IsFile(self.prj_file_name) and \ ic_file.Exists(self.prj_file_name): prj = util.readAndEvalFile(self.prj_file_name, bRefresh=True) self._prj = self._prepareDataPrj(prj)
def LoadUser(self, UserName_, ResFile_=DEFAULT_USERS_RES_FILE): """ Загузить данные из ресурсного файла по одному пользователю. @param UserName_: Имя пользователя в ресурсном файле. @param ResFile_: Имя ресурсного файла. """ try: access_dict = util.readAndEvalFile(ResFile_) return access_dict[UserName_] except: log.fatal(u'Load User Requisite Error')
def _loadResFile(self, ResName_, ResType_): """ Открыть и загрузить файл ресурса. @return: Содержимое ресурса или None в случае ошибки. """ res_file_name = os.path.join(self._PrjResDir, '%s.%s' % (ResName_, ResType_)) if ic_file.IsFile(res_file_name): res_file = util.readAndEvalFile(res_file_name) res = res_file[ResName_] return copy.deepcopy(res) return None
def ConvertRes(old_res_fl, path, ext=None): """ Функция конвертирует и 'режит' ресурсы старых версий в новые. @type old_res_fl: C{string} @param old_res_fl: Полный путь до ресурса старой версии. @type path: C{string} @param path: Полный путь до папки, куда положить новые ресурсы. """ pth, fileName = os.path.split(old_res_fl) # Определяем расширение if not ext: try: ext = fileName.split('.')[1] except: ext = None # ---- Проверяем существует ли заданный файл ресурса и директория, куда # будут ложиться файлы сконвертированных ресурсов if os.path.isdir(path) and os.path.isfile(old_res_fl): res = util.readAndEvalFile(old_res_fl) for nm in res: fn = path + '/%s.%s' % (nm, ext) if not os.path.isfile(fn): f = open(fn, 'wb') if ext == 'tab': # Удаляем атрибут 'uuid' if 'scheme' in res[nm]: for fld in res[nm]['scheme']: if 'uuid' in fld: fld.pop('uuid') txt = '{\'%s\': %s}' % (nm, str(res[nm])) txt = txt.replace('scheme', 'child').replace('icField', 'Field').\ replace('icLink', 'Link').replace('icDataClass', 'Table') else: txt = '{\'%s\': %s}' % (nm, str(res[nm])) f.write(txt) f.close() print('>>> Write new resource file:', fn) else: print('### File always %s exist!' % fn) return True
def getObjectsByResPattern(self, *ResPattern_): """ Получить список кортежей (тип объекта,имя объекта) по шаблону ресурса. @param ResPattern_: Кортеж строковых определений шаблонов ресурса '.*\.tab',... @return: Список кортежей (тип объекта,имя объекта) по шаблону ресурса. """ obj_list = [] res_file_names = self.getResFileNamesByResPattern(ResPattern_) prj_dir = os.path.dirname(self.prj_file_name) for res_file_name in res_file_names: full_res_file_name = prj_dir + '/' + res_file_name spc = util.readAndEvalFile(full_res_file_name, bRefresh=True) obj = (spc['type'], spc['name'], spc['description']) obj_list.append(obj) return obj_list
def GetUserRequisit(self, UserName_=''): """ Получить реквизиты пользователя. @param UserName_: Имя пользователя. Если UserName_ не определено, тогда возвращается описание прав доступа текущего пользователя. Если UserName определен, тогда возвращается описание прав доступа указанного пользователя. @return: Функция возвращает реквизиты текущего пользователя. """ try: if UserName_ == '' or UserName_ is None or UserName_ == self._UserName: return self._UserRequisit else: access_dict = util.readAndEvalFile(self._ResFile) return self.CutUserRequisit(access_dict, UserName_) except: log.fatal( u'Ошибка опеределения реквизитов доступа к системным ресурсам пользователя' ) return None
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 getUsersResource(self): """ Полностью структура ресурса файла пользователей. """ return util.readAndEvalFile(self.getUserResFileName())