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
Ejemplo n.º 6
0
 def userFullName():
     name = Application.readEntry("ARK", "User/fullName")
     if name is None or name == '':
         name = QgsApplication.userFullName()
     return name