def clearStorageDir(self, StorageDir_=None): """ Полное очищение главной папки. """ if StorageDir_ is None: StorageDir_ = self._NodeDir if ic_file.Exists(StorageDir_): try: ic_file.RemoveTreeDir(StorageDir_, True) ic_file.MakeDirs(StorageDir_) except: io_prnt.outErr( u'Ошибка очистки папки объектного хранилища <%s>' % StorageDir_)
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 _makePrjInstall(self): """ Создание пакета прикладной системы. """ try: prj_name = self.getPrjName() temp_dir = 'c:/temp/'+prj_name if os.path.exists(temp_dir): io_prnt.outLog(u'INSTALL WIZARD DELETE TEMP DIR <%s>' % temp_dir) ic_file.RemoveTreeDir(temp_dir) io_prnt.outLog(u'INSTALL 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'INSTALL WIZARD COPY ic PACKAGE <%s>' % main_dir) ic_tmp_dir = temp_dir+'/ic' ic_file.CopyTreeDir(main_dir+'/ic', ic_tmp_dir) # Условие удаления исходников из ic if not self.getOpenSource(): ic_file.delAllFilesFilter(ic_tmp_dir, '*.py', '*.bak') # Пакет прикладной системы io_prnt.outLog(u'INSTALL WIZARD COPY %s PACKAGE %s' % (prj_name, prj_dir)) usr_tmp_dir = temp_dir+'/'+os.path.basename(prj_dir) ic_file.CopyTreeDir(prj_dir, temp_dir+'/'+os.path.basename(prj_dir)) # Все откомпелироавать нехрен ic_file.CompileDir(temp_dir) # Заархивировать пакет прикладной системы rar_util = main_dir+'/ic/db/postgresql/Rar.exe' arch_file_name = temp_dir+'/'+prj_name+'.exe' arch_cmd = '%s a -r -s -ep1 -sfx -df %s %s/*.*' % (rar_util, arch_file_name, temp_dir) io_prnt.outLog(u'INSTALL WIZARD Команда архивации: <%s>' % arch_cmd) ic_exec.icSysCmd(arch_cmd) return arch_file_name except: io_prnt.outErr(u'Ошибка архивации прикладной системы')
def delete(self): """ Удалить пакет. """ # Затем удалить из дерева prj_node.PrjNode.delete(self) # И в конце удалить папку пакета, если она есть package = self.getPath() # Выгрузить из редакторов self.getRoot().getParent().ide.CloseFile(package + '/__init__.py') # Удалить все блокировки self.getRoot().unlockAllPyFilesInIDE() if ic_file.Exists(package): ic_file.RemoveTreeDir(package, 1) # Для синхронизации дерева проекта self.getRoot().save()
def unLinkSubSys(self, SubSysName_): """ Отключить импортированную подсистему. @param SubSysName_: Имя подсистемы. """ sub_sys_path = self.getSubSysPath(SubSysName_) prj_dir = os.path.dirname( os.path.dirname(self.getRoot().getPrjFileName())) del_dir = prj_dir + '/' + os.path.basename( os.path.dirname(sub_sys_path)) io_prnt.outLog(u'UNLINK SUBSYTEM %s %s %s' % (SubSysName_, del_dir, sub_sys_path)) # Сначала удалить из описания в фале *.pro ok = self.getRoot().prj_res_manager.delImpSubSys(SubSysName_) # Затем удалить папку подсистемы if ok: ic_file.RemoveTreeDir(del_dir, True) self.delChildByName(SubSysName_)
def __delitem__(self, key): if not self.isOpen(): self.Open() if issubclass(self._StorageDB[str(key)].__class__, icFileStorage): # Проверка на удаление файла self._StorageDB[str(key)].closeFile() file_name = self._StorageDB[str(key)].getFileName() if ic_file.Exists(file_name) and ic_file.IsFile(file_name): ic_file.Remove(file_name) elif issubclass(self._StorageDB[str(key)].__class__, icDirStorage): # Проверка на удаление директории self._StorageDB[str(key)].closeAllFiles() dir_name = self._StorageDB[str(key)].getNodeDir() if ic_file.Exists(dir_name) and ic_file.IsDir(dir_name): ic_file.RemoveTreeDir(dir_name, 1) if str(key) in self._StorageDB: del self._StorageDB[str(key)]
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 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()