def testBranch(self): """ Test branching scenario """ layer = make_scenario_layer() mb_electorate_layer = make_meshblock_electorate_layer() reg = ScenarioRegistry(source_layer=layer, id_field='id', name_field='name', meshblock_electorate_layer=mb_electorate_layer) # dupe name res, error = reg.branch_scenario(1, 'Scenario 1') self.assertFalse(res) self.assertIn('already exists', error) # missing source scenario res, error = reg.branch_scenario(5, 'Scenario 5') self.assertFalse(res) self.assertIn('does not exist', error) # good res, error = reg.branch_scenario(1, 'Scenario 5') self.assertFalse(error) self.assertEqual(res, 4) f = [f for f in layer.getFeatures()][-1] self.assertEqual(f[0], res) self.assertEqual(f[1], 'Scenario 5') self.assertEqual(f[2].date(), QDateTime.currentDateTime().date()) self.assertEqual(f[3], QgsApplication.userFullName()) f = [f.attributes() for f in mb_electorate_layer.getFeatures()] self.assertEqual( f, [[3, 4, 0, 'c', 'z'], [4, 4, 1, 'd', 'zz'], [1, 2, 0, 'a', 'x'], [2, 2, 1, 'b', 'y'], [3, 1, 0, 'c', 'z'], [4, 1, 1, 'd', 'zz']]) res, error = reg.branch_scenario(2, 'Scenario 6') self.assertFalse(error) self.assertEqual(res, 5) f = [f for f in layer.getFeatures()][-1] self.assertEqual(f[0], res) self.assertEqual(f[1], 'Scenario 6') self.assertEqual(f[2].date(), QDateTime.currentDateTime().date()) self.assertEqual(f[3], QgsApplication.userFullName()) f = [f.attributes() for f in mb_electorate_layer.getFeatures()] self.assertEqual( f, [[3, 4, 0, 'c', 'z'], [4, 4, 1, 'd', 'zz'], [1, 5, 0, 'a', 'x'], [2, 5, 1, 'b', 'y'], [1, 2, 0, 'a', 'x'], [2, 2, 1, 'b', 'y'], [3, 1, 0, 'c', 'z'], [4, 1, 1, 'd', 'zz']])
def getDataParams(): # paramSmooth: iter = interations, offset = 0.0 - 1.0(100%) # paramsSieve: threshold = Size in Pixel, connectedness = 4 or 8(diagonal) tSieve = self.dockWidgetGui.sbRemoveAreaPixels.value() + 1 tAzimuth = self.dockWidgetGui.sbAzimuthThreshold.value() offset = self.dockWidgetGui.spSmoothOffset.value() / 100.0 viter = self.dockWidgetGui.sbSmoothIteration.value() pixelsRemove = None if not self.dockWidgetGui.chkAdjustBorder.isChecked() \ else self.dockWidgetGui.sbRemoveAreaPixels.value() + 1 return { 'layerPolygon': self.layerPolygon, 'filepath': self.pathfileImageSelect, 'id_add': self._getMaximumValueAdd() + 1, 'user': QgsApplication.userFullName(), 'annotation': self.dockWidgetGui.leditAnnotation.text(), 'pixelsRemove': pixelsRemove, 'smooth': { 'iter': viter, 'offset': offset }, 'sieve': { 'threshold': tSieve, 'connectedness': 4 }, 'azimuth': { 'threshold': tAzimuth } }
def __insert_new_scenario(self, new_scenario_name: str, created_datetime: QDateTime = None, created_by: str = None): """ Inserts a scenario into the registry :param new_scenario_name: name for new scenario :param created_datetime: optional datetime for scenario, if not set will be set to current date time :param created_by: creator user name, if not set will be set to current user name :return: scenario id if successful, and error message """ next_id = self.next_scenario_id() scenario_feature = QgsFeature() scenario_feature.initAttributes(self.source_layer.fields().count()) scenario_feature[self.id_field_index] = next_id scenario_feature[self.name_field_index] = new_scenario_name scenario_feature[self.created_field_index] = QDateTime.currentDateTime( ) if created_datetime is None else created_datetime scenario_feature[ self.created_by_field_index] = QgsApplication.userFullName( ) if created_by is None else created_by if not self.source_layer.dataProvider().addFeatures([scenario_feature ]): return False, QCoreApplication.translate( 'LinzRedistrict', 'Could not create scenario') return next_id, None
def workerAddAttributesFeature(self, attributes): if self.dockWidgetGui.chkAdjustBorder.isChecked(): msg = QCoreApplication.translate('GimpSelectionFeature', 'Adjusting the Borders...') self.msgBar.pushMessage( self.nameModulus, msg, Qgis.Info ) if not self.featureAdd is None: del self.featureAdd self.featureAdd = QgsFeature( self.layerPolygon.fields() ) self.featureAdd.setAttribute('id_add', self.getMaximumValueAdd() + 1 ) sdatetime = str( datetime.datetime.today().replace(microsecond=0) ) self.featureAdd.setAttribute('date_add', sdatetime ) self.featureAdd.setAttribute('user', QgsApplication.userFullName() ) self.featureAdd.setAttribute('annotation', self.dockWidgetGui.leditAnnotation.text() ) for k in attributes.keys(): self.featureAdd.setAttribute( k, attributes[ k ] )
def create_log_entry(self, meshblock_number, old_district, new_district) -> QgsFeature: """ Returns a feature corresponding to a new log entry :param meshblock_number: meshblock number :param old_district: previous district :param new_district: new district """ f = QgsFeature(self.user_log_layer.fields()) f.initAttributes(len(self.user_log_layer.fields())) f[self.user_log_timestamp_idx] = QDateTime.currentDateTime() f[self.user_log_username_idx] = QgsApplication.userFullName() f[self.user_log_scenario_idx] = self.scenario f[self.user_log_mb_number_idx] = meshblock_number f[self.user_log_type_idx] = self.task f[self.user_log_from_idx] = old_district f[self.user_log_to_idx] = new_district return f
def userFullName(): name = Application.readEntry("ARK", "User/fullName") if name is None or name == '': name = QgsApplication.userFullName() return name