Skip to content
Permalink
Browse files

Use FastInsert when adding features from processing

  • Loading branch information
nyalldawson committed Jun 23, 2017
1 parent 99cfb8f commit 81855a715bef1f0aeb11eb79dd572baf8e41be06
Showing with 287 additions and 198 deletions.
  1. +2 −1 python/plugins/processing/algs/qgis/AddTableField.py
  2. +2 −1 python/plugins/processing/algs/qgis/Aspect.py
  3. +2 −1 python/plugins/processing/algs/qgis/AutoincrementalField.py
  4. +1 −0 python/plugins/processing/algs/qgis/BarPlot.py
  5. +1 −0 python/plugins/processing/algs/qgis/BasicStatistics.py
  6. +2 −1 python/plugins/processing/algs/qgis/Boundary.py
  7. +2 −1 python/plugins/processing/algs/qgis/BoundingBox.py
  8. +1 −0 python/plugins/processing/algs/qgis/BoxPlot.py
  9. +2 −2 python/plugins/processing/algs/qgis/Buffer.py
  10. +4 −3 python/plugins/processing/algs/qgis/CheckValidity.py
  11. +3 −2 python/plugins/processing/algs/qgis/ConcaveHull.py
  12. +3 −2 python/plugins/processing/algs/qgis/ConvexHull.py
  13. +2 −1 python/plugins/processing/algs/qgis/Delaunay.py
  14. +2 −1 python/plugins/processing/algs/qgis/DeleteColumn.py
  15. +2 −1 python/plugins/processing/algs/qgis/DeleteDuplicateGeometries.py
  16. +2 −1 python/plugins/processing/algs/qgis/DeleteHoles.py
  17. +2 −1 python/plugins/processing/algs/qgis/DensifyGeometries.py
  18. +2 −1 python/plugins/processing/algs/qgis/DensifyGeometriesInterval.py
  19. +2 −1 python/plugins/processing/algs/qgis/Difference.py
  20. +2 −1 python/plugins/processing/algs/qgis/DropGeometry.py
  21. +3 −2 python/plugins/processing/algs/qgis/EliminateSelection.py
  22. +2 −1 python/plugins/processing/algs/qgis/EquivalentNumField.py
  23. +1 −1 python/plugins/processing/algs/qgis/ExecuteSQL.py
  24. +2 −1 python/plugins/processing/algs/qgis/Explode.py
  25. +2 −2 python/plugins/processing/algs/qgis/ExportGeometryInfo.py
  26. +2 −1 python/plugins/processing/algs/qgis/ExtendLines.py
  27. +3 −2 python/plugins/processing/algs/qgis/ExtentFromLayer.py
  28. +2 −1 python/plugins/processing/algs/qgis/ExtractByLocation.py
  29. +3 −3 python/plugins/processing/algs/qgis/ExtractNodes.py
  30. +3 −2 python/plugins/processing/algs/qgis/ExtractSpecificNodes.py
  31. +2 −1 python/plugins/processing/algs/qgis/FieldPyculator.py
  32. +2 −1 python/plugins/processing/algs/qgis/FieldsCalculator.py
  33. +2 −1 python/plugins/processing/algs/qgis/FieldsMapper.py
  34. +1 −0 python/plugins/processing/algs/qgis/FindProjection.py
  35. +3 −2 python/plugins/processing/algs/qgis/FixGeometry.py
  36. +1 −0 python/plugins/processing/algs/qgis/FixedDistanceBuffer.py
  37. +2 −1 python/plugins/processing/algs/qgis/GeometryByExpression.py
  38. +20 −19 python/plugins/processing/algs/qgis/GeometryConvert.py
  39. +3 −2 python/plugins/processing/algs/qgis/GridLine.py
  40. +4 −3 python/plugins/processing/algs/qgis/GridPolygon.py
  41. +2 −1 python/plugins/processing/algs/qgis/Gridify.py
  42. +2 −1 python/plugins/processing/algs/qgis/HubDistanceLines.py
  43. +2 −1 python/plugins/processing/algs/qgis/HubDistancePoints.py
  44. +2 −1 python/plugins/processing/algs/qgis/HubLines.py
  45. +1 −0 python/plugins/processing/algs/qgis/HypsometricCurves.py
  46. +2 −1 python/plugins/processing/algs/qgis/ImportIntoPostGIS.py
  47. +1 −0 python/plugins/processing/algs/qgis/ImportIntoSpatialite.py
  48. +2 −1 python/plugins/processing/algs/qgis/Intersection.py
  49. +2 −1 python/plugins/processing/algs/qgis/JoinAttributes.py
  50. +2 −1 python/plugins/processing/algs/qgis/LinesIntersection.py
  51. +2 −2 python/plugins/processing/algs/qgis/LinesToPolygons.py
  52. +1 −0 python/plugins/processing/algs/qgis/MeanAndStdDevPlot.py
  53. +2 −2 python/plugins/processing/algs/qgis/MeanCoords.py
  54. +2 −1 python/plugins/processing/algs/qgis/Merge.py
  55. +2 −2 python/plugins/processing/algs/qgis/MergeLines.py
  56. +2 −1 python/plugins/processing/algs/qgis/OffsetLine.py
  57. +3 −2 python/plugins/processing/algs/qgis/OrientedMinimumBoundingBox.py
  58. +2 −1 python/plugins/processing/algs/qgis/Orthogonalize.py
  59. +1 −1 python/plugins/processing/algs/qgis/PointDistance.py
  60. +2 −2 python/plugins/processing/algs/qgis/PointOnSurface.py
  61. +3 −3 python/plugins/processing/algs/qgis/PointsAlongGeometry.py
  62. +3 −2 python/plugins/processing/algs/qgis/PointsDisplacement.py
  63. +2 −1 python/plugins/processing/algs/qgis/PointsFromLines.py
  64. +2 −1 python/plugins/processing/algs/qgis/PointsFromPolygons.py
  65. +2 −2 python/plugins/processing/algs/qgis/PointsInPolygon.py
  66. +2 −1 python/plugins/processing/algs/qgis/PointsInPolygonUnique.py
  67. +2 −1 python/plugins/processing/algs/qgis/PointsInPolygonWeighted.py
  68. +2 −1 python/plugins/processing/algs/qgis/PointsLayerFromTable.py
  69. +2 −1 python/plugins/processing/algs/qgis/PointsToPaths.py
  70. +2 −2 python/plugins/processing/algs/qgis/PoleOfInaccessibility.py
  71. +2 −1 python/plugins/processing/algs/qgis/Polygonize.py
  72. +3 −3 python/plugins/processing/algs/qgis/PolygonsToLines.py
  73. +2 −1 python/plugins/processing/algs/qgis/RandomExtract.py
  74. +2 −1 python/plugins/processing/algs/qgis/RandomExtractWithinSubsets.py
  75. +2 −1 python/plugins/processing/algs/qgis/RandomPointsAlongLines.py
  76. +2 −2 python/plugins/processing/algs/qgis/RandomPointsExtent.py
  77. +2 −2 python/plugins/processing/algs/qgis/RandomPointsLayer.py
  78. +2 −2 python/plugins/processing/algs/qgis/RandomPointsPolygonsFixed.py
  79. +2 −2 python/plugins/processing/algs/qgis/RandomPointsPolygonsVariable.py
  80. +1 −1 python/plugins/processing/algs/qgis/RandomSelection.py
  81. +1 −1 python/plugins/processing/algs/qgis/RandomSelectionWithinSubsets.py
  82. +7 −6 python/plugins/processing/algs/qgis/RectanglesOvalsDiamondsFixed.py
  83. +7 −6 python/plugins/processing/algs/qgis/RectanglesOvalsDiamondsVariable.py
  84. +2 −2 python/plugins/processing/algs/qgis/RegularPoints.py
  85. +2 −1 python/plugins/processing/algs/qgis/RemoveNullGeometry.py
  86. +2 −1 python/plugins/processing/algs/qgis/ReverseLineDirection.py
  87. +2 −1 python/plugins/processing/algs/qgis/SaveSelectedFeatures.py
  88. +5 −4 python/plugins/processing/algs/qgis/ServiceAreaFromLayer.py
  89. +5 −4 python/plugins/processing/algs/qgis/ServiceAreaFromPoint.py
  90. +2 −1 python/plugins/processing/algs/qgis/ShortestPathLayerToPoint.py
  91. +2 −2 python/plugins/processing/algs/qgis/ShortestPathPointToLayer.py
  92. +2 −1 python/plugins/processing/algs/qgis/ShortestPathPointToPoint.py
  93. +2 −1 python/plugins/processing/algs/qgis/SimplifyGeometries.py
  94. +3 −3 python/plugins/processing/algs/qgis/SinglePartsToMultiparts.py
  95. +2 −1 python/plugins/processing/algs/qgis/SingleSidedBuffer.py
  96. +2 −1 python/plugins/processing/algs/qgis/Smooth.py
  97. +3 −2 python/plugins/processing/algs/qgis/SnapGeometries.py
  98. +3 −3 python/plugins/processing/algs/qgis/SpatialJoin.py
  99. +2 −1 python/plugins/processing/algs/qgis/SplitWithLines.py
  100. +1 −0 python/plugins/processing/algs/qgis/StatisticsByCategories.py
  101. +2 −2 python/plugins/processing/algs/qgis/SumLines.py
  102. +3 −2 python/plugins/processing/algs/qgis/SymmetricalDifference.py
  103. +2 −1 python/plugins/processing/algs/qgis/TextToFloat.py
  104. +2 −1 python/plugins/processing/algs/qgis/TopoColors.py
  105. +2 −1 python/plugins/processing/algs/qgis/Translate.py
  106. +1 −0 python/plugins/processing/algs/qgis/TruncateTable.py
  107. +8 −7 python/plugins/processing/algs/qgis/Union.py
  108. +1 −1 python/plugins/processing/algs/qgis/UniqueValues.py
  109. +1 −0 python/plugins/processing/algs/qgis/VariableDistanceBuffer.py
  110. +1 −0 python/plugins/processing/algs/qgis/VectorLayerHistogram.py
  111. +1 −0 python/plugins/processing/algs/qgis/VectorLayerScatterplot.py
  112. +1 −0 python/plugins/processing/algs/qgis/VectorLayerScatterplot3D.py
  113. +2 −1 python/plugins/processing/algs/qgis/VectorSplit.py
  114. +2 −2 python/plugins/processing/algs/qgis/VoronoiPolygons.py
  115. +2 −1 python/plugins/processing/algs/qgis/ZonalStatistics.py
  116. +1 −1 python/plugins/processing/algs/qgis/ZonalStatisticsQgis.py
  117. +1 −1 python/plugins/processing/core/GeoAlgorithm.py
  118. +1 −1 python/plugins/processing/gui/AlgorithmExecutor.py
  119. +3 −3 python/plugins/processing/tools/dataobjects.py
  120. +10 −10 src/core/processing/qgsnativealgorithms.cpp
