コード例 #1
0
    def _loadLayer(self):
        fullLayerPath = os.path.join(self._projectPath, self._settings.path)
        filePath = QFileInfo(fullLayerPath)
        layer = None
        if filePath.exists():
            layer = layers.loadShapefileLayer(fullLayerPath, self._settings.name)
        else:
            wkbType = layers.geometryToWkbType(self._settings.geometry, self._settings.multi)
            if not filePath.dir().exists():
                os.makedirs(filePath.dir().absolutePath())
            layer = layers.createShapefile(fullLayerPath,
                                           self._settings.name,
                                           wkbType,
                                           self._settings.crs,
                                           self.fields)

        if layer and layer.isValid():
            layer = layers.addLayerToLegend(self._iface, layer)
            self._setDefaultSnapping(layer)
            layer.loadNamedStyle(self._settings.stylePath)
            self.name = self._settings.name
            self.layer = layer
            self.layerId = layer.id()
        else:
            self.layer = None
            self.layerId = ''
コード例 #2
0
 def _loadLogLayer(self):
     fullLayerPath = os.path.join(self._projectPath, self._settings.logPath)
     filePath = QFileInfo(fullLayerPath)
     layer = None
     if filePath.exists():
         layer = layers.loadShapefileLayer(fullLayerPath, self._settings.logName)
     else:
         if not filePath.dir().exists():
             os.makedirs(filePath.dir().absolutePath())
         fields = QgsFields()
         fields.append(QgsField('timestamp', QVariant.String, '', 10, 0, 'timestamp'))
         fields.append(QgsField('event', QVariant.String, '', 6, 0, 'event'))
         fields.extend(self.fields)
         layer = layers.createShapefile(fullLayerPath,
                                        self._settings.logName,
                                        self.layer.wkbType(),
                                        self._settings.crs,
                                        fields)
     if layer and layer.isValid():
         layer.editFormConfig().setSuppress(QgsEditFormConfig.SuppressOn)
         self.logLayer = layer
         self.logLayerId = layer.id()
     else:
         self.logLayer = None
         self.logLayerId = ''
コード例 #3
0
ファイル: FileCommands.py プロジェクト: nexdatas/configtool
    def redo(self):
        if self._ds is None:
            self._ds = self.receiver.sourceList.currentListElement()
        if self._ds is None:
            QMessageBox.warning(self.receiver, "DataSource not selected",
                                "Please select one of the datasources")
        else:
            if self._ds.instance is None:
                dsEdit = DataSource.DataSource(self.receiver.sourceList)
                dsEdit.id = self._ds.id
                dsEdit.directory = self.receiver.sourceList.directory
                dsEdit.name = self.receiver.sourceList.elements[
                    self._ds.id].name
                self._ds.instance = dsEdit

            if self._ds.instance is not None:
                self._pathFile = self._ds.instance.getNewName()
                fi = QFileInfo(self._pathFile)
                self.name = unicode(fi.fileName())
                if self.name[-4:] == '.xml':
                    self.name = self.name[:-4]
                    if self.name[-3:] == '.ds':
                        self.name = self.name[:-3]

                self.directory = unicode(fi.dir().path())

        logger.debug("EXEC dsourceSaveAs")
コード例 #4
0
ファイル: Utils.py プロジェクト: yili9111/qgis-cartodb
def getSize(layer):
    """Get layer size on disk"""
    is_zip_file = False
    file_path = layer.dataProvider().dataSourceUri()
    if file_path.find('|') != -1:
        file_path = file_path[0:file_path.find('|')]

    if file_path.startswith('/vsizip/'):
        file_path = file_path.replace('/vsizip/', '')
        is_zip_file = True

    _file = QFile(file_path)
    file_info = QFileInfo(_file)

    dirname = file_info.dir().absolutePath()
    filename = file_info.completeBaseName()

    size = 0
    if layer.storageType() == 'ESRI Shapefile' and not is_zip_file:
        for suffix in ['.shp', '.dbf', '.prj', '.shx']:
            _file = QFile(os.path.join(dirname, filename + suffix))
            file_info = QFileInfo(_file)
            size = size + file_info.size()
    elif layer.storageType() in ['GPX', 'GeoJSON', 'LIBKML'] or is_zip_file:
        size = size + file_info.size()

    return size
コード例 #5
0
    def on_mEndMarkerToolButton_clicked(self):
        if self.timeStart != 0:
            self.timeEnd = time.time()
            print self.timeEnd
            if self.timeEnd - self.timeStart <= 2:
                self.timeStart = 0
                return
        s = QSettings()
        openDir = QString()

        if (not self.mEndMarkerLineEdit.text().isEmpty()):
            fi = QFileInfo(self.mEndMarkerLineEdit.text())
            openDir = fi.dir().absolutePath()

        if (openDir.isEmpty()):
            openDir = s.value("/UI/lastComposerMarkerDir",
                              QDir.homePath()).toString()

        svgFileName = QFileDialog.getOpenFileName(
            self, QString("End marker svg file"), openDir)
        if (not svgFileName.isNull()):
            fileInfo = QFileInfo(svgFileName)
            s.setValue("/UI/lastComposerMarkerDir", fileInfo.absolutePath())
            self.mArrow.beginCommand(QString("Arrow end marker"))
            self.mEndMarkerLineEdit.setText(svgFileName)
            self.mArrow.endCommand()
        self.timeStart = time.time()
