示例#1
0
    def __init__(self, owner):
        self.geogig_dir = settings.GEOGIG_REPO+'/'+str(owner.id)

        if not os.path.exists(self.geogig_dir):
            #create repo
            self.repo = Repository(self.geogig_dir, init=True)
            self.repo.config(geogig.USER_NAME, owner.username)
            self.repo.config(geogig.USER_EMAIL, owner.email)
        else:
            #use existing repo
            self.repo = Repository(self.geogig_dir, init=False)
示例#2
0
 def testPushToExistingEmptyRepo(self):
     repopath = self.getTempFolderPath()
     remote = Repository(repopath, init=True)
     local = self.createRepo()
     local.addremote("myremote", repopath)
     local.push("myremote")
     self.assertEquals(remote.head.id, local.head.id)
示例#3
0
def createRepo():
    global _repo
    repo = Repository(getTempRepoPath(), init=True)
    path = os.path.join(os.path.dirname(__file__), "data", "shp", "1",
                        "parks.shp")
    repo.importshp(path)
    repo.addandcommit("message")
    path = os.path.join(os.path.dirname(__file__), "data", "shp", "2",
                        "parks.shp")
    repo.importshp(path)
    repo.addandcommit("message_2")
    path = os.path.join(os.path.dirname(__file__), "data", "shp", "3",
                        "parks.shp")
    repo.importshp(path)
    repo.addandcommit("message_3")
    repo.createbranch(geogig.HEAD, "conflicted")
    repo.createbranch(geogig.HEAD, "unconflicted")
    path = os.path.join(os.path.dirname(__file__), "data", "shp", "4",
                        "parks.shp")
    repo.importshp(path)
    repo.addandcommit("message_4")
    repo.checkout("conflicted")
    path = os.path.join(os.path.dirname(__file__), "data", "shp", "5",
                        "parks.shp")
    repo.importshp(path)
    repo.addandcommit("message_5")
    repo.checkout("unconflicted")
    path = os.path.join(os.path.dirname(__file__), "data", "shp", "6",
                        "parks.shp")
    repo.importshp(path)
    repo.addandcommit("message_6")
    repo.checkout(geogig.MASTER)
    repo.config(geogig.USER_NAME, "user")
    repo.config(geogig.USER_EMAIL, "user")
    _repo = repo
示例#4
0
 def testOsmImport(self):
     repoPath =  self.getTempRepoPath()         
     repo = Repository(repoPath, init = True)
     osmfile = os.path.join(os.path.dirname(__file__), "data", "osm", "ways.xml")        
     repo.importosm(osmfile)
     feature = Feature(repo, geogig.WORK_HEAD, "way/31045880")
     self.assertTrue(feature.exists())
示例#5
0
 def createRepo(self):
     repopath = self.getTempFolderPath()
     repo = Repository(repopath, init=True)
     shpfile = os.path.join(os.path.dirname(__file__), "data", "shp",
                            "landuse", "landuse2.shp")
     repo.importshp(shpfile, False, "landuse", "fid")
     repo.addandcommit("first")
     return repo
示例#6
0
 def testOsmImportWithMappingFile(self):
     repoPath =  self.getTempRepoPath()         
     repo = Repository(repoPath, init = True)
     osmfile = os.path.join(os.path.dirname(__file__), "data", "osm", "ways.xml")
     mappingfile = os.path.join(os.path.dirname(__file__), "data", "osm", "mapping.json")
     repo.importosm(osmfile, False, mappingfile)     
     feature = Feature(repo, geogig.WORK_HEAD, "onewaystreets/31045880")
     self.assertTrue(feature.exists())
示例#7
0
def createRepo(title):
    safeName = "".join(x for x in title if x.isalnum())
    path = os.path.join(repoFolder(safeName))
    repo = Repository(path, PyQtConnectorDecorator(), True)
    filename = os.path.join(path, "title")
    with open(filename, "w") as f:
        f.write(title)
    return repo
