コード例 #1
0
    def testPublishLayersDialog(self):
        pt1 = layers.resolveLayer(PT1)
        pt2 = layers.resolveLayer(PT2)
        dialog = PublishLayersDialog(self.catalogs, [pt1,pt2])
        cancelWidget = dialog.buttonBox.button(dialog.buttonBox.Cancel)
        QTest.mouseClick(cancelWidget, Qt.LeftButton)
        self.assertIsNone(dialog.topublish)

        cat = self.catalogs.values()[0]
        for idx, ws in enumerate(cat.get_workspaces()):
            if ws.name == WORKSPACE:
                wsIdx = idx
            if ws.name == WORKSPACEB:
                wsIdxB = idx
        dialog = PublishLayersDialog(self.catalogs, [pt1,pt2])
        self.assertEquals(4, dialog.table.columnCount())
        self.assertEquals(2, dialog.table.rowCount())
        dialog.table.cellWidget(0, 1).setCurrentIndex(wsIdx)
        dialog.table.cellWidget(1, 1).setCurrentIndex(wsIdxB)
        okWidget = dialog.buttonBox.button(dialog.buttonBox.Ok)
        QTest.mouseClick(okWidget, Qt.LeftButton)
        self.assertIsNotNone(dialog.topublish)
        self.assertEquals(WORKSPACE, dialog.topublish[0][2].name)
        self.assertEquals(WORKSPACEB, dialog.topublish[1][2].name)

        dialog = PublishLayersDialog({"catalog": cat, "catalog2:": cat}, [pt1,pt2])
        self.assertEquals(5, dialog.table.columnCount())
        self.assertEquals(2, dialog.table.rowCount())
        dialog.table.cellWidget(0, 2).setCurrentIndex(wsIdx)
        dialog.table.cellWidget(1, 2).setCurrentIndex(wsIdxB)
        okWidget = dialog.buttonBox.button(dialog.buttonBox.Ok)
        QTest.mouseClick(okWidget, Qt.LeftButton)
        self.assertIsNotNone(dialog.topublish)
        self.assertEquals(WORKSPACE, dialog.topublish[0][2].name)
        self.assertEquals(WORKSPACEB, dialog.topublish[1][2].name)
コード例 #2
0
ファイル: guitests.py プロジェクト: maduhu/suite-qgis-plugin
    def testPublishLayersDialog(self):
        pt1 = layers.resolveLayer(PT1)
        pt2 = layers.resolveLayer(PT2)
        dialog = PublishLayersDialog(self.catalogs, [pt1,pt2])
        cancelWidget = dialog.buttonBox.button(dialog.buttonBox.Cancel)
        QTest.mouseClick(cancelWidget, Qt.LeftButton)
        self.assertIsNone(dialog.topublish)

        cat = self.catalogs.values()[0]
        for idx, ws in enumerate(cat.get_workspaces()):
            if ws.name == WORKSPACE:
                wsIdx = idx
            if ws.name == WORKSPACEB:
                wsIdxB = idx
        dialog = PublishLayersDialog(self.catalogs, [pt1,pt2])
        self.assertEquals(4, dialog.table.columnCount())
        self.assertEquals(2, dialog.table.rowCount())
        dialog.table.cellWidget(0, 1).setCurrentIndex(wsIdx)
        dialog.table.cellWidget(1, 1).setCurrentIndex(wsIdxB)
        okWidget = dialog.buttonBox.button(dialog.buttonBox.Ok)
        QTest.mouseClick(okWidget, Qt.LeftButton)
        self.assertIsNotNone(dialog.topublish)
        self.assertEquals(WORKSPACE, dialog.topublish[0][2].name)
        self.assertEquals(WORKSPACEB, dialog.topublish[1][2].name)

        dialog = PublishLayersDialog({"catalog": cat, "catalog2:": cat}, [pt1,pt2])
        self.assertEquals(5, dialog.table.columnCount())
        self.assertEquals(2, dialog.table.rowCount())
        dialog.table.cellWidget(0, 2).setCurrentIndex(wsIdx)
        dialog.table.cellWidget(1, 2).setCurrentIndex(wsIdxB)
        okWidget = dialog.buttonBox.button(dialog.buttonBox.Ok)
        QTest.mouseClick(okWidget, Qt.LeftButton)
        self.assertIsNotNone(dialog.topublish)
        self.assertEquals(WORKSPACE, dialog.topublish[0][2].name)
        self.assertEquals(WORKSPACEB, dialog.topublish[1][2].name)