コード例 #6
0
ファイル: desktop_icon.py プロジェクト: OSUser/quickpanel
 def restoreDir(self):
     "用户点击了“默认运行目录”按钮。"
     path = self.txtPath.text().strip()
     fi = QFileInfo(path)
     if path == "" or not fi.exists():
         return
     self.txtDir.setText(fi.dir().absolutePath())
コード例 #7
0
ファイル: Utils.py プロジェクト: mapping/qgis-cartodb
def getSize(layer):
    """Get layer size on disk"""
    is_zip_file = False
    file_path = layer.dataProvider().dataSourceUri()
    if file_path.find('|') != -1:
        file_path = file_path[0:file_path.find('|')]

    if file_path.startswith('/vsizip/'):
        file_path = file_path.replace('/vsizip/', '')
        is_zip_file = True

    _file = QFile(file_path)
    file_info = QFileInfo(_file)

    dirname = file_info.dir().absolutePath()
    filename = file_info.completeBaseName()

    size = 0
    if layer.storageType() == 'ESRI Shapefile' and not is_zip_file:
        for suffix in ['.shp', '.dbf', '.prj', '.shx']:
            _file = QFile(os.path.join(dirname, filename + suffix))
            file_info = QFileInfo(_file)
            size = size + file_info.size()
    elif layer.storageType() in ['GPX', 'GeoJSON', 'LIBKML'] or is_zip_file:
        size = size + file_info.size()

    return size
コード例 #8
0
ファイル: img2gifWidget.py プロジェクト: Liung/QAeroData
 def updateGifPath(self):
     fileName = self.txtGifPath.text()
     f = QFileInfo(fileName)
     if f.dir().exists and not f.baseName().isEmpty() and not f.suffix().isEmpty():
         self.txtGifPath.setText(fileName)
         return True
     else:
         QMessageBox.warning(self, u"{0} -- warning".format(Img2GifWidget.AppName),
                             u"要生成的GIF存储路径{0}不是有效的GIF文件".format(unicode(fileName)))
         return False
コード例 #9
0
    def _loadBufferLayer(self):
        fullLayerPath = os.path.join(self._projectPath, self._settings.bufferPath)
        filePath = QFileInfo(fullLayerPath)
        layer = None
        if filePath.exists():
            layer = layers.loadShapefileLayer(fullLayerPath, self._settings.bufferName)
        else:
            if not filePath.dir().exists():
                os.makedirs(filePath.dir().absolutePath())
            layer = layers.cloneAsShapefile(self.layer, fullLayerPath, self._settings.bufferName)

        if layer and layer.isValid():
            layer = layers.addLayerToLegend(self._iface, layer)
            self._setDefaultSnapping(layer)
            layers.loadStyle(layer, fromLayer=self.layer)
            layer.startEditing()
            layer.editFormConfig().setSuppress(QgsEditFormConfig.SuppressOn)
            self.bufferLayer = layer
            self.bufferLayerId = layer.id()
        else:
            self.bufferLayer = None
            self.bufferLayerId = ''
コード例 #10
0
ファイル: desktop_icon.py プロジェクト: OSUser/quickpanel
 def browsePath(self):
     """用户点击了浏览路径的按钮。如果成功设置了路径,就返回True,如果用户取消了操作或者出错,就返回False
     返回的用途参见showEvent()"""
     filename = QFileDialog.getOpenFileName(self, self.windowTitle())
     if filename == "":
         return False
     fi = QFileInfo(filename)
     if fi.isSymLink():
         filename = fi.symLinkTarget()
         if not os.path.exists(filename):
             QMessageBox.information(self, self.windowTitle(), self.trUtf8("快捷方式所指向的程序不正确。"))
             return False
     fi = QFileInfo(filename)
     self.txtName.setText(fi.baseName())
     self.txtPath.setText(fi.absoluteFilePath())
     self.setFileIcon(fi.absoluteFilePath())
     self.txtDir.setText(fi.dir().absolutePath())
     return True
