def createGeopkgLayer(self, filepath, featureIterator): fields, geomAtt = self._fields() qgsfields = QgsFields() for f in fields: qgsfields.append(f) writer = QgsVectorFileWriter( filepath, "UTF-8", qgsfields, FeatureTypeHelper.typeNameConverter[geomAtt.type.lower()], QgsCoordinateReferenceSystem(geomAtt.SRS), driverName="GPKG") BATCHSIZE = 500 def _batch(iterable, size): sourceiter = iter(iterable) while True: batchiter = islice(sourceiter, size) try: yield chain([next(batchiter)], batchiter) except StopIteration: return for batch in _batch(featureIterator, BATCHSIZE): success = writer.addFeatures(batch) if not success: error = writer.errorMessage() del writer raise Exception("geopkg save: " + error) writer.flushBuffer() # the only way to close the writer is to call the C++ destructor -- we use sip to do this sip.delete(writer) del writer # remove from python addAuditTables(filepath)