@@ -28,6 +28,7 @@
from qgis.PyQt.QtCore import QVariant
from qgis.core import (QgsField,
QgsFeature,
QgsFeatureSink,
QgsApplication,
QgsProcessingUtils,
QgsProcessingParameterFeatureSource,
@@ -111,7 +112,7 @@ def processAlgorithm(self, parameters, context, feedback):
attributes.append(None)
output_feature.setAttributes(attributes)

sink.addFeature(output_feature)
sink.addFeature(output_feature, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))

return {self.OUTPUT_LAYER: dest_id}
@@ -33,7 +33,8 @@
from qgis.core import (QgsProcessingParameterRasterLayer,
QgsProcessingParameterNumber,
QgsProcessingParameterRasterOutput,
QgsProcessingOutputRasterLayer)
QgsProcessingOutputRasterLayer,
QgsFeatureSink)
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
from processing.core.parameters import ParameterRaster
from processing.core.parameters import ParameterNumber
@@ -28,6 +28,7 @@
from qgis.PyQt.QtCore import QVariant
from qgis.core import (QgsField,
QgsFeature,
QgsFeatureSink,
QgsApplication,
QgsProcessingUtils,
QgsProcessingParameterFeatureSource,
@@ -84,7 +85,7 @@ def processAlgorithm(self, parameters, context, feedback):
attributes.append(current)
output_feature.setAttributes(attributes)

sink.addFeature(output_feature)
sink.addFeature(output_feature, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))