コード例 #11
0
ファイル: Utils.py プロジェクト: yili9111/qgis-cartodb
def zipLayer(layer):
    """Compress layer to zip file"""
    file_path = layer.dataProvider().dataSourceUri()
    if file_path.find('|') != -1:
        file_path = file_path[0:file_path.find('|')]

    if file_path.startswith('/vsizip/'):
        file_path = file_path.replace('/vsizip/', '')
        if layer.storageType() in [
                'ESRI Shapefile', 'GPX', 'GeoJSON', 'LIBKML'
        ]:
            return file_path
    _file = QFile(file_path)
    file_info = QFileInfo(_file)

    dirname = file_info.dir().absolutePath()
    filename = stripAccents(file_info.completeBaseName())
    layername = stripAccents(layer.name())

    tempdir = checkTempDir()

    zip_path = os.path.join(tempdir, layername + '.zip')
    zip_file = zipfile.ZipFile(zip_path, 'w')

    if layer.storageType() == 'ESRI Shapefile':
        for suffix in ['.shp', '.dbf', '.prj', '.shx']:
            if os.path.exists(os.path.join(dirname, filename + suffix)):
                zip_file.write(os.path.join(dirname, filename + suffix),
                               layername + suffix, zipfile.ZIP_DEFLATED)
    elif layer.storageType() == 'GeoJSON':
        zip_file.write(file_path, layername + '.geojson', zipfile.ZIP_DEFLATED)
    elif layer.storageType() == 'GPX':
        zip_file.write(file_path, layername + '.gpx', zipfile.ZIP_DEFLATED)
    elif layer.storageType() == 'LIBKML':
        zip_file.write(file_path, layername + '.kml', zipfile.ZIP_DEFLATED)
    else:
        geo_json_name = os.path.join(tempfile.tempdir, layername)
        error = QgsVectorFileWriter.writeAsVectorFormat(
            layer, geo_json_name, "utf-8", None, "GeoJSON")
        if error == QgsVectorFileWriter.NoError:
            zip_file.write(geo_json_name + '.geojson', layername + '.geojson',
                           zipfile.ZIP_DEFLATED)
    zip_file.close()
    return zip_path
コード例 #12
0
ファイル: Upload.py プロジェクト: fgcartographix/qgis-cartodb
    def getSize(self, layer):
        filePath = layer.dataProvider().dataSourceUri()
        if filePath.find('|') != -1:
            filePath = filePath[0:filePath.find('|')]

        file = QFile(filePath)
        fileInfo = QFileInfo(file)

        dirName = fileInfo.dir().absolutePath()
        fileName = fileInfo.completeBaseName()

        size = 0
        if layer.storageType() == 'ESRI Shapefile':
            for suffix in ['.shp', '.dbf', '.prj', '.shx']:
                file = QFile(os.path.join(dirName, fileName + suffix))
                fileInfo = QFileInfo(file)
                size = size + fileInfo.size()

        return size
コード例 #13
0
    def zipLayer(self, layer):
        filePath = layer.dataProvider().dataSourceUri()
        if filePath.find('|') != -1:
            filePath = filePath[0:filePath.find('|')]

        file = QFile(filePath)
        fileInfo = QFileInfo(file)

        dirName = fileInfo.dir().absolutePath()
        fileName = fileInfo.completeBaseName()

        tempdir = tempfile.tempdir
        if tempdir is None:
            tempdir = tempfile.mkdtemp()

        zipPath = os.path.join(tempdir, layer.name() + '.zip')
        zipFile = zipfile.ZipFile(zipPath, 'w')

        if layer.storageType() == 'ESRI Shapefile':
            for suffix in ['.shp', '.dbf', '.prj', '.shx']:
                if os.path.exists(os.path.join(dirName, fileName + suffix)):
                    zipFile.write(os.path.join(dirName, fileName + suffix),
                                  fileName + suffix, zipfile.ZIP_DEFLATED)
        elif layer.storageType() == 'GeoJSON':
            zipFile.write(filePath,
                          layer.name() + '.geojson', zipfile.ZIP_DEFLATED)
        else:
            geoJsonName = os.path.join(tempfile.tempdir, layer.name())
            error = QgsVectorFileWriter.writeAsVectorFormat(
                layer, geoJsonName, "utf-8", None, "GeoJSON")
            if error == QgsVectorFileWriter.NoError:
                zipFile.write(geoJsonName + '.geojson',
                              layer.name() + '.geojson', zipfile.ZIP_DEFLATED)
        '''
        elif layer.storageType() == 'LIBKML':
            kmlName = os.path.join(tempfile.tempdir, layer.name())
            error = QgsVectorFileWriter.writeAsVectorFormat(layer, kmlName, "utf-8", None, "GeoJSON")
            if error == QgsVectorFileWriter.NoError:
                zipFile.write(kmlName + '.geojson', layer.name() + '.geojson', zipfile.ZIP_DEFLATED)
        '''
        zipFile.close()
        return zipPath
コード例 #14
0
    def getSize(self, layer):
        filePath = layer.dataProvider().dataSourceUri()
        if filePath.find('|') != -1:
            filePath = filePath[0:filePath.find('|')]

        file = QFile(filePath)
        fileInfo = QFileInfo(file)

        dirName = fileInfo.dir().absolutePath()
        fileName = fileInfo.completeBaseName()

        size = 0
        if layer.storageType() == 'ESRI Shapefile':
            for suffix in ['.shp', '.dbf', '.prj', '.shx']:
                file = QFile(os.path.join(dirName, fileName + suffix))
                fileInfo = QFileInfo(file)
                size = size + fileInfo.size()
        elif layer.storageType() in ['GPX', 'GeoJSON', 'LIBKML']:
            size = size + fileInfo.size()

        return size