コード例 #3
0
 def testImportMultipleLayers(self):
     importToPostGIS(self.explorer, self.conn,
                     [layers.resolveLayer(PT1),
                      layers.resolveLayer(PT2)], PUBLIC_SCHEMA, None, False,
                     False)
     schema = Schema(self.conn, PUBLIC_SCHEMA)
     self.assertIsNotNone(self.getTable(schema, PT1))
     self.assertIsNotNone(self.getTable(schema, PT2))
コード例 #4
0
 def testRasterLayerRoundTrip(self):
     self.cat.publishLayer(DEM, self.ws, name=DEM)
     self.assertIsNotNone(self.cat.catalog.get_layer(DEM))
     self.cat.addLayerToProject(DEM, DEM2)
     layer = layers.resolveLayer(DEM2)
     QgsMapLayerRegistry.instance().removeMapLayer(layer.id())
     self.cat.catalog.delete(self.cat.catalog.get_layer(DEM), recurse=True)
コード例 #5
0
 def testRasterLayerRoundTrip(self):
     self.cat.publishLayer(DEM, self.ws, name = DEM)
     self.assertIsNotNone(self.cat.catalog.get_layer(DEM))
     self.cat.addLayerToProject(DEM, DEM2)
     layer = layers.resolveLayer(DEM2)
     QgsMapLayerRegistry.instance().removeMapLayer(layer.id())
     self.cat.catalog.delete(self.cat.catalog.get_layer(DEM), recurse = True)
コード例 #6
0
ファイル: catalog.py プロジェクト: menegon/suite-qgis-plugin
 def upload(self, layer, workspace=None, overwrite=True, name=None):        
     '''uploads the specified layer'''  
           
     if isinstance(layer, basestring):
         layer = layers.resolveLayer(layer)     
                 
     name = name if name is not None else layer.name()
     title = name
     name = name.replace(" ", "_")
                 
     try:
         settings = QSettings()
         restApi = bool(settings.value("/OpenGeo/Settings/GeoServer/UseRestApi", True, bool))   
         restApi = True # importer api is disabled for now         
         if layer.type() == layer.RasterLayer:                
             path = self.getDataFromLayer(layer)
             if restApi:
                 self.catalog.create_coveragestore(name,
                                           path,
                                           workspace=workspace,
                                           overwrite=overwrite)                            
             else:                    
                 session = self.client.upload(path)
                 session.commit()      
             
         elif layer.type() == layer.VectorLayer:
             provider = layer.dataProvider()
             if provider.name() == 'postgres':                                        
                 connName = self.getConnectionNameFromLayer(layer)
                 uri = QgsDataSourceURI(provider.dataSourceUri())                                                                     
                 self.catalog.create_pg_featurestore(connName,                                           
                                        workspace = workspace,
                                        overwrite = overwrite,
                                        host = uri.host(),
                                        database = uri.database(),
                                        schema = uri.schema(),
                                        port = uri.port(),
                                        user = uri.username(),
                                        passwd = uri.password())  
                 self.catalog.create_pg_featuretype(uri.table(), connName, workspace, layer.crs().authid())
             else:   
                 path = self.getDataFromLayer(layer)
                 if restApi:  
                     try:                  
                         self.catalog.create_shp_featurestore(name,
                                           path,
                                           workspace=workspace,
                                           overwrite=overwrite)                                                    
                     except Exception, e:
                         if utils.isWindows():
                             #a WindowsError might be thrown by the create_shp_featurestore method 
                                 #when trying to unlink the temp zip file. We ignore it
                             if not isinstance(e, WindowsError):
                                 raise e
                         else:                        
                             raise e
                 else:
                     shpFile = path['shp']                        
                     session = self.client.upload(shpFile)
                     session.commit()                          
