def copyKeywords(self, theSourceLayer, theDestinationFile, theExtraKeywords=None): """Helper to copy the keywords file from a source dataset to a destination dataset. e.g.:: copyKeywords('foo.shp', 'bar.shp') Will result in the foo.keywords file being copied to bar.keyword. Optional argument extraKeywords is a dictionary with additional keywords that will be added to the destination file e.g:: copyKeywords('foo.shp', 'bar.shp', {'resolution': 0.01}) Args: * theSourceLayer - A QGIS QgsMapLayer instance. * theDestinationFile - the output filename that should be used to store the keywords in. It can be a .shp or a .keywords for exampled since the suffix will always be replaced with .keywords. * theExtraKeywords - a dict containing all the extra keywords to be written for the layer. The written keywords will consist of any original keywords from the source layer's keywords file and and the extra keywords (which will replace the source layers keywords if the key is identical). Returns: None. Raises: None """ myKeywords = self.readKeywords(theSourceLayer) if theExtraKeywords is None: theExtraKeywords = {} myMessage = self.tr('Expected extraKeywords to be a dictionary. Got %s' % str(type(theExtraKeywords))[1:-1]) verify(isinstance(theExtraKeywords, dict), myMessage) # compute the output keywords file name myDestinationBase = os.path.splitext(theDestinationFile)[0] myNewDestination = myDestinationBase + '.keywords' # write the extra keywords into the source dict try: for key in theExtraKeywords: myKeywords[key] = theExtraKeywords[key] writeKeywordsToFile(myNewDestination, myKeywords) except Exception, e: myMessage = self.tr('Failed to copy keywords file from :' '\n%s\nto\%s: %s' % (theSourceLayer.source(), myNewDestination, str(e))) raise Exception(myMessage)
def writeKeywords(self, theLayer, theKeywords): """Write keywords for a datasource. This is a wrapper method that will 'do the right thing' to store keywords for the given datasource. In particular, if the datasource is remote (e.g. a database connection) it will write the keywords from the keywords store. Args: * theLayer - A QGIS QgsMapLayer instance. * theKeywords - a dict containing all the keywords to be written for the layer. Returns: None. Raises: None """ mySource = str(theLayer.source()) myFlag = self.areKeywordsFileBased(theLayer) myKeywords = None try: if myFlag: myKeywords = is_safe_interface.writeKeywordsToFile( mySource, theKeywords) else: myKeywords = self.writeKeywordsForUri(mySource, theKeywords) return myKeywords except: raise