Example #1
0
 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
Example #2
0
 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
Example #3
0
 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()
Example #4
0
 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
Example #5
0
 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
Example #6
0
 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
Example #7
0
 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))
Example #8
0
    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
Example #9
0
 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)
Example #10
0
    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
Example #11
0
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
Example #12
0
    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_)
Example #13
0
    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()