def icOctHexString(String_, Code_): """ Закодировать строку в восьмеричном/шестнадцатеричном виде. Символы с кодом < 128 не кодируются. @param String_: @param Code_: Кодировка 'OCT'-восьмеричное представление. 'HEX'-шестнадцатеричное представление. @return: Возвращает закодированную строку. """ try: if Code_.upper() == 'OCT': fmt = '\\%o' elif Code_.upper() == 'HEX': fmt = '\\x%x' else: # Ошибка аргументов log.warning(u'Функция icOctHexString: Ошибка аргументов.') return None # Перебор строки по символам ret_str = '' for char in String_: code_char = ord(char) # Символы с кодом < 128 не кодируются. if code_char > 128: ret_str += fmt % code_char else: ret_str += char return ret_str except: log.fatal() return None
def getFilesByMask(file_mask): """ Список файлов по маске. @param file_mask: Маска файлов. Например C:\Temp\*.dbf. @return: Возвращает список строк-полных путей к файлам. В случае ошибки None. """ try: if isinstance(file_mask, str): dir_path = os.path.dirname(file_mask) if os.path.exists(dir_path): filenames = glob.glob(pathname=file_mask, recursive=False) return [os.path.abspath(file_name) for file_name in filenames] else: log.warning(u'Не найден путь <%s> для определения списка файлов по маске <%s>' % (dir_path, file_mask)) elif isinstance(file_mask, tuple) or isinstance(file_mask, list): filenames = list() for file_mask in file_mask: filenames = glob.glob(pathname=file_mask, recursive=False) filenames += [os.path.abspath(file_name) for file_name in filenames] return filenames else: log.warning(u'Не поддерживаемый тип аргумента в функции getFilesByMask') except: log.fatal(u'Ошибка определения списка файлов по маске <%s>' % str(file_mask)) return []
def getReportResourceFilename(report_filename='', report_dir=''): """ Получить полное имя файла шаблона отчета. @param report_filename: Имя файла отчета в кратком виде. @param report_dir: Папка отчетов. @return: Полное имя файла отчета. """ # Проверить расширение rprt_filename = report_filename if not rprt_filename.endswith(DEFAULT_REPORT_FILE_EXT): rprt_filename = os.path.splitext( rprt_filename)[0] + DEFAULT_REPORT_FILE_EXT # Проверить актуальность шаблона full_src_filename = getPathFilename(report_filename, report_dir) full_rprt_filename = getPathFilename(rprt_filename, report_dir) if isNewReportTemplateFile(full_src_filename, full_rprt_filename): # Если исходный шаблон изменен позже чем рабочий файл шаблона <rprt> # то необходимо сделать изменения updateReportTemplateFile(full_src_filename, full_rprt_filename) if os.path.exists(rprt_filename): # Проверить может быть задано абсолютное имя файла filename = rprt_filename else: # Задано скорее всего относительное имя файла # относительно папки отчетов filename = full_rprt_filename if not os.path.exists(filename): # Нет такого файла log.warning(u'Файл шаблона отчета <%s> не найден' % textfunc.toUnicode(filename)) filename = createReportResourceFile(filename) log.debug(u'Полное имя файла шаблона <%s>' % textfunc.toUnicode(filename)) return filename
def GenerateReport(self, Rep_=None): """ Запустить генератор отчета. @param Rep_: Шаблон отчета. @return: Возвращает сгенерированный отчет или None в случае ошибки. """ try: if Rep_ is not None: self._Rep = Rep_ # 1. Получить таблицу запроса query_tbl = self.getQueryTbl(self._Rep) if not query_tbl or not query_tbl['__data__']: if not config.get_glob_var('NO_GUI_MODE'): if dlg.getAskBox( u'Внимание', u'Нет данных, соответствующих запросу: %s. Продолжить генерацию отчета?' % self._Rep['query']): return None else: log.warning( u'Пустая таблица запроса. Продолжение генерации.') query_tbl = self.createEmptyQueryTbl() # 2. Запустить генерацию rep = icrepgen.icReportGenerator() data_rep = rep.generate(self._Rep, query_tbl) return data_rep except: # Вывести сообщение об ошибке в лог log.fatal(u'Ошибка генерации отчета <%s>.' % self._Rep['name']) return None
def setExtOptions(self, **options): """ Установить дополнительные опции. @param options: Словарь опций. """ log.debug(u'Опции сканирования: %s' % options) if options: if 'scanner' in options: self.scanner = options.get('scanner', None) if 'source' in options: self.scan_source = options.get('source', None) if 'mode' in options: self.scan_mode = options.get('mode', None) if 'is_multi_scan' in options: self.is_multi_scan = options.get('is_multi_scan', None) if 'is_preview' in options: self.is_preview = options.get('is_preview', None) if 'page_size' in options: self.page_size = options.get('page_size', None) if 'area' in options: self.scan_area = options.get('area', None) if 'scan_dir' in options: self.scan_dir = options.get('scan_dir', None) if 'file_name' in options: self.scan_filename = options.get('file_name', None) if 'file_type' in options: self.scan_filetype = options.get('file_type', None) if 'depth' in options: self.depth = options.get('depth', None) if 'ext_scan_cmd' in options: self.ext_scan_cmd = options.get('ext_scan_cmd', None) else: log.warning(u'Не определены опции сканирования для установки')
def _findWorksheetData(self, XMLFileName_=None, SheetName_=None): """ Найти данные указанного листа. @param XMLFileName_: Имя XML файла книги. Если не определено, то имеется ввиду активная книга. @param SheetName_: Имя листа в указанной книге. Если не указано, то имеется ввиду первый лист. """ # Определить книгу workbook_data = self._findWorkbookData(XMLFileName_) if workbook_data is None: return None # Определить лист worksheet_data = [ data for data in workbook_data['children'] if data['name'] == 'Worksheet' ] if worksheet_data: if SheetName_ is None: worksheet_data = worksheet_data[0] else: worksheet_data = [ data for data in worksheet_data if data['Name'] == SheetName_ ] if worksheet_data: worksheet_data = worksheet_data[0] else: log.warning('Worksheet <%s> not found' % SheetName_) return None else: log.warning('Worksheets in <%s> not defined' % XMLFileName_) return None return worksheet_data
def IniParamNames(INIFileName_, Section_): """ Имена параметров в секции. @param INIFileName_: Полное имя файла настроек. @param Section_: Имя секции. @return: Возвращает список имен параметров в секции или None в случае ошибки. """ ini_file = None try: if not os.path.isfile(INIFileName_): log.warning(u'Файл конфигурации %s не найден.' % INIFileName_) return None # Создать объект конфигурации ini_parser = ConfigParser.ConfigParser() ini_file = open(INIFileName_, 'r') ini_parser.readfp(ini_file) ini_file.close() # Если такой секции нет if not ini_parser.has_section(Section_): return [] # Количество параметров в секции return ini_parser.options(Section_) except: if ini_file: ini_file.close() log.fatal() return None
def _getTagBandRow(self, Rows_, Row_): """ Определить тег бенда, к которому принадлежит строка. @param Rows_: Список строк. @param Row_: Номер строки. @return: Строка-тег бэнда или None в случае ошибки. """ try: row = Rows_[Row_] # Проверка корректности описания строки if 'children' not in row or not row['children']: log.warning(u'WARNING. _getTagBandRow function <%s>' % row) return self.__cur_band i_tag = self._getTagBandIdx(Rows_) # ВНИМАНИЕ! Если колонки тегов бендов нет в шаблоне # то считаем что весь шаблон это шапка отчета # Используется для простого заполнения тегами if not self._existTagBand(): self.__cur_band = HEADER_TAG else: if i_tag > 0: i_tag, tag_value = self._findTagBandRow(row) if i_tag >= 0: # Если тег найден, то взять его self.__cur_band = tag_value return self.__cur_band except: log.fatal(u'ERROR. _getTagBandRow function') return None
def doReport(parent_form=None, report_filename='', report_dir='', db_url='', sql='', command=None, stylelib_filename=None, variables=None): """ Функция запускает генератор отчетов. @param parent_form: Родительская форма, если не указана, то создается новое приложение. @param report_filename: Файл отчета. @param report_dir: Директорий, где хранятся отчеты. @param db_url: Connection string в виде url. Например postgresql+psycopg2://postgres:[email protected]:5432/realization. @param sql: Запрос SQL. @param command: Комманда после генерации. print/preview/export. @param stylelib_filename: Файл библиотеки стилей. @param variables: Словарь переменных для заполнения отчета. @return: Возвращает результат выполнения операции True/False. """ try: app = None if parent_form is None: app = wx.PySimpleApp() if not report_filename: return ReportViewer(parent_form, report_dir) else: # Если определен отчет, то запустить на выполнение repgen_system = report_generator.getReportGeneratorSystem( report_filename, parent_form) stylelib = loadStyleLib(stylelib_filename) data = repgen_system.generate( res.loadResourceFile(report_filename), db_url, sql, stylelib=stylelib, vars=variables) if command: command = command.lower() if command == DO_COMMAND_PRINT: repgen_system.PrintResult(data) elif command == DO_COMMAND_PREVIEW: repgen_system.PreviewResult(data) elif command == DO_COMMAND_EXPORT: repgen_system.ConvertResult(data) elif command == DO_COMMAND_SELECT: repgen_system.doSelectAction(data) else: log.warning(u'Not define command Report System <%s>' % command) else: repgen_system.save(data) return True except: log.fatal(u'Do report <%s>' % report_filename)
def getFilesByExt(path, ext): """ Функция возвращает список всех файлов в директории с указанным расширением. @param path: Путь. @param ext: Расширение, например '.pro'. @return: В случае ошибки возвращает None. """ file_list = None try: path = getCurDirPrj(path) if not os.path.exists(path): log.warning(u'Путь <%s> не найден для определения списка файлов директории по расширению' % path) return list() if ext[0] != '.': ext = '.' + ext ext = ext.lower() file_list = [os.path.join(path, file_name) for file_name in os.listdir(path)] file_list = [file_name for file_name in file_list if os.path.isfile(file_name) and (os.path.splitext(file_name)[1].lower() == ext)] return file_list except: log.fatal(u'Ошибка чтения списка файлов <ext=%s, path=%s, list=%s>' % (ext, path, file_list)) return None
def isDuplexOption(self): """ Проверка включена ли опция дуплекса. @return: True/False. """ options = self.options if options: try: if 'source' in options: # Проверка по выставленным опциям scan_source_opt = options['source'] else: # Проверка по опциям устройства dev_options = self.getScanOptionsDict() scan_source = dev_options['source'] scan_source_opt = scan_source[8][scan_source[4]] return 'Duplex' in scan_source_opt except: log.fatal( u'Ошибка определения вкл. опции сканирования дуплекс') else: log.warning( u'Не определены опции сканирования. Дуплекс отключен по умолчанию' ) return False
def _imageDrawCanvas(self, image, canvas, n, page_size=DEFAULT_IMAGE_PAGE_SIZE): """ Вывести отсканированую страницу на PDF холст. @param image: Объект образа отсканированной страницы. @param canvas: Объект PDF холста. @param n: Номер страницы. @param page_size: Размер страницы в точках, к которому будут приводиться все отсканированные страницы. @return: True/False. """ if image: img_filename = os.path.join(ic_file.getHomeDir(), MULTISCAN_PAGE_FILENAME % n) width, height = page_size image = image.resize((int(width), int(height))) image.save(img_filename) canvas.drawImage(img_filename, 0, 0) canvas.showPage() return True else: log.warning( u'Ошибка записи сканированой страницы [%d] в PDF файл' % n) return False
def setScanOptions(self, **options): """ Установить опции сканирования @param options: Значения опций. @return: True - все прошло удачно / False - ошибка. """ try: global SCAN_OPTIONS_ORDER for option_name in SCAN_OPTIONS_ORDER: if option_name in options: option_val = options[option_name] try: setattr(self.scan_device_obj, option_name, option_val) log.info( u'Установка опции сканирования <%s>. Значение <%s>' % (option_name, option_val)) # Запомнить выставленные значения опций # Может быть так что устанавливаем опции в устройстве # а они по не понятной причине не выставляются:-( self.options[option_name] = option_val except: log.warning( u'Ошибка установки опции сканирования <%s>. Значение <%s>' % (option_name, option_val)) return True except: log.fatal(u'Ошибка установки опций сканирования') return False
def delWorksheet(self, XMLFileName_=None, SheetName_=None): """ Удалить безвозвратно лист. @param XMLFileName_: Имя XML файла книги. Если не определено, то имеется ввиду активная книга. @param SheetName_: Имя листа в указанной книге. Если не указано, то имеется ввиду первый лист. @return: True-лист удален, False-лист по какойто причине не удален. """ XMLFileName_ = self._unificXMLFileName(XMLFileName_) SheetName_ = self._unicode2str(SheetName_) # Определить книгу workbook_data = self._findWorkbookData(XMLFileName_) if workbook_data is None: log.warning('Workbook <%s> not found' % XMLFileName_) return False # Найти и удалить лист result = False for i, data in enumerate(workbook_data['children']): if data['name'] == 'Worksheet': if SheetName_ is None: # Если имя листа не определено, то просто удалить первый попавшийся лист del workbook_data['children'][i] result = True break else: # Если имя листа определено, то проверить на соответствие имен листов if data['Name'] == SheetName_: log.info('Delete <%s> worksheet' % SheetName_) del workbook_data['children'][i] result = True break return result
def _findWorkbookData(self, XMLFileName_=None): """ Найти данные указанной книги. @param XMLFileName_: Имя XML файла книги. Если не определено, то имеется ввиду активная книга. """ # Определить книгу if XMLFileName_ is None: workbook_data = self._data else: xml_file_name = os.path.abspath(XMLFileName_) try: workbook_data = self._workbooks[xml_file_name] except KeyError: log.error('Workbook <%s> not registered in <%s>' % (xml_file_name, self._workbooks.keys())) raise workbook_data = [ data for data in workbook_data['children'] if 'name' in data and data['name'] == 'Workbook' ] if workbook_data: workbook_data = workbook_data[0] else: log.warning('Workbook in <%s> not defined' % XMLFileName_) return None return workbook_data
def Edit(self, RepFileName_=None): """ Редактирование отчета. @param RepFileName_: Полное имя файла шаблона отчета. """ # Создание связи с ActiveX rprt_file_name = os.path.abspath(RepFileName_) rep = ic_res.LoadResource(rprt_file_name) report_dir = os.path.abspath(ic.engine.ic_user.icGet('REPORT_DIR')) rep_file = os.path.abspath(rep['generator'], report_dir) reportman_designer_key = ic_util.GetRegValue('Software\\Classes\\Report Manager Designer\\shell\\open\\command', None) if reportman_designer_key: reportman_designer_run = reportman_designer_key.replace('\'%1\'', '\'%s\'') % rep_file cmd = 'start %s' % reportman_designer_run log.debug(u'Запуск команды ОС: <%s>' % cmd) # и запустить Report Manager Designer os.system(cmd) else: msg = u'Не определен дизайнер отчетов Report Manager Designer %s' % reportman_designer_key log.warning(msg) ic_dlg.icWarningBox(u'ВНИМАНИЕ!', msg) # Определить файл *.xml xml_file = os.path.normpath(os.path.abspath(os.path.splitext(RepFileName_)[0]+'.xml')) cmd = 'start excel.exe \'%s\'' % xml_file log.debug(u'Запуск команды ОС: <%s>' % cmd) # и запустить MSExcel os.system(cmd)
def icCopyFilesByMask(fromMask, toMask, Rewrite_=True, bDelImage=False): """ Копирует файлы по маске. Пример: "C:\WRK\p*.dbf" -> "Y:\WRK\pkt*.dbf" @type fromMask: C{string} @param fromMask: Маска, задающая файлы, которые надо копировать. @type toMask: C{string} @param toMask:Маска задает, куда надо копировать файлы. @type bDelImage: C{bool} @param bDelImage: Признак удаления образа файла. Если True - аналог переноса файлов с переименованием. """ fileList = [] fromMask = util.icUpper(fromMask.replace('\\', '/')) toMask = toMask.replace('\\', '/') dirName = '/'.join(fromMask.split('/')[:-1]) # Регулярное выражение для сравнения rm = re.compile( fromMask.replace('.', '\\.').replace('*', '.*').replace('$', '\\$')) ml1 = fromMask.split('*') ml2 = toMask.split('*') if os.path.isdir(dirName): # Определяем список файлов dir_list = os.listdir(dirName) for indx, fl in enumerate(dir_list): path, fileName = os.path.split(fl) # Определяем расширение файла try: ext = fileName.split('.')[1] except: ext = None fn = util.icUpper(dirName + '/' + fl) # Если очередное имя не является именем директории и удовлетворяет # шаблону, то соответствующий файл копируется в нужное место. if not os.path.isdir(fn) and truth(rm.match(fn)): # Определяем новое имя файла copyName = fn for i, s in enumerate(ml2): if i < len(ml1): if ml1[i] and s: copyName = copyName.replace(ml1[i], s) else: break log.info(u'Copy file %s -> %s' % (fn, copyName)) if icCopyFile(fn, copyName, Rewrite_) and bDelImage: Remove(fn) log.info(u'Delete file <%s>' % fn) else: log.warning(u'Dir <%> didn\'t find' % dirName)
def selectAction(self, report=None, *args, **kwargs): """ Запуск генерации отчета с последующим выбором действия. @param report: Полное описание шаблона отчета. """ ods_rep_file_name = self._genODSReport(report, *args, **kwargs) if ods_rep_file_name and os.path.exists(ods_rep_file_name): return self.doSelectAction(ods_rep_file_name) else: log.warning(u'Файл отчета <%s> не существует' % ods_rep_file_name)
def Dict2Ini(Dict_, INIFileName_): """ Представление/запись словаря в виде INI файла. @param Dict_: Исходный словарь. @param INIFileName_: Полное имя файла настроек. @return: Возвращает результат сохранения True/False. """ ini_file = None try: if not Dict_: log.warning(u'Не верно определен исходный словарь: %s' % Dict_) return False ini_file_name = ic_file.Split(INIFileName_) path = ini_file_name[0] filename = ini_file_name[1] if not ic_file.IsDir(path): ic_file.MakeDirs(path) # Если ини-файла нет, то создать его if not ic_file.Exists(INIFileName_): ini_file = open(INIFileName_, 'w') ini_file.write('') ini_file.close() # Создать объект конфигурации ini_parser = ConfigParser.ConfigParser() ini_file = open(INIFileName_, 'r') ini_parser.readfp(ini_file) ini_file.close() # Прописать словарь в объекте конфигурации for section in Dict_.keys(): # Вдруг в качестве ключей числа или т.п. section_str = str(section) # Если нет такой секции, то создать ее if not ini_parser.has_section(section_str): ini_parser.add_section(section_str) for param in Dict_[section].keys(): ini_parser.set(section_str, str(param), str(Dict_[section][param])) # Сохранить и закрыть файл ini_file = open(INIFileName_, 'w') ini_parser.write(ini_file) ini_file.close() return True except: if ini_file: ini_file.close() log.fatal() return False
def exec_code(sCode='', bReImport=False, name_space=None, kwargs=None): """ Выполнить блок кода. @type sCode: C{string} @param sCode: Блок кода. Блок кода - строка в формате: ИмяПакета.ИмяМодуля.ИмяФункции(аргументы). @type bReImport: C{bool} @param bReImport: Переимпортировать модуль функции? @type name_space: C{dictionary} @param name_space: Пространство имен. @type kwargs: C{dictionary} @param kwargs: Дополнительные аргументы функции. """ result = None # Подготовить пространство имен if name_space is None or not isinstance(name_space, dict): name_space = {} func_import = sCode.split('(')[0].split('.') func_mod = '.'.join(func_import[:-1]) if bReImport: unLoadSource(func_mod) # Импортирование модуля if func_mod: import_str = 'import ' + func_mod try: exec import_str except: log.error(u'Import module error <%s>' % import_str) raise # Добавить локальное пространство имен name_space.update(locals()) if kwargs: if isinstance(kwargs, dict): name_space.update(kwargs) else: log.warning( u'Не поддерживаемый тип <%s> дополнительных аргументов функции <%s>' % (type(kwargs), sCode)) # Выполнение функции try: result = eval(sCode, globals(), name_space) except: log.error(u'Execute function error <%s>' % sCode) raise return result
def OpenOffice(self, ODSFileName_): """ Открыть. @param ODSFileName_: Имя ods файла, содержащего сгенерированный отчет. """ if ODSFileName_ and os.path.exists(ODSFileName_): cmd = 'libreoffice %s&' % ODSFileName_ log.info('Command <%s>' % cmd) os.system(cmd) else: log.warning(u'Открытие. Файл <%s> не найден' % ODSFileName_)
def PrintOffice(self, ODSFileName_): """ Печать отчета с помощью CALC. @param ODSFileName_: Имя ods файла, содержащего сгенерированный отчет. """ if ODSFileName_ and os.path.exists(ODSFileName_): cmd = 'libreoffice -p %s&' % ODSFileName_ log.info(u'Command <%s>' % cmd) os.system(cmd) else: log.warning(u'Печать. Файл <%s> не найден.' % ODSFileName_)
def _parseQueryTag(self, Rep_, ParseRow_): """ Разбор заголовочного тега запроса. @param Rep_: Шаблон отчета. @param ParseRow_: Разбираемая строка шаблона отчета в виде списка. """ try: Rep_['query'] = ParseRow_[0]['children'][0]['value'] except: Rep_['query'] = None log.warning(u'Не указан запрос!')
def _parseDataSrcTag(self, Rep_, ParseRow_): """ Разбор заголовочного тега источника даных. @param Rep_: Шаблон отчета. @param ParseRow_: Разбираемая строка шаблона отчета в виде списка. """ try: Rep_['data_source'] = ParseRow_[0]['children'][0]['value'] except: Rep_['data_source'] = None log.warning(u'Не указан источник данных!')
def Update(self, RepTemplateFileName_=None): """ Обновить шаблон отчета в системе генератора отчетов. @param RepTemplateFileName_: Имя файла шаблона отчета. Если None, то должен производиться запрос на выбор этого файла. @return: Имя файла файла шаблона или None в случае ошибки. """ if RepTemplateFileName_ is None: filename = dlg.getFileDlg( self._ParentForm, u'Выберите шаблон отчета:', u'Microsoft Excel 2003 XML (*.xml)|*.xml|Электронные таблицы ODF (*.ods)|*.ods', self.getReportDir()) else: filename = os.path.abspath(os.path.normpath(RepTemplateFileName_)) if os.path.isfile(filename): # Конвертация log.debug(u'Начало конвертации <%s>' % filename) tmpl_filename = None template = None if os.path.exists( os.path.splitext(filename)[0] + DEFAULT_TEMPLATE_EXT): tmpl_filename = os.path.splitext( filename)[0] + DEFAULT_TEMPLATE_EXT template = icreptemplate.icODSReportTemplate() elif os.path.exists( os.path.splitext(filename)[0] + ODS_TEMPLATE_EXT): tmpl_filename = os.path.splitext( filename)[0] + ODS_TEMPLATE_EXT template = icreptemplate.icODSReportTemplate() elif os.path.exists( os.path.splitext(filename)[0] + XLS_TEMPLATE_EXT): tmpl_filename = os.path.splitext( filename)[0] + XLS_TEMPLATE_EXT template = icreptemplate.icXLSReportTemplate() elif os.path.exists( os.path.splitext(filename)[0] + XML_TEMPLATE_EXT): tmpl_filename = os.path.splitext( filename)[0] + XML_TEMPLATE_EXT template = icreptemplate.icExcelXMLReportTemplate() else: log.warning(u'Not find report template for <%s>' % filename) if template: rep_template = template.read(tmpl_filename) new_filename = os.path.splitext( filename)[0] + DEFAULT_REPORT_TEMPLATE_EXT res.saveResourcePickle(new_filename, rep_template) log.info(u'Конец конвертации') return new_filename else: log.warning(u'Не найден файл источника шаблона <%s>' % filename) return None
def getReportDir(self): """ Папка отчетов. """ if self._report_dir is None: if self._ParentForm: self._report_dir = os.path.abspath( self._ParentForm.GetReportDir()) else: log.warning(u'Не определена папка отчетов!') self._report_dir = '' return self._report_dir
def getGeneratorType(self): """ Тип системы генерации отчетов. """ my_generator_type = self._Rep.get('generator', None) if self._Rep else None if my_generator_type is None: log.warning( u'Не удалось определить тип системы генерации отчетов в <%s>' % self.__class__.__name__) elif type(my_generator_type) in (str, unicode): my_generator_type = my_generator_type.lower() return my_generator_type
def getHomePath(): """ Путь к домашней директории. @return: Строку-путь до папки пользователя. """ os_platform = platform.uname()[0].lower() if os_platform == 'windows': home_path = os.environ['HOMEDRIVE'] + os.environ['HOMEPATH'] home_path = home_path.replace('\\', '/') elif os_platform == 'linux': home_path = os.environ['HOME'] else: log.warning(u'Not supported OS platform <%s>' % os_platform) return None return os.path.normpath(home_path)
def loadResource(FileName_): """ Получить ресурс в ресурсном файле. @param FileName_: Полное имя ресурсного файла. """ # Сначала предположим что файл в формате Pickle. struct = loadResourcePickle(FileName_) if struct is None: # Но если он не в формате Pickle, то скорее всего в тексте. struct = loadResourceText(FileName_) if struct is None: # Но если не в тексте но ошибка! log.warning(u'Ошибка формата файла %s.' % FileName_) return None return struct
def loadOptions(self, sFileName=None): """ Загрузить параметры сканирования из конфигурационного файла. @param sFileName: Имя файла параметров. """ if sFileName is None: sFileName = self.genOptFileName() ini_dict = ic_ini.Ini2Dict(sFileName) if ini_dict: self.setExtOptions(**ini_dict['SCAN_OPTIONS']) else: log.warning( u'Параметры сканирования не загружены из конфигурационного файла' )