コード例 #7
0
    def publishLayer (self, layer, workspace=None, overwrite=True, name=None,
                           abstract=None, permissions=None, keywords=()):
        '''
        Publishes a QGIS layer. 
        It creates the corresponding store and the layer itself.
        If a pre-upload hook is set, its runs it and publishes the resulting layer  
        
        layer: the layer to publish, whether as a QgsMapLayer object or its name in the QGIS TOC.
            
        workspace: the workspace to publish to. USes the default project if not passed 
        or None 
        
        name: the name for the published layer. Uses the QGIS layer name if not passed 
        or None
           
        params: a dict with additional configuration parameters if needed
        
        '''
        
        if isinstance(layer, basestring):
            layer = layers.resolveLayer(layer)    
        
        name = name if name is not None else layer.name()
          
        sld = self.publishStyle(layer, overwrite, name)
            
        layer = self.preprocess(layer)            
        self.upload(layer, workspace, overwrite, name)  

        if sld is not None:
            #assign style to created store  
            publishing = self.catalog.get_layer(name)        
            publishing.default_style = self.catalog.get_style(name)
            self.catalog.save(publishing)
コード例 #8
0
 def testVectorLayerRoundTrip(self):
     self.cat.publishLayer(PT1, self.ws, name=PT1)
     self.assertIsNotNone(self.cat.catalog.get_layer(PT1))
     self.cat.addLayerToProject(PT1, PT1)
     layer = layers.resolveLayer(PT1)
     QgsMapLayerRegistry.instance().removeMapLayer(layer.id())
     self.cat.catalog.delete(self.cat.catalog.get_layer(PT1), recurse=True)
コード例 #9
0
 def testVectorLayerRoundTrip(self):
     self.cat.publishLayer(PT1, self.ws, name = PT1)
     self.assertIsNotNone(self.cat.catalog.get_layer(PT1))
     self.cat.addLayerToProject(PT1, PT1)
     layer = layers.resolveLayer(PT1)
     QgsMapLayerRegistry.instance().removeMapLayer(layer.id())
     self.cat.catalog.delete(self.cat.catalog.get_layer(PT1), recurse = True)
コード例 #10
0
    def upload(self, layer, workspace=None, overwrite=True, name=None):        
        '''uploads the specified layer'''  

        if isinstance(layer, basestring):
            layer = layers.resolveLayer(layer)     

        name = name if name is not None else layer.name()
        title = name
        name = name.replace(" ", "_")

        settings = QSettings()
        restApi = bool(settings.value("/OpenGeo/Settings/GeoServer/UseRestApi", True, bool))

        if layer.type() not in (layer.RasterLayer, layer.VectorLayer):
            msg = layer.name() + ' is not a valid raster or vector layer'
            raise Exception(msg)

        provider = layer.dataProvider()
        try:
            if provider.name() == 'postgres':
                self._publishExisting(layer, workspace, overwrite)
            elif restApi:
                self._uploadRest(layer, workspace, overwrite, name)
            else:
                self._uploadImporter(layer, workspace, overwrite, name)
        except UploadError, e:
            msg = ('Could not save the layer %s, there was an upload '
                   'error: %s' % (layer.name(), str(e)))
            e.args = (msg,)
            raise
コード例 #11
0
 def testImportSingleLayerAsSingleGeometries(self):
     importToPostGIS(self.explorer, self.conn, [layers.resolveLayer(PT1)],
                     PUBLIC_SCHEMA, PT1, False, True)
     schema = Schema(self.conn, PUBLIC_SCHEMA)
     table = self.getTable(schema, PT1)
     self.assertIsNotNone(table)
     self.assertEquals(-1, table.geomtype.find("MULTI"))