示例#8
0
class MapToolGeoGigInfo(QgsMapTool):
    def __init__(self, canvas):
        QgsMapTool.__init__(self, canvas)
        self.setCursor(QtCore.Qt.CrossCursor)

    def canvasPressEvent(self, e):
        layer = config.iface.activeLayer()
        if layer is None or not isinstance(layer, QgsVectorLayer):
            config.iface.messageBar().pushMessage(
                "No layer selected or the current active layer is not a valid vector layer",
                level=QgsMessageBar.WARNING,
                duration=4)
            return
        if not layertracking.isTracked(layer):
            config.iface.messageBar().pushMessage(
                "The current active layer is not being tracked as part of a GeoGig repo",
                level=QgsMessageBar.WARNING,
                duration=4)
            return

        trackedlayer = layertracking.getTrackingInfo(layer)
        point = self.toMapCoordinates(e.pos())
        searchRadius = self.canvas().extent().width() * .01
        r = QgsRectangle()
        r.setXMinimum(point.x() - searchRadius)
        r.setXMaximum(point.x() + searchRadius)
        r.setYMinimum(point.y() - searchRadius)
        r.setYMaximum(point.y() + searchRadius)

        r = self.toLayerCoordinates(layer, r)

        fit = layer.getFeatures(QgsFeatureRequest().setFilterRect(r).setFlags(
            QgsFeatureRequest.ExactIntersect))
        fid = None
        try:
            feature = fit.next()
            try:
                fid = unicode(feature["geogigid"])
            except:
                pass
        except StopIteration, e:
            return
        if fid is None:
            config.iface.messageBar().pushMessage(
                "No 'geogigid' field found in layer. Cannot identify features.",
                level=QgsMessageBar.WARNING,
                duration=4)
            return
        try:
            connector = PyQtConnectorDecorator()
            connector.checkIsAlive()
            repo = Repository(trackedlayer.repoFolder, connector, False)
        except Exception, e:
            config.iface.messageBar().pushMessage(
                "The repository linked to the active layer is not valid",
                level=QgsMessageBar.WARNING,
                duration=4)
            return
示例#9
0
 def testLargeDiff(self):
     repo = Repository(self.getTempRepoPath(), init=True)
     path = os.path.join(os.path.dirname(__file__), "data", "shp", "1", "parks.shp")
     repo.importshp(path)
     repo.addandcommit("message")
     path = os.path.join(os.path.dirname(__file__), "data", "shp", "elevation", "elevation.shp")
     repo.importshp(path)
     repo.addandcommit("message_2")
     s = repo.diff("HEAD~1", "HEAD")
示例#10
0
def connect2repo(path, remote='localhost', repo_type='local'):

    print 'connect 2 repo %s' % path
    if os.path.isdir(os.path.join(path, '.geogig')):
        print "Set to existing repo"
        try:
            repos = Repository(path)
        except GeoGigException, e:
            print e

        return repos
示例#11
0
 def testLargeHistory(self):
     NUMPOINTS = 6000
     repo = Repository(self.getTempRepoPath(), init=True)
     path = os.path.join(os.path.dirname(__file__), "data", "shp", "elevation", "elevation.shp")
     repo.importshp(path)
     repo.add()
     for i in xrange(NUMPOINTS):
         feature = "elevation/" + str(i + 1)
         message = "message " + str(i + 1)
         repo.commit(message, [feature])
     log = repo.log()
示例#12
0
 def testImportExportInDifferentFormats(self):
     repopath = self.getTempFolderPath()
     repo = Repository(repopath, init=True)
     geojsonfile = os.path.join(os.path.dirname(__file__), "data",
                                "geojson", "landuse.geojson")
     repo.importgeojson(geojsonfile, False, "landuse", "fid")
     repo.addandcommit("commit")
     shpfile = os.path.join(self.getTempFolderPath(), "landuse.shp")
     repo.exportshp(geogig.HEAD, "landuse", shpfile)
     repo.importshp(shpfile, False, "landuse", "fid")
     unstaged = repo.unstaged()
     self.assertEquals(0, unstaged)
示例#13
0
 def testOsmImportWithMapping(self):
     mapping = OSMMapping()
     rule = OSMMappingRule("onewaystreets")
     rule.addfilter("oneway", "yes")
     rule.addfield("lit", "lit", geogig.TYPE_STRING)
     rule.addfield("geom", "the_geom", geogig.TYPE_LINESTRING)
     mapping.addrule(rule)
     repoPath =  self.getTempRepoPath()         
     repo = Repository(repoPath, init = True)
     osmfile = os.path.join(os.path.dirname(__file__), "data", "osm", "ways.xml")        
     repo.importosm(osmfile, False, mapping)     
     feature = Feature(repo, geogig.WORK_HEAD, "onewaystreets/31045880")
     self.assertTrue(feature.exists())