return {self.OUTPUT: dest_id}
@@ -30,6 +30,7 @@


from qgis.core import (QgsApplication,
QgsFeatureSink,
QgsProcessingUtils,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterField,
@@ -32,6 +32,7 @@
from qgis.PyQt.QtGui import QIcon

from qgis.core import (QgsStatisticalSummary,
QgsFeatureSink,
QgsStringStatisticalSummary,
QgsDateTimeStatisticalSummary,
QgsFeatureRequest,
@@ -29,6 +29,7 @@

from qgis.core import (QgsGeometry,
QgsWkbTypes,
QgsFeatureSink,
QgsProcessingUtils,
QgsProcessingParameterDefinition,
QgsProcessingParameterFeatureSource,
@@ -101,7 +102,7 @@ def processAlgorithm(self, parameters, context, feedback):

output_feature.setGeometry(output_geometry)

sink.addFeature(output_feature)
sink.addFeature(output_feature, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))

return {self.OUTPUT_LAYER: dest_id}
@@ -29,6 +29,7 @@

from qgis.core import (QgsGeometry,
QgsWkbTypes,
QgsFeatureSink,
QgsProcessingUtils,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterFeatureSink,
@@ -93,7 +94,7 @@ def processAlgorithm(self, parameters, context, feedback):

output_feature.setGeometry(output_geometry)

sink.addFeature(output_feature)
sink.addFeature(output_feature, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))

return {self.OUTPUT_LAYER: dest_id}
@@ -29,6 +29,7 @@
import plotly.graph_objs as go

from qgis.core import (QgsApplication,
QgsFeatureSink,
QgsProcessingUtils)
from processing.core.parameters import ParameterTable
from processing.core.parameters import ParameterTableField
@@ -60,7 +60,7 @@ def buffering(feedback, context, writer, distance, field, useField, layer, disso
final_geometry = QgsGeometry.unaryUnion(buffered_geometries)
outFeat.setGeometry(final_geometry)
outFeat.setAttributes(attrs)
writer.addFeature(outFeat)
writer.addFeature(outFeat, QgsFeatureSink.FastInsert)
else:
# Without dissolve
for inFeat in features:
@@ -74,7 +74,7 @@ def buffering(feedback, context, writer, distance, field, useField, layer, disso
outGeom = inGeom.buffer(float(value), segments, endCapStyle, joinStyle, mitreLimit)
outFeat.setGeometry(outGeom)
outFeat.setAttributes(attrs)
writer.addFeature(outFeat)
writer.addFeature(outFeat, QgsFeatureSink.FastInsert)
current += 1
feedback.setProgress(int(current * total))

@@ -34,6 +34,7 @@
QgsGeometry,
QgsFeature,
QgsField,
QgsFeatureSink,
QgsWkbTypes,
QgsProcessingUtils,
QgsFields,
@@ -151,7 +152,7 @@ def doCheck(self, method, parameters, context, feedback):
errFeat.setGeometry(error_geom)
errFeat.setAttributes([error.what()])
if error_output_sink:
error_output_sink.addFeature(errFeat)
error_output_sink.addFeature(errFeat, QgsFeatureSink.FastInsert)
error_count += 1

reasons.append(error.what())
@@ -167,12 +168,12 @@ def doCheck(self, method, parameters, context, feedback):

if valid:
if valid_output_sink:
valid_output_sink.addFeature(outFeat)
valid_output_sink.addFeature(outFeat, QgsFeatureSink.FastInsert)
valid_count += 1

else:
if invalid_output_sink:
invalid_output_sink.addFeature(outFeat)
invalid_output_sink.addFeature(outFeat, QgsFeatureSink.FastInsert)
invalid_count += 1

feedback.setProgress(int(current * total))
@@ -29,6 +29,7 @@
from qgis.core import (QgsFeatureRequest,
QgsFeature,
QgsGeometry,
QgsFeatureSink,
QgsWkbTypes,
QgsApplication,
QgsProcessingUtils)
@@ -152,13 +153,13 @@ def processAlgorithm(self, parameters, context, feedback):
while deleted:
deleted = single_geom.deleteRing(1)
single_feature.setGeometry(single_geom)
writer.addFeature(single_feature)
writer.addFeature(single_feature, QgsFeatureSink.FastInsert)
else:
# Multipart geometries are allowed
if not holes:
# Delete holes
deleted = True
while deleted:
deleted = geom.deleteRing(1)
writer.addFeature(feat)
writer.addFeature(feat, QgsFeatureSink.FastInsert)
del writer
@@ -33,6 +33,7 @@

from qgis.core import (QgsField,
QgsFeature,
QgsFeatureSink,
QgsGeometry,
QgsWkbTypes,
QgsProcessingUtils,
@@ -145,7 +146,7 @@ def processAlgorithm(self, parameters, context, feedback):
(area, perim) = vector.simpleMeasure(outGeom)
outFeat.setGeometry(outGeom)
outFeat.setAttributes([fid, val, area, perim])
writer.addFeature(outFeat)
writer.addFeature(outFeat, QgsFeatureSink.FastInsert)
except:
raise GeoAlgorithmExecutionException(
self.tr('Exception while computing convex hull'))
@@ -166,7 +167,7 @@ def processAlgorithm(self, parameters, context, feedback):
(area, perim) = vector.simpleMeasure(outGeom)
outFeat.setGeometry(outGeom)
outFeat.setAttributes([0, 'all', area, perim])
writer.addFeature(outFeat)
writer.addFeature(outFeat, QgsFeatureSink.FastInsert)
except:
raise GeoAlgorithmExecutionException(
self.tr('Exception while computing convex hull'))
@@ -33,6 +33,7 @@

from qgis.core import (QgsField,
QgsFeatureRequest,
QgsFeatureSink,
QgsFeature,
QgsGeometry,
QgsPointXY,
@@ -145,7 +146,7 @@ def processAlgorithm(self, parameters, context, feedback):
feat.setAttributes(attrs)
geometry = QgsGeometry().fromPolygon([polygon])
feat.setGeometry(geometry)
writer.addFeature(feat)
writer.addFeature(feat, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))

del writer
@@ -26,6 +26,7 @@
__revision__ = '$Format:%H$'

from qgis.core import (QgsApplication,
QgsFeatureSink,
QgsProcessingUtils,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterFeatureSink,
@@ -101,7 +102,7 @@ def processAlgorithm(self, parameters, context, feedback):
for index in field_indices:
del attributes[index]
f.setAttributes(attributes)
sink.addFeature(f)
sink.addFeature(f, QgsFeatureSink.FastInsert)

feedback.setProgress(int(current * total))

@@ -27,6 +27,7 @@

from qgis.core import (QgsFeatureRequest,
QgsApplication,
QgsFeatureSink,
QgsProcessingUtils)
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
from processing.core.parameters import ParameterVector
@@ -86,7 +87,7 @@ def processAlgorithm(self, parameters, context, feedback):
total = 100.0 / len(cleaned) if cleaned else 1
request = QgsFeatureRequest().setFilterFids(list(cleaned.keys()))
for current, f in enumerate(layer.getFeatures(request)):
writer.addFeature(f)
writer.addFeature(f, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))

del writer
@@ -25,6 +25,7 @@
__revision__ = '$Format:%H$'

from qgis.core import (QgsApplication,
QgsFeatureSink,
QgsProcessingUtils,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterNumber,
@@ -87,7 +88,7 @@ def processAlgorithm(self, parameters, context, feedback):

if f.hasGeometry():
f.setGeometry(f.geometry().removeInteriorRings(min_area))
sink.addFeature(f)
sink.addFeature(f, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))

return {self.OUTPUT: dest_id}
@@ -29,6 +29,7 @@
import os

from qgis.core import (QgsWkbTypes,
QgsFeatureSink,
QgsApplication,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterNumber,
@@ -92,7 +93,7 @@ def processAlgorithm(self, parameters, context, feedback):
if feature.hasGeometry():
new_geometry = feature.geometry().densifyByCount(vertices)
feature.setGeometry(new_geometry)
sink.addFeature(feature)
sink.addFeature(feature, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))

return {self.OUTPUT: dest_id}
@@ -31,6 +31,7 @@

from qgis.core import (QgsWkbTypes,
QgsApplication,
QgsFeatureSink,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterNumber,
QgsProcessingParameterFeatureSink,
@@ -89,7 +90,7 @@ def processAlgorithm(self, parameters, context, feedback):
if feature.hasGeometry():
new_geometry = feature.geometry().densifyByDistance(float(interval))
feature.setGeometry(new_geometry)
sink.addFeature(feature)
sink.addFeature(feature, QgsFeatureSink.FastInsert)

feedback.setProgress(int(current * total))

@@ -31,6 +31,7 @@

from qgis.core import (QgsFeatureRequest,
QgsFeature,
QgsFeatureSink,
QgsGeometry,
QgsWkbTypes,
QgsMessageLog,
@@ -96,7 +97,7 @@ def processAlgorithm(self, parameters, context, feedback):
try:
outFeat.setGeometry(diff_geom)
outFeat.setAttributes(attrs)
writer.addFeature(outFeat)
writer.addFeature(outFeat, QgsFeatureSink.FastInsert)
except:
QgsMessageLog.logMessage(self.tr('Feature geometry error: One or more output features ignored due to invalid geometry.'), self.tr('Processing'), QgsMessageLog.WARNING)
continue
@@ -27,6 +27,7 @@

from qgis.core import (QgsFeatureRequest,
QgsWkbTypes,
QgsFeatureSink,
QgsCoordinateReferenceSystem,
QgsApplication,
QgsProcessingParameterDefinition,
@@ -80,7 +81,7 @@ def processAlgorithm(self, parameters, context, feedback):
break

input_feature.clearGeometry()
sink.addFeature(input_feature)
sink.addFeature(input_feature, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))

return {self.OUTPUT_TABLE: dest_id}
@@ -32,6 +32,7 @@

from qgis.core import (QgsFeatureRequest,
QgsFeature,
QgsFeatureSink,
QgsGeometry,
QgsMessageLog,
QgsProcessingUtils)
@@ -101,7 +102,7 @@ def processAlgorithm(self, parameters, context, feedback):
featToEliminate.append(aFeat)
else:
# write the others to output
writer.addFeature(aFeat)
writer.addFeature(aFeat, QgsFeatureSink.FastInsert)

# Delete all features to eliminate in processLayer
processLayer = output.layer
@@ -207,4 +208,4 @@ def processAlgorithm(self, parameters, context, feedback):
raise GeoAlgorithmExecutionException(self.tr('Could not commit changes'))

for feature in featNotEliminated:
writer.addFeature(feature)
writer.addFeature(feature, QgsFeatureSink.FastInsert)
@@ -28,6 +28,7 @@
from qgis.PyQt.QtCore import QVariant
from qgis.core import (QgsField,
QgsFeature,
QgsFeatureSink,
QgsApplication,
QgsProcessingUtils)
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
@@ -90,6 +91,6 @@ def processAlgorithm(self, parameters, context, feedback):

atMap.append(classes[clazz])
outFeat.setAttributes(atMap)
writer.addFeature(outFeat)
writer.addFeature(outFeat, QgsFeatureSink.FastInsert)

del writer
@@ -157,6 +157,6 @@ def processAlgorithm(self, parameters, context, feedback):
outFeat.setAttributes(inFeat.attributes())
if geometry_type != 1:
outFeat.setGeometry(inFeat.geometry())
writer.addFeature(outFeat)
writer.addFeature(outFeat, QgsFeatureSink.FastInsert)
feedback.setProgress(int(current * total))
del writer

1 comment on commit 81855a7

@haubourg

This comment has been minimized.

Copy link
Contributor

@haubourg haubourg commented on 81855a7 Jun 23, 2017

👍

Please sign in to comment.
You can’t perform that action at this time.