コード例 #12
0
    def upload(self, layer, workspace=None, overwrite=True, name=None):
        '''uploads the specified layer'''

        if isinstance(layer, basestring):
            layer = layers.resolveLayer(layer)

        name = name if name is not None else layer.name()
        title = name
        name = name.replace(" ", "_")

        settings = QSettings()
        restApi = bool(
            settings.value("/OpenGeo/Settings/GeoServer/UseRestApi", True,
                           bool))

        if layer.type() not in (layer.RasterLayer, layer.VectorLayer):
            msg = layer.name() + ' is not a valid raster or vector layer'
            raise Exception(msg)

        provider = layer.dataProvider()
        try:
            if provider.name() == 'postgres':
                self._publishExisting(layer, workspace, overwrite)
            elif restApi:
                self._uploadRest(layer, workspace, overwrite, name)
            else:
                self._uploadImporter(layer, workspace, overwrite, name)
        except UploadError, e:
            msg = ('Could not save the layer %s, there was an upload '
                   'error: %s' % (layer.name(), str(e)))
            e.args = (msg, )
            raise
コード例 #13
0
 def testDeleteTable(self):                
     importToPostGIS(self.explorer, self.conn, [layers.resolveLayer(PT1)], PUBLIC_SCHEMA, PT1, False, False); 
     self.getPGConnectionItem().refreshContent(self.explorer)       
     tableItem = self.getPGTableItem(PT1)
     tableItem.deleteTable(self.explorer)
     tableItem = self.getPGTableItem(PT1)                    
     self.assertIsNone(tableItem)        
コード例 #14
0
 def testDeleteTable(self):
     importToPostGIS(self.explorer, self.conn, [layers.resolveLayer(PT1)],
                     PUBLIC_SCHEMA, PT1, False, False)
     self.getPGConnectionItem().refreshContent(self.explorer)
     tableItem = self.getPGTableItem(PT1)
     tableItem.deleteTable(self.explorer)
     tableItem = self.getPGTableItem(PT1)
     self.assertIsNone(tableItem)
コード例 #15
0
 def okPressed(self):
     if self.showLayerSelector:
         self.layer = layers.resolveLayer(self.layerBox.currentText())
     self.add = self.addCheck.isChecked()
     self.dest = unicode(self.destBox.text())
     if self.dest == "":
         self.dest = None
     self.ok = True
     self.close()
コード例 #16
0
 def testDropPGTableInWorkspacesItem(self):
     importToPostGIS(self.explorer, self.conn, [layers.resolveLayer(PT1)], PUBLIC_SCHEMA, PT1, False, False);
     self.getPGConnectionItem().refreshContent(self.explorer)
     tableItem = self.getPGTableItem(PT1)
     self.assertIsNotNone(tableItem)
     wsItem = self.getWorkspacesItem()
     wsItem.acceptDroppedItems(self.tree, self.explorer, [tableItem])
     layer = self.cat.get_layer(PT1)
     self.assertIsNotNone(layer)
     self.cat.delete(self.cat.get_layer(PT1), recurse = True)
コード例 #17
0
 def testDropPGTableInWorkspacesItem(self):
     importToPostGIS(self.explorer, self.conn, [layers.resolveLayer(PT1)], PUBLIC_SCHEMA, PT1, False, False); 
     self.getPGConnectionItem().refreshContent(self.explorer)
     tableItem = self.getPGTableItem(PT1)
     self.assertIsNotNone(tableItem)
     wsItem = self.getWorkspacesItem()        
     wsItem.acceptDroppedItems(self.tree, self.explorer, [tableItem])
     layer = self.cat.get_layer(PT1)
     self.assertIsNotNone(layer) 
     self.cat.delete(self.cat.get_layer(PT1), recurse = True)