コード例 #15
0
ファイル: Utils.py プロジェクト: mapping/qgis-cartodb
def zipLayer(layer):
    """Compress layer to zip file"""
    file_path = layer.dataProvider().dataSourceUri()
    if file_path.find('|') != -1:
        file_path = file_path[0:file_path.find('|')]

    if file_path.startswith('/vsizip/'):
        file_path = file_path.replace('/vsizip/', '')
        if layer.storageType() in ['ESRI Shapefile', 'GPX', 'GeoJSON', 'LIBKML']:
            return file_path

    _file = QFile(file_path)
    file_info = QFileInfo(_file)

    dirname = file_info.dir().absolutePath()
    filename = file_info.completeBaseName()

    tempdir = checkTempDir()

    zip_path = os.path.join(tempdir, layer.name() + '.zip')
    zip_file = zipfile.ZipFile(zip_path, 'w')


    if layer.storageType() == 'ESRI Shapefile':
        for suffix in ['.shp', '.dbf', '.prj', '.shx']:
            if os.path.exists(os.path.join(dirname, filename + suffix)):
                zip_file.write(os.path.join(dirname, filename + suffix), layer.name() + suffix, zipfile.ZIP_DEFLATED)
    elif layer.storageType() == 'GeoJSON':
        zip_file.write(file_path, layer.name() + '.geojson', zipfile.ZIP_DEFLATED)
    elif layer.storageType() == 'GPX':
        zip_file.write(file_path, layer.name() + '.gpx', zipfile.ZIP_DEFLATED)
    elif layer.storageType() == 'LIBKML':
        zip_file.write(file_path, layer.name() + '.kml', zipfile.ZIP_DEFLATED)
    else:
        geo_json_name = os.path.join(tempfile.tempdir, layer.name())
        error = QgsVectorFileWriter.writeAsVectorFormat(layer, geo_json_name, "utf-8", None, "GeoJSON")
        if error == QgsVectorFileWriter.NoError:
            zip_file.write(geo_json_name + '.geojson', layer.name() + '.geojson', zipfile.ZIP_DEFLATED)
    zip_file.close()
    return zip_path
コード例 #16
0
ファイル: sourcedocument.py プロジェクト: gltn/stdm
def set_source_document_location(doc_path):
    """
    Set the latest source directory of uploaded source documents.
    :param doc_path: Directory path or file path. The system will
     attempt to extract the directory path from the file name.
    """
    doc_dir_path = ""
    #Check if it is a file or directory
    doc_dir = QDir(doc_path)

    if not doc_dir.exists():
        doc_file_info = QFileInfo(doc_path)

        if doc_file_info.exists():
            doc_dir_path = doc_file_info.dir().path()

    else:
        doc_dir_path = doc_path

    if len(doc_dir_path) > 0:
        reg_config = RegistryConfig()
        reg_config.write({LOCAL_SOURCE_DOC:doc_dir_path})
コード例 #17
0
ファイル: sourcedocument.py プロジェクト: nyalldawson/stdm
def set_source_document_location(doc_path):
    """
    Set the latest source directory of uploaded source documents.
    :param doc_path: Directory path or file path. The system will
     attempt to extract the directory path from the file name.
    """
    doc_dir_path = ""
    #Check if it is a file or directory
    doc_dir = QDir(doc_path)

    if not doc_dir.exists():
        doc_file_info = QFileInfo(doc_path)

        if doc_file_info.exists():
            doc_dir_path = doc_file_info.dir().path()

    else:
        doc_dir_path = doc_path

    if len(doc_dir_path) > 0:
        reg_config = RegistryConfig()
        reg_config.write({LOCAL_SOURCE_DOC:doc_dir_path})
コード例 #18
0
ファイル: Upload.py プロジェクト: matthewblain/qgis-cartodb
    def zipLayer(self, layer):
        filePath = layer.dataProvider().dataSourceUri()
        if filePath.find('|') != -1:
            filePath = filePath[0:filePath.find('|')]

        file = QFile(filePath)
        fileInfo = QFileInfo(file)

        dirName = fileInfo.dir().absolutePath()
        fileName = fileInfo.completeBaseName()

        tempdir = tempfile.tempdir
        if tempdir is None:
            tempdir = tempfile.mkdtemp()

        zipPath = os.path.join(tempdir, layer.name() + '.zip')
        zipFile = zipfile.ZipFile(zipPath, 'w')

        if layer.storageType() == 'ESRI Shapefile':
            for suffix in ['.shp', '.dbf', '.prj', '.shx']:
                if os.path.exists(os.path.join(dirName, fileName + suffix)):
                    zipFile.write(os.path.join(dirName, fileName + suffix), fileName + suffix, zipfile.ZIP_DEFLATED)
        elif layer.storageType() == 'GeoJSON':
            zipFile.write(filePath, layer.name() + '.geojson', zipfile.ZIP_DEFLATED)
        else:
            geoJsonName = os.path.join(tempfile.tempdir, layer.name())
            error = QgsVectorFileWriter.writeAsVectorFormat(layer, geoJsonName, "utf-8", None, "GeoJSON")
            if error == QgsVectorFileWriter.NoError:
                zipFile.write(geoJsonName + '.geojson', layer.name() + '.geojson', zipfile.ZIP_DEFLATED)

        '''
        elif layer.storageType() == 'LIBKML':
            kmlName = os.path.join(tempfile.tempdir, layer.name())
            error = QgsVectorFileWriter.writeAsVectorFormat(layer, kmlName, "utf-8", None, "GeoJSON")
            if error == QgsVectorFileWriter.NoError:
                zipFile.write(kmlName + '.geojson', layer.name() + '.geojson', zipfile.ZIP_DEFLATED)
        '''
        zipFile.close()
        return zipPath
