def importChild(self, ResFileName_=None): """ Импортировать ресурс, как дочерний узел. @param ResFileName_: Имя импортируемого ресурсного файла. @return: Возвращает вновь созданный узел или None. """ new_node = None if os.path.exists(ResFileName_): # Сделать новое имя файла new_res_file_name = ic_file.AbsolutePath( './%s/%s' % (self.getRoot().name, os.path.basename(ResFileName_))) # Если новый файл существут, то спросить о его перезаписи if not ic_file.SamePathWin(ResFileName_, new_res_file_name): # Скопировать файл ic_file.icCopyFile(ResFileName_, new_res_file_name, True) # Создать узел res_file_name_split = os.path.splitext(new_res_file_name) typ = res_file_name_split[1][1:] node_name = os.path.basename(res_file_name_split[0]) new_node = self.getRoot().buildPrjRes(self, typ, node_name) # Добавить ресурс в ресурс проекта self.getRoot().prj_res_manager.addRes(node_name, typ, self.name) # Для синхронизации дерева проекта self.getRoot().save() return new_node
def copy(self): """ Копировать. """ node = prj_node.PrjNode.copy(self) # Скопировать файл ресурса во временный файл res_file_name = self.getResPath() + '/' + self.getResFileName( ) + '.' + self.getResFileExt() copy_res_file_name = node.getResPath() + '/' + node.getResFileName( ) + '.bak' ic_file.icCopyFile(res_file_name, copy_res_file_name) # Кроме копирования файла необходимо # поменять имя ресурса в этом файле res = ic_res.ReadAndEvalFile(copy_res_file_name) res[node.name] = res[self.name] del res[self.name] copy_res_file = None try: copy_res_file = open(copy_res_file_name, 'w') copy_res_file.write(str(res)) copy_res_file.close() except: if copy_res_file: copy_res_file.close() io_prnt.outErr() return node
def Clone(self, CloneName_): """ Клонировать узел. @param CloneName_: Имя клона. """ new_file_name = ic_file.DirName( self._FileName) + '/' + CloneName_ + FILE_STORAGE_EXT # Клонировать только если такого файла нет if not ic_file.Exists(new_file_name): self.closeFile() ic_file.icCopyFile(self._FileName, new_file_name, False) # Заменить имя узла в файле file = None try: file = shelve.open(new_file_name, protocol=FILE_STORAGE_PROTOCOL, writeback=self._cache) property = dict(file['property']) property['name'] = CloneName_ file['property'] = property file.sync() file.close() except: if file: file.close() if self._ParentNode: self._ParentNode.ReLoad()
def copy(self): """ Копировать. """ module_name = os.path.join(self.getModulePath(), self.name + self.ext) copy_node = prj_node.PrjNode.copy(self) copy_module_name = copy_node.getCopyModuleName() ic_file.icCopyFile(module_name, copy_module_name) return copy_node
def copy(self): """ Копировать. """ py_file = self.getPath() + '/__init__.py' copy_node = prj_node.PrjNode.copy(self) copy_py_file = copy_node.getCopyModuleName() ic_file.icCopyFile(py_file, copy_py_file) return copy_node
def cut(self): """ Вырезать. """ py_file = self.getPath() + '/__init__.py' copy_py_file = self.getCopyModuleName() ic_file.icCopyFile(py_file, copy_py_file) me_node = prj_node.PrjNode.cut(self) self.delete() return me_node
def makeInstallPackage(self): """ Создание инсталяционного пакета. """ install_dir = ic_dlg.icDirDlg(None, u'Выберите инсталяционную папку', os.getcwd()) if os.path.isdir(install_dir): arch_file_name = self._makePrjInstall() ic_file.icCopyFile(arch_file_name, install_dir+'/'+os.path.basename(arch_file_name))
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
def _new_prj_init_file(self, PrjPath_): """ Создать новый __init__.py файл проекта. """ log.info(_('__init__.py is created in folder %s') % PrjPath_) return ic_file.icCopyFile( os.path.dirname(__file__) + '/prj__init__prototype.py', PrjPath_ + '/__init__.py', False)
def _makePrjInstall(self): """ Создание пакета прикладной системы. """ try: prj_name = self.getPrjName() temp_dir = os.environ['TMP']+'/'+prj_name if os.path.exists(temp_dir): io_prnt.outLog(u'PUBLIC WIZARD DELETE TEMP DIR <%s>' % temp_dir) ic_file.RemoveTreeDir(temp_dir) io_prnt.outLog(u'PUBLIC WIZARD DELETE TEMP DIR OK') os.makedirs(temp_dir) # Скопировать необходимые папки и модули # во временную папку prj_dir = os.path.dirname(self._prj_dir) main_dir = os.path.dirname(prj_dir) # Пакет ic io_prnt.outLog(u'PUBLIC WIZARD COPY ic PACKAGE <%s>' % main_dir) ic_tmp_dir = temp_dir+'/ic' ic_file.CopyDir(main_dir+'/ic', temp_dir) # Условие удаления исходников из ic ic_file.delAllFilesFilter(ic_tmp_dir, '*.bak', '*.pyc') # Пакет прикладной системы io_prnt.outLog(u'PUBLIC WIZARD COPY %s PACKAGE %s' % (prj_name, prj_dir)) usr_tmp_dir = temp_dir+'/'+os.path.basename(prj_dir) ic_file.CopyDir(prj_dir, temp_dir) #Условие удаления исходников из ic ic_file.delAllFilesFilter(usr_tmp_dir, '*.bak', '*.pyc', '*.lck', '/log/*.ini', '/log/*.log') ic_file.icCopyFile(main_dir+'/readme.ru', temp_dir+'/readme.ru') ic_file.icCopyFile(main_dir+'/license.ru', temp_dir+'/license.ru') if ic_util.isOSWindowsPlatform(): return self._makeArchiveRAR(main_dir, temp_dir, prj_name) else: return self._makeArchiveZIP(temp_dir, prj_name) except: io_prnt.outErr(u'Ошибка архивации прикладной системы') return None
def smb_download_file_rename(download_urls=None, filename=None, dst_filename=None, re_write=True): """ Найти и загрузить файл с переименованием. @param download_urls: Список путей поиска файла. Пример: ('smb://xhermit@SAFE/Backup/daily.0/Nas_pvz/smb/sys_bucks/Nas_pvz/NSI/', 'smb://xhermit@TELEMETRIA/share/install/', ... ) Параметр может задаваться строкой. В таком случае считаем что URL один. @param filename: Относительное имя файла. Например: '/2017/FDOC/RC001.DCM' @param dst_filename: Новое полное наименование для сохранения файла. @param re_write: Перезаписать локальный файл, если он уже существует? @return: True - Произошла загрузка, False - ничего не загружено. """ # Сначала просто загрузим файл tmp_path = os.tmpnam() result = smb_download_file(download_urls, filename, tmp_path, re_write) if result: new_filename = None try: # Успешно загрузили # Перименование файла new_filename = os.path.join(tmp_path, filename) ic_file.icCopyFile(new_filename, dst_filename, re_write) # После копирования удаляем временную директорию ic_file.RemoveTreeDir(tmp_path, True) return True except: log.fatal(u'Ошибка переименования файла <%s> -> <%s>' % (new_filename, dst_filename)) return False
def paste(self, Node_): """ Вставить. @param Node_: Вставляемый узел. """ # Поменять расширение у bak файлов. res_file_name = Node_.getResPath() + '/' + Node_.getResFileName( ) + '.bak' res_pkl_file_name = Node_.getResPath() + '/' + Node_.getResFileName( ) + '_pkl.bak' to_res_file_name = self.getResPath() + '/' + Node_.getResFileName( ) + '.' + Node_.typ to_res_pkl_file_name = self.getResPath() + '/' + Node_.getResFileName( ) + '_pkl.' '.' + Node_.typ ic_file.icCopyFile(res_file_name, to_res_file_name) ic_file.icCopyFile(res_pkl_file_name, to_res_pkl_file_name) # Прописать его в проекте self.getRoot().prj_res_manager.addRes(Node_.name, Node_.typ, self._Parent.name) # Вставить в проект return prj_node.PrjNode.paste(self, Node_)
def makeInstallPackage(self): """ Создание инсталяционного пакета. """ install_dir = ic_dlg.icDirDlg(None, u'Выберите инсталяционную папку', os.getcwd()) if os.path.isdir(install_dir): try: packages = self.getPackages() ic_dlg.icOpenProgressDlg(None, u'Создание инсталяционного пакета проекта', u'Создание инсталяционного пакета проекта', 0, len(packages)+5) i = 0 # Создать папку пакетов os.makedirs(install_dir+'/package') # Скопировать иконку i += 1 ic_dlg.icUpdateProgressDlg(i, u'Копирование иконки') ico_file = self.getPrjIcon() if os.path.exists(ico_file): ic_file.icCopyFile(ico_file, install_dir+'/'+os.path.basename(ico_file)) else: io_prnt.outLog(u'Файл иконки <%s> не существует' % ico_file) # Создание пакета прикладной системы i += 1 ic_dlg.icUpdateProgressDlg(i, u'Создание пакета прикладной системы') arch_file = self._makePrjInstall() if os.path.exists(arch_file): ic_file.icCopyFile(arch_file, install_dir+'/package/'+os.path.basename(arch_file)) # Удалить временную папку ic_file.RemoveTreeDir(os.path.dirname(arch_file), 1) # Скопировать пакеты for package in packages: i += 1 ic_dlg.icUpdateProgressDlg(i, u'Копирование пакета <%s>' % package) if os.path.exists(package): ic_file.icCopyFile(package, install_dir+'/package/'+os.path.basename(package)) else: io_prnt.outLog(u'Файл пакета <%s> не существует' % package) # Сохранить скрипт инсталятора i += 1 ic_dlg.icUpdateProgressDlg(i, u'Создание скрипта инсталятора') script = self.installScript() try: nsi_file = None nsi_file = open(install_dir+'\setup.nsi', 'w') nsi_file.write(script) nsi_file.close() except: io_prnt.outErr(u'Ошибка сохранения скрипта инсталятора') if nsi_file: nsi_file.close() # Компилирование скрипта инсталятора i += 1 ic_dlg.icUpdateProgressDlg(i, u'Компилирование скрипта инсталятора') nsis_cmd = '%s %s/setup.nsi' % (self.getInstallMaker(), install_dir) io_prnt.outLog(u'Компиляция скрипта инсталятора '+nsis_cmd) ic_exec.icSysCmd(nsis_cmd) ic_dlg.icCloseProgressDlg() except: io_prnt.outErr(u'Ошибка создания инсталяционного пакета') ic_dlg.icCloseProgressDlg()