コード例 #18
0
ファイル: catalog.py プロジェクト: garnertb/suite-qgis-plugin
 def upload(self, layer, workspace=None, overwrite=True, name=None,
                        abstract=None, permissions=None, keywords=()):        
     '''uploads the specified layer'''  
           
     if isinstance(layer, basestring):
         layer = layers.resolveLayer(layer)     
         
     name = name if name is not None else layer.name()
                 
     try:
         settings = QSettings()
         restApi = bool(settings.value("/OpenGeo/Settings/GeoServer/UseRestApi", True, bool))
         if layer.type() == layer.RasterLayer:                
             path = self.getDataFromLayer(layer)
             if restApi:
                 self.catalog.create_coveragestore(name,
                                           path,
                                           workspace=workspace,
                                           overwrite=overwrite)                            
             else:
                 self.client.upload(path)
             
         elif layer.type() == layer.VectorLayer:
             provider = layer.dataProvider()
             if provider.name() == 'postgres':                                        
                 connName = self.getConnectionNameFromLayer(layer)
                 uri = QgsDataSourceURI(provider.dataSourceUri())                                                                     
                 self.catalog.create_pg_featurestore(connName,                                           
                                        workspace = workspace,
                                        overwrite = overwrite,
                                        host = uri.host(),
                                        database = uri.database(),
                                        schema = uri.schema(),
                                        port = uri.port(),
                                        user = uri.username(),
                                        passwd = uri.password())  
                 self.catalog.create_pg_featuretype(uri.table(), connName, workspace, layer.crs().authid())
             else:   
                 path = self.getDataFromLayer(layer)
                 if restApi:                    
                     self.catalog.create_shp_featurestore(name,
                                           path,
                                           workspace=workspace,
                                           overwrite=overwrite)
                 else:
                     self.client.upload(path['shp'])                          
                 
         else:
             msg = layer.name() + ' is not a valid raster or vector layer'
             raise Exception(msg)
     except UploadError, e:
         msg = ('Could not save the layer %s, there was an upload '
                'error: %s' % (layer.name(), str(e)))
         e.args = (msg,)
         raise
コード例 #19
0
    def publishLayer(self,
                     layer,
                     workspace=None,
                     overwrite=True,
                     name=None,
                     storename=None,
                     title=None):
        '''
        Publishes a QGIS layer.
        It creates the corresponding store and the layer itself.
        If a pre-upload hook is set, its runs it and publishes the resulting layer

        layer: the layer to publish, whether as a QgsMapLayer object or its name in the QGIS TOC.

        workspace: the workspace to publish to. USes the default workspace if not passed
        or None

        name: the name for the published layer. Uses the QGIS layer name if not passed
        or None

        storename: the name for layer's store, if different than layer name, e.g.
        when creating a PG data store

        '''

        if isinstance(layer, basestring):
            layer = layers.resolveLayer(layer)

        name = name or layer.name()
        title = title or name
        name = xmlNameFixUp(name)

        gslayer = self.catalog.get_layer(name)
        if gslayer is not None and not overwrite:
            return

        sld = self.publishStyle(layer, overwrite, name)

        layer = self.preprocess(layer)

        if storename is not None:
            storename = xmlNameFixUp(storename)
        self.upload(layer,
                    workspace,
                    overwrite,
                    name,
                    storename=storename,
                    title=title)

        if sld is not None:
            #assign style to created store
            publishing = self.catalog.get_layer(name)
            publishing.default_style = self.catalog.get_style(name)
            self.catalog.save(publishing)
コード例 #20
0
 def publishStyle(self, layer, overwrite = True, name = None):
     '''
     Publishes the style of a given layer style in the specified catalog. If the overwrite parameter is True, 
     it will overwrite a style with that name in case it exists
     '''        
     if isinstance(layer, basestring):
         layer = layers.resolveLayer(layer)         
     sld = getGsCompatibleSld(layer) 
     if sld is not None:       
         name = name if name is not None else layer.name()            
         self.catalog.create_style(name, sld, overwrite)
     return sld
コード例 #21
0
 def testPreuploadVectorHook(self):
     settings = QSettings()
     oldHookFile = str(settings.value("/OpenGeo/Settings/GeoServer/PreuploadVectorHook", ""))
     hookFile = os.path.join(os.path.dirname(__file__), "resources", "vector_hook.py")
     settings.setValue("/OpenGeo/Settings/GeoServer/PreuploadVectorHook", hookFile)        
     self.cat.publishLayer(PT1, self.ws, name = HOOK)
     self.assertIsNotNone(self.cat.catalog.get_layer(HOOK))
     self.cat.addLayerToProject(HOOK)
     layer = layers.resolveLayer(HOOK)
     self.assertEqual(1, layer.featureCount())
     QgsMapLayerRegistry.instance().removeMapLayer(layer.id())         
     settings.setValue("/OpenGeo/Settings/GeoServer/PreuploadVectorHook", oldHookFile)
     self.cat.catalog.delete(self.cat.catalog.get_layer(HOOK), recurse = True)   