示例#14
0
def getClonedRepo(): 
    repo = Repository(os.path.join(os.path.dirname(__file__), '../test/data/testrepo'))
    dst = getTempPath()
    return repo.clone(dst) 
示例#15
0
 def testLogEmptyRepo(self):
     repoPath =  self.getTempRepoPath()         
     repo = Repository(repoPath, init = True) 
     log = repo.log()
     self.assertFalse(log)
示例#16
0
 def repo(self):
     if self._repo is None:
         connector = PyQtConnectorDecorator()
         connector.checkIsAlive()
         self._repo = Repository(self.path, connector)
     return self._repo
示例#17
0
def _repoForLayer(layer):
    tracking = getTrackingInfo(layer)
    connector = PyQtConnectorDecorator()
    connector.checkIsAlive()
    return Repository(tracking.repoFolder, connector), tracking.layername
示例#18
0
 def testCreateEmptyRepo(self):    
     repoPath =  self.getTempRepoPath()         
     Repository(repoPath, init = True)    
示例#19
0
 def getClonedRepo(self):
     src = self.repo.url
     dst = self.getTempPath()
     shutil.copytree(src, dst)
     return Repository(dst)
示例#20
0
        try:
            repos = Repository(path)
        except GeoGigException, e:
            print e

        return repos
    else:
        if repo_type == "remote":
            try:
                repos = Repository.newrepofromclone(remote, path)
            except GeoGigException, e:
                print e
            print "New repo from clone"
        else:
            try:
                repos = Repository(path, init=True)
            except GeoGigException, e:
                print e
            print "New repo initialized at : %s" % path
    return repos


def export_to_geojson(repos, filepath):
    for t in repos.trees:
        print "t: %s" % t.path
        if t.path not in ("layer_statistics", "views_layer_statistics",
                          "virts_layer_statistics"):
            geojson_path = os.path.join(filepath, t.path + '.geojson')
            try:
                repos.exportgeojson('HEAD', t.path,
                                    os.path.join('HEAD', t.path, geojson_path))
    def importClicked(self):
        if self.repo is None:
            connector = PyQtConnectorDecorator()
            connector.checkIsAlive()
            self.repo = Repository(self.repos[self.repoCombo.currentText()],
                                   connector)
        if self.layer is None:
            text = self.layerCombo.currentText()
            self.layer = resolveLayer(text)

        source = self.layer.source()
        hasIdField = self.layer.dataProvider().fieldNameIndex("geogigid") != -1

        if not hasIdField:
            autoAddId = config.getConfigValue(config.GENERAL,
                                              config.AUTO_ADD_ID)
            if not autoAddId:
                dlg = AddGeogigIdDialog(self)
                ok, check = dlg.exec_()
                if ok == QtGui.QMessageBox.No:
                    self.close()
                    return
                if check:
                    config.setConfigValue(config.GENERAL, config.AUTO_ADD_ID,
                                          True)

            QtGui.QApplication.setOverrideCursor(
                QtGui.QCursor(QtCore.Qt.WaitCursor))
            addIdField(self.layer)
            QtGui.QApplication.restoreOverrideCursor()
            hasIdField = self.layer.dataProvider().fieldNameIndex(
                "geogigid") != -1
            if not hasIdField:
                QtGui.QMessageBox.warning(
                    self, "Error", "Could not add 'geogigid' field to layer.\n"
                    "Possible causes for this are:\n"
                    "- No permission to edit the layer.\n",
                    QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok)
                return

        # determine encoding
        # first look in .cpg file
        cpgPath = source.replace('.shp', '.cpg')
        if os.path.exists(cpgPath):
            with open(cpgPath) as f:
                charset = f.readline().strip('\r\n')
        else:
            # try to get encoding from provider
            charset = self.layer.dataProvider().encoding()
            if charset.lower() == 'system':
                # get encoding from system
                charset = locale.getpreferredencoding()

        self.repo.importshp(source, False, self.layer.name(), "geogigid", True,
                            charset)
        message = self.messageBox.toPlainText()
        self.repo.add()
        try:
            self.repo.commit(message)
        except UnconfiguredUserException, e:
            configureUser()
            self.repo.commit(message)