コード例 #19
0
ファイル: FileCommands.py プロジェクト: nexdatas/configtool
    def redo(self):
        if self._cp is None:
            self._cp = self.receiver.componentList.currentListElement()
        if self._cp is None:
            QMessageBox.warning(self.receiver, "Component not selected",
                                "Please select one of the components")
        else:
            if self._cp.instance is not None:
                self._pathFile = self._cp.instance.getNewName()
                fi = QFileInfo(self._pathFile)
                self.name = unicode(fi.fileName())
                if self.name[-4:] == '.xml':
                    self.name = self.name[:-4]
                self.directory = unicode(fi.dir().path())
                self._cp.instance.name = self.name
                self._cp.instance.directory = self.directory

        if hasattr(self._cp, "id"):
            self.receiver.componentList.populateElements(self._cp.id)
        else:
            self.receiver.componentList.populateElements()
        logger.debug("EXEC componentSaveAs")
コード例 #20
0
ファイル: Upload.py プロジェクト: fgcartographix/qgis-cartodb
    def zipLayer(self, layer):
        filePath = layer.dataProvider().dataSourceUri()
        if filePath.find('|') != -1:
            filePath = filePath[0:filePath.find('|')]

        file = QFile(filePath)
        fileInfo = QFileInfo(file)

        dirName = fileInfo.dir().absolutePath()
        fileName = fileInfo.completeBaseName()
        zipPath = os.path.join(tempfile.tempdir, layer.name() + '.zip')
        zipFile = zipfile.ZipFile(zipPath, 'w')

        if os.path.exists(os.path.join(dirName, fileName + '.shp')):
            zipFile.write(os.path.join(dirName, fileName + '.shp'), fileName + '.shp', zipfile.ZIP_DEFLATED)
        if os.path.exists(os.path.join(dirName, fileName + '.dbf')):
            zipFile.write(os.path.join(dirName, fileName + '.dbf'), fileName + '.dbf', zipfile.ZIP_DEFLATED)
        if os.path.exists(os.path.join(dirName, fileName + '.prj')):
            zipFile.write(os.path.join(dirName, fileName + '.prj'), fileName + '.prj', zipfile.ZIP_DEFLATED)
        if os.path.exists(os.path.join(dirName, fileName + '.shx')):
            zipFile.write(os.path.join(dirName, fileName + '.shx'), fileName + '.shx', zipfile.ZIP_DEFLATED)
        zipFile.close()
        return zipPath
コード例 #21
0
ファイル: doc_generator_dlg.py プロジェクト: aranguren/stdm
    def onGenerate(self):
        """
        Slot raised to initiate the certificate generation process.
        """
        self._notif_bar.clear()
        success_status = True
        config = self.current_config()
        self.last_data_source = config.data_source()
        if config is None:
            self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \
                                            "The entity configuration could not be extracted."))

            return

        #Get selected records and validate
        records = self.tabWidget.currentWidget().entities()

        if self.chk_template_datasource.isChecked():
            records = self._dummy_template_records()

        if len(records) == 0:
            self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \
                                                                          "Please load at least one entity record"))

            return

        if not self._docTemplatePath:
            self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \
                                                                          "Please select a document template to use"))

            return

        documentNamingAttrs = self.lstDocNaming.selectedMappings()

        if self.chkUseOutputFolder.checkState() == Qt.Checked and len(
                documentNamingAttrs) == 0:
            self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \
                                                "Please select at least one field for naming the output document"))

            return

        #Set output file properties
        if self.rbExpImage.isChecked():
            outputMode = DocumentGenerator.Image
            fileExtension = self.cboImageType.currentText()
            saveAsText = "Image File"

        else:
            outputMode = DocumentGenerator.PDF
            fileExtension = "pdf"
            saveAsText = "PDF File"

        #Show save file dialog if not using output folder
        if self.chkUseOutputFolder.checkState() == Qt.Unchecked:
            docDir = source_document_location()

            if self._outputFilePath:
                fileInfo = QFileInfo(self._outputFilePath)
                docDir = fileInfo.dir().path()

            self._outputFilePath = QFileDialog.getSaveFileName(
                self,
                QApplication.translate("DocumentGeneratorDialog",
                                       "Save Document"), docDir,
                "{0} (*.{1})".format(
                    QApplication.translate("DocumentGeneratorDialog",
                                           saveAsText), fileExtension))

            if not self._outputFilePath:
                self._notif_bar.insertErrorNotification(
                    QApplication.translate(
                        "DocumentGeneratorDialog",
                        "Process aborted. No output file was specified."))

                return

            #Include extension in file name
            self._outputFilePath = self._outputFilePath  #+ "." + fileExtension

        else:
            #Multiple files to be generated.
            pass

        self._doc_generator.set_link_field(config.link_field())

        self._doc_generator.clear_attr_value_formatters()

        if not self.chk_template_datasource.isChecked():
            #Apply cell formatters for naming output files
            self._doc_generator.set_attr_value_formatters(config.formatters())

        entity_field_name = "id"

        #Iterate through the selected records
        progressDlg = QProgressDialog(self)
        progressDlg.setMaximum(len(records))

        try:
            QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))

            for i, record in enumerate(records):
                progressDlg.setValue(i)

                if progressDlg.wasCanceled():
                    success_status = False
                    break

                #User-defined location
                if self.chkUseOutputFolder.checkState() == Qt.Unchecked:
                    status, msg = self._doc_generator.run(
                        self._docTemplatePath,
                        entity_field_name,
                        record.id,
                        outputMode,
                        filePath=self._outputFilePath)
                    self._doc_generator.clear_temporary_layers()
                #Output folder location using custom naming
                else:

                    status, msg = self._doc_generator.run(
                        self._docTemplatePath,
                        entity_field_name,
                        record.id,
                        outputMode,
                        dataFields=documentNamingAttrs,
                        fileExtension=fileExtension,
                        data_source=self.ds_entity.name)
                    self._doc_generator.clear_temporary_layers()

                if not status:
                    result = QMessageBox.warning(
                        self,
                        QApplication.translate("DocumentGeneratorDialog",
                                               "Document Generate Error"), msg,
                        QMessageBox.Ignore | QMessageBox.Abort)

                    if result == QMessageBox.Abort:
                        progressDlg.close()
                        success_status = False

                        #Restore cursor
                        QApplication.restoreOverrideCursor()

                        return

                    #If its the last record and user has selected to ignore
                    if i + 1 == len(records):
                        progressDlg.close()
                        success_status = False

                        #Restore cursor
                        QApplication.restoreOverrideCursor()

                        return

                else:
                    progressDlg.setValue(len(records))

            QApplication.restoreOverrideCursor()

            QMessageBox.information(
                self,
                QApplication.translate("DocumentGeneratorDialog",
                                       "Document Generation Complete"),
                QApplication.translate(
                    "DocumentGeneratorDialog",
                    "Document generation has successfully completed."))

        except Exception as ex:
            LOGGER.debug(str(ex))
            err_msg = sys.exc_info()[1]
            QApplication.restoreOverrideCursor()

            QMessageBox.critical(
                self, "STDM",
                QApplication.translate(
                    "DocumentGeneratorDialog",
                    "Error Generating documents - %s" % (err_msg)))
            success_status = False

        #Reset UI
        self.reset(success_status)
コード例 #22
0
 def openDirectory(self):
     '''Fonction permettant d'ouvrir le répertoire'''
     desktopService = QDesktopServices()
     fileInfo = QFileInfo(QFile(self.outFile.fileName()))
     directory = fileInfo.dir()
     desktopService.openUrl(QUrl(directory.path()))
コード例 #23
0
ファイル: doc_generator_dlg.py プロジェクト: gltn/stdm
    def onGenerate(self):
        """
        Slot raised to initiate the certificate generation process.
        """
        self._notif_bar.clear()
        success_status = True
        config = self.current_config()
        self.last_data_source = config.data_source()
        if config is None:
            self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \
                                            "The entity configuration could not be extracted."))
            return
        
        #Get selected records and validate
        records = self.tabWidget.currentWidget().entities()

        if self.chk_template_datasource.isChecked():
            records = self._dummy_template_records()

        if len(records) == 0:
            self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \
                                                                          "Please load at least one entity record"))
            return
        
        if not self._docTemplatePath:
            self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \
                                                                          "Please select a document template to use"))
            return
        
        documentNamingAttrs = self.lstDocNaming.selectedMappings()

        if self.chkUseOutputFolder.checkState() == Qt.Checked and len(documentNamingAttrs) == 0:
            self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \
                                                "Please select at least one field for naming the output document"))

            return
        
        #Set output file properties
        if self.rbExpImage.isChecked():
            outputMode = DocumentGenerator.Image
            fileExtension = self.cboImageType.currentText()
            saveAsText = "Image File"

        else:
            outputMode = DocumentGenerator.PDF 
            fileExtension = "pdf"
            saveAsText = "PDF File"
            
        #Show save file dialog if not using output folder
        if self.chkUseOutputFolder.checkState() == Qt.Unchecked:
            docDir = source_document_location()
            
            if self._outputFilePath:
                fileInfo = QFileInfo(self._outputFilePath)
                docDir = fileInfo.dir().path()
                
            self._outputFilePath = QFileDialog.getSaveFileName(self,
                                                    QApplication.translate("DocumentGeneratorDialog",
                                                    "Save Document"),
                                                    docDir,
                                                    "{0} (*.{1})".format(
                                                    QApplication.translate("DocumentGeneratorDialog",
                                                                          saveAsText),
                                                    fileExtension))
            
            if not self._outputFilePath:
                self._notif_bar.insertErrorNotification(
                    QApplication.translate("DocumentGeneratorDialog",
                                "Process aborted. No output file was specified."))

                return
            
            #Include extension in file name
            self._outputFilePath = self._outputFilePath #+ "." + fileExtension
            
        else:
            #Multiple files to be generated.
            pass

        self._doc_generator.set_link_field(config.link_field())

        self._doc_generator.clear_attr_value_formatters()

        if not self.chk_template_datasource.isChecked():
            #Apply cell formatters for naming output files
            self._doc_generator.set_attr_value_formatters(config.formatters())

        entity_field_name = "id"
        
        #Iterate through the selected records
        progressDlg = QProgressDialog(self)
        progressDlg.setMaximum(len(records))

        try:
            QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))

            for i, record in enumerate(records):
                progressDlg.setValue(i)

                if progressDlg.wasCanceled():
                    success_status = False
                    break

                #User-defined location
                if self.chkUseOutputFolder.checkState() == Qt.Unchecked:
                    status,msg = self._doc_generator.run(self._docTemplatePath, entity_field_name,
                                                  record.id, outputMode,
                                                  filePath = self._outputFilePath)
                    self._doc_generator.clear_temporary_layers()
                #Output folder location using custom naming
                else:

                    status, msg = self._doc_generator.run(self._docTemplatePath, entity_field_name,
                                                    record.id, outputMode,
                                                    dataFields = documentNamingAttrs,
                                                    fileExtension = fileExtension,
                                                    data_source = self.ds_entity.name)
                    self._doc_generator.clear_temporary_layers()

                if not status:
                    result = QMessageBox.warning(self,
                                                 QApplication.translate("DocumentGeneratorDialog",
                                                                        "Document Generate Error"),
                                                 msg, QMessageBox.Ignore | QMessageBox.Abort)

                    if result == QMessageBox.Abort:
                        progressDlg.close()
                        success_status = False

                        #Restore cursor
                        QApplication.restoreOverrideCursor()

                        return

                    #If its the last record and user has selected to ignore
                    if i+1 == len(records):
                        progressDlg.close()
                        success_status = False

                        #Restore cursor
                        QApplication.restoreOverrideCursor()

                        return

                else:
                    progressDlg.setValue(len(records))

            QApplication.restoreOverrideCursor()

            QMessageBox.information(self,
                QApplication.translate("DocumentGeneratorDialog",
                                       "Document Generation Complete"),
                QApplication.translate("DocumentGeneratorDialog",
                                    "Document generation has successfully completed.")
                                    )

        except Exception as ex:
            LOGGER.debug(str(ex))
            err_msg = sys.exc_info()[1]
            QApplication.restoreOverrideCursor()

            QMessageBox.critical(
                self,
                "STDM",
                QApplication.translate(
                    "DocumentGeneratorDialog",
                    "Error Generating documents - %s"%(err_msg)
                )
            )
            success_status = False

        #Reset UI
        self.reset(success_status)
コード例 #24
0
 def onGenerate(self):
     """
     Slot raised to initiate the certificate generation process.
     """
     self._notifBar.clear()
     
     #Validate records
     records = self.personFKMapper.entities()
     if records == None:
         self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \
                                                                       "Please select at least one person record"))
         return
     
     if self._docTemplatePath == "":
         self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \
                                                                       "Please select a document template to use"))
         return
     
     documentNamingAttrs = self.lstDocNaming.selectedMappings()
     
     if self.chkUseOutputFolder.checkState() == Qt.Checked and len(documentNamingAttrs) == 0:
         self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \
                                                                       "Please select at least one field for naming the output document."))
         return
     
     #Set output file properties
     if self.rbExpImage.isChecked():
         outputMode = DocumentGenerator.Image
         fileExtension = self.cboImageType.currentText()
         saveAsText = "Image File"
     else:
         outputMode = DocumentGenerator.PDF 
         fileExtension = "pdf"
         saveAsText = "PDF File"
         
     #Show save file dialog if not using output folder
     if self.chkUseOutputFolder.checkState() == Qt.Unchecked:
         docDir = ""
         
         if self._outputFilePath != "":
             fileInfo = QFileInfo(self._outputFilePath)
             docDir = fileInfo.dir().path()
             
         self._outputFilePath = QFileDialog.getSaveFileName(self,QApplication.translate("PersonDocumentGenerator", \
                                                                       "Save Document"), \
                                                            docDir, \
                                                            "{0} (*.{1})".format(QApplication.translate("PersonDocumentGenerator", \
                                                                       saveAsText), \
                                                                                fileExtension))
         
         if self._outputFilePath == "":
             self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \
                                                                       "Process aborted. No output file was specified."))
             return
         
         #Include extension in file name
         self._outputFilePath = self._outputFilePath #+ "." + fileExtension
         
     else:
         #Multiple files to be generated.
         pass
             
     docGenerator = DocumentGenerator(self._iface,self)
     #Apply cell formatters for naming output files
     docGenerator.setAttrValueFormatters(self.personFKMapper.cellFormatters())
     entityFieldName = "id"
     
     #Iterate through the selected records
     progressDlg = QProgressDialog(self)
     progressDlg.setMaximum(len(records))
     
     try:
     
         for i,record in enumerate(records):
             progressDlg.setValue(i)
             
             if progressDlg.wasCanceled():
                 break
             
             #User-defined location
             if self.chkUseOutputFolder.checkState() == Qt.Unchecked:
                 status,msg = docGenerator.run(self._docTemplatePath,entityFieldName,record.id,outputMode, \
                                                           filePath = self._outputFilePath)
             
             #Output folder location using custom naming  
             
             else:
                 status,msg = docGenerator.run(self._docTemplatePath,entityFieldName,record.id,outputMode, \
                                                           dataFields = documentNamingAttrs,fileExtension = fileExtension, \
                                                           dbmodel = self._dbModel)
             
             if not status:
                 result = QMessageBox.warning(self, QApplication.translate("PersonDocumentGenerator","Document Generate Error"), 
                                              msg, 
                                              QMessageBox.Ignore|QMessageBox.Abort)
                 
                 if result == QMessageBox.Abort:
                     progressDlg.close()
                     return
                 
             else:
                 progressDlg.setValue(len(records))
                 
                 QMessageBox.information(self, 
                                     QApplication.translate("PersonDocumentGenerator","Document Generation Complete"), 
                                     QApplication.translate("PersonDocumentGenerator","Document generation has successfully completed.")
                                     )
     except Exception as ex:
         QMessageBox.information(self,"STDM",QApplication.translate("PersonDocumentGenerator","Error Generating documents %s"%(str(ex.message)))) 
         return
     #Reset UI
     self.reset()
コード例 #25
0
 def onGenerate(self):
     """
     Slot raised to initiate the certificate generation process.
     """
     self._notifBar.clear()
     
     #Validate records
     records = self.personFKMapper.entities()
     if records == None:
         self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \
                                                                       "Please select at least one person record"))
         return
     
     if self._docTemplatePath == "":
         self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \
                                                                       "Please select a document template to use"))
         return
     
     documentNamingAttrs = self.lstDocNaming.selectedMappings()
     
     if self.chkUseOutputFolder.checkState() == Qt.Checked and len(documentNamingAttrs) == 0:
         self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \
                                                                       "Please select at least one field for naming the output document."))
         return
     
     #Set output file properties
     if self.rbExpImage.isChecked():
         outputMode = DocumentGenerator.Image
         fileExtension = self.cboImageType.currentText()
         saveAsText = "Image File"
     else:
         outputMode = DocumentGenerator.PDF 
         fileExtension = "pdf"
         saveAsText = "PDF File"
         
     #Show save file dialog if not using output folder
     if self.chkUseOutputFolder.checkState() == Qt.Unchecked:
         docDir = ""
         
         if self._outputFilePath != "":
             fileInfo = QFileInfo(self._outputFilePath)
             docDir = fileInfo.dir().path()
             
         self._outputFilePath = QFileDialog.getSaveFileName(self,QApplication.translate("PersonDocumentGenerator", \
                                                                       "Save Document"), \
                                                            docDir, \
                                                            "{0} (*.{1})".format(QApplication.translate("PersonDocumentGenerator", \
                                                                       saveAsText), \
                                                                                fileExtension))
         
         if self._outputFilePath == "":
             self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \
                                                                       "Process aborted. No output file was specified."))
             return
         
         #Include extension in file name
         self._outputFilePath = self._outputFilePath #+ "." + fileExtension
         
     else:
         #Multiple files to be generated.
         pass
             
     docGenerator = DocumentGenerator(self._iface,self)
     #Apply cell formatters for naming output files
     docGenerator.setAttrValueFormatters(self.personFKMapper.cellFormatters())
     entityFieldName = "id"
     
     #Iterate through the selected records
     progressDlg = QProgressDialog(self)
     progressDlg.setMaximum(len(records))
     
     for i,record in enumerate(records):
         progressDlg.setValue(i)
         
         if progressDlg.wasCanceled():
             break
         
         #User-defined location
         if self.chkUseOutputFolder.checkState() == Qt.Unchecked:
             status,msg = docGenerator.run(self._docTemplatePath,entityFieldName,record.id,outputMode, \
                                                       filePath = self._outputFilePath)
         
         #Output folder location using custom naming  
         else:
             status,msg = docGenerator.run(self._docTemplatePath,entityFieldName,record.id,outputMode, \
                                                       dataFields = documentNamingAttrs,fileExtension = fileExtension, \
                                                       dbmodel = Farmer)
         
         if not status:
             result = QMessageBox.warning(self, QApplication.translate("PersonDocumentGenerator","Document Generate Error"), 
                                          msg, 
                                          QMessageBox.Ignore|QMessageBox.Abort)
             
             if result == QMessageBox.Abort:
                 progressDlg.close()
                 return
             
         else:
             progressDlg.setValue(len(records))
             
             QMessageBox.information(self, 
                                 QApplication.translate("PersonDocumentGenerator","Document Generation Complete"), 
                                 QApplication.translate("PersonDocumentGenerator","Document generation has successfully completed.")
                                 )
     
     #Reset UI
     self.reset()