コード例 #22
0
    def publishStyle(self, layer, overwrite=True, name=None):
        '''
        Publishes the style of a given layer style in the specified catalog. If the overwrite parameter is True, 
        it will overwrite a style with that name in case it exists
        '''

        if isinstance(layer, basestring):
            layer = layers.resolveLayer(layer)
        sld = getGsCompatibleSld(layer)
        if sld is not None:
            name = name if name is not None else layer.name()
            name = name.replace(" ", "_")
            self.catalog.create_style(name, sld, overwrite)
        return sld
コード例 #23
0
 def testPreuploadVectorHook(self):
     if not catalog.processingOk:
         print 'skipping testPreuploadVectorHook, processing not installed'
         return
     settings = QSettings()
     oldHookFile = str(settings.value("/OpenGeo/Settings/GeoServer/PreuploadVectorHook", ""))
     hookFile = os.path.join(os.path.dirname(__file__), "resources", "vector_hook.py")
     settings.setValue("/OpenGeo/Settings/GeoServer/PreuploadVectorHook", hookFile)
     self.cat.publishLayer(PT1, self.ws, name = HOOK)
     self.assertIsNotNone(self.cat.catalog.get_layer(HOOK))
     self.cat.addLayerToProject(HOOK)
     layer = layers.resolveLayer(HOOK)
     self.assertEqual(1, layer.featureCount())
     QgsMapLayerRegistry.instance().removeMapLayer(layer.id())
     settings.setValue("/OpenGeo/Settings/GeoServer/PreuploadVectorHook", oldHookFile)
     self.cat.catalog.delete(self.cat.catalog.get_layer(HOOK), recurse = True)
コード例 #24
0
ファイル: catalog.py プロジェクト: GeoCat/qgis-suite-plugin
    def publishLayer (self, layer, workspace=None, overwrite=True, name=None,
                      storename=None, title=None):
        '''
        Publishes a QGIS layer.
        It creates the corresponding store and the layer itself.
        If a pre-upload hook is set, its runs it and publishes the resulting layer

        layer: the layer to publish, whether as a QgsMapLayer object or its name in the QGIS TOC.

        workspace: the workspace to publish to. USes the default workspace if not passed
        or None

        name: the name for the published layer. Uses the QGIS layer name if not passed
        or None

        storename: the name for layer's store, if different than layer name, e.g.
        when creating a PG data store

        '''

        if isinstance(layer, basestring):
            layer = layers.resolveLayer(layer)

        name = name or layer.name()
        title = title or name
        name = xmlNameFixUp(name)

        gslayer = self.catalog.get_layer(name)
        if gslayer is not None and not overwrite:
            return

        sld = self.publishStyle(layer, overwrite, name)

        layer = self.preprocess(layer)

        if storename is not None:
            storename = xmlNameFixUp(storename)
        self.upload(layer, workspace, overwrite, name,
                    storename=storename, title=title)

        if sld is not None:
            #assign style to created store
            publishing = self.catalog.get_layer(name)
            publishing.default_style = self.catalog.get_style(name)
            self.catalog.save(publishing)
コード例 #25
0
ファイル: catalog.py プロジェクト: garnertb/suite-qgis-plugin
 def publishLayer (self, layer, workspace=None, overwrite=True, name=None,
                        abstract=None, permissions=None, keywords=()):
     '''
     Publishes a QGIS layer. 
     It creates the corresponding store and the layer itself 
     If the layer is a group layer, it publishes all the layers individually and then creates 
     the layer group in the server
     
     layer: the layer to publish, whether as a QgsMapLayer object or its name in the QGIS TOC.
         
     catalog. A catalog object with information about the URL of the service to publish to.
     
     workspace: the workspace to publish to. USes the default project if not passed 
     or None 
     
     name: the name for the published layer. Uses the QGIS layer name if not passed 
     or None
        
     params: a dict with additional configuration parameters if needed
     
     '''
     
     if isinstance(layer, basestring):
         layer = layers.resolveLayer(layer)          
     
     name = name if name is not None else layer.name()
       
     sld = self.publishStyle(layer, overwrite, name)
         
     self.upload(layer, workspace, overwrite, name)      
 
     if sld is not None:
         #assign style to created store  
         publishing = self.catalog.get_layer(name)        
         publishing.default_style = self.catalog.get_style(name)
         self.catalog.save(publishing)
コード例 #26
0
 def setUpClass(cls):
     cls.explorer = OpenGeoExplorer(singletab = True)
     cls.conn1 = getPostgresConnection("conn1")
     cls.conn2 = getPostgresConnection("conn2")
     cls.toImport = [layers.resolveLayer(PT1)]
コード例 #27
0
 def testImportSingleLayerAsSingleGeometries(self):
     importToPostGIS(self.explorer, self.conn, [layers.resolveLayer(PT1)], PUBLIC_SCHEMA, PT1, False, True);        
     schema = Schema(self.conn, PUBLIC_SCHEMA)        
     table = self.getTable(schema, PT1)
     self.assertIsNotNone(table)
     self.assertEquals(-1, table.geomtype.find("MULTI"))        
コード例 #28
0
 def okPressed(self):                        
     self.message = self.text.toPlainText()
     if self.showLayerSelector:
         self.layer = layers.resolveLayer(self.layerBox.currentText())        
     self.close()
コード例 #29
0
    def upload(self, layer, workspace=None, overwrite=True, name=None):
        '''uploads the specified layer'''

        if isinstance(layer, basestring):
            layer = layers.resolveLayer(layer)

        name = name if name is not None else layer.name()
        title = name
        name = name.replace(" ", "_")

        try:
            settings = QSettings()
            restApi = bool(
                settings.value("/OpenGeo/Settings/GeoServer/UseRestApi", True,
                               bool))
            restApi = True  # importer api is disabled for now
            if layer.type() == layer.RasterLayer:
                path = self.getDataFromLayer(layer)
                if restApi:
                    self.catalog.create_coveragestore(name,
                                                      path,
                                                      workspace=workspace,
                                                      overwrite=overwrite)
                else:
                    session = self.client.upload(path)
                    session.commit()

            elif layer.type() == layer.VectorLayer:
                provider = layer.dataProvider()
                if provider.name() == 'postgres':
                    connName = self.getConnectionNameFromLayer(layer)
                    uri = QgsDataSourceURI(provider.dataSourceUri())
                    self.catalog.create_pg_featurestore(
                        connName,
                        workspace=workspace,
                        overwrite=overwrite,
                        host=uri.host(),
                        database=uri.database(),
                        schema=uri.schema(),
                        port=uri.port(),
                        user=uri.username(),
                        passwd=uri.password())
                    self.catalog.create_pg_featuretype(uri.table(), connName,
                                                       workspace,
                                                       layer.crs().authid())
                else:
                    path = self.getDataFromLayer(layer)
                    if restApi:
                        try:
                            self.catalog.create_shp_featurestore(
                                name,
                                path,
                                workspace=workspace,
                                overwrite=overwrite)
                        except WindowsError:
                            #this might be thrown by the create_shp_featurestore method
                            #when trying to unlink the temp zip file
                            pass
                        except Exception, e:
                            raise e
                    else:
                        shpFile = path['shp']
                        session = self.client.upload(shpFile)
                        session.commit()
コード例 #30
0
 def testImportMultipleLayers(self):
     importToPostGIS(self.explorer, self.conn, [layers.resolveLayer(PT1), layers.resolveLayer(PT2)], PUBLIC_SCHEMA, None, False, False);        
     schema = Schema(self.conn, PUBLIC_SCHEMA)
     self.assertIsNotNone(self.getTable(schema, PT1))
     self.assertIsNotNone(self.getTable(schema, PT2))
コード例 #31
0
ファイル: guitests.py プロジェクト: maduhu/suite-qgis-plugin
 def setUpClass(cls):
     cls.explorer = OpenGeoExplorer(singletab = True)
     cls.conn1 = getPostgresConnection("conn1")
     cls.conn2 = getPostgresConnection("conn2")
     cls.toImport = [layers.resolveLayer(PT1)]