Ejemplo n.º 1
0
 def getODKType(self, field):
     if field['fieldType'] in [
             'select type', 'geopoint', 'geoshape', 'geotrace', 'start',
             'calculate', 'end', 'today', 'deviceid', 'subscriberid',
             'simserial', 'phonenumber'
     ]:
         field['fieldQtype'] = "UserType"
         return field['fieldType']
     field['fieldQtype'] = QVariant.typeToName(field['fieldType'])
     if field[
             'fieldWidget'] == "ValueMap":  # First try to decode Qgis form widgets
         itemType = 'select one'
     elif field['fieldWidget'] == "CheckBox":
         itemType = 'select one'
         field['fieldChoices'] = {
             str(field['fieldChoices']['CheckedState']): "No",
             str(field['fieldChoices']['UncheckedState']): "Yes"
         }
     elif field['fieldWidget'] == "Photo":
         itemType = 'image'
     else:  #decoding QVariant type of field
         if field['fieldType'] in [2, 3, 4, 32, 33, 35, 36]:
             itemType = 'integer'
         elif field['fieldQtype'] == 'QString':
             itemType = 'text'
         elif field['fieldQtype'] == 'QDate':
             itemType = 'datetime'
         elif field['fieldType'] in [6, 38]:
             itemType = 'decimal'
         else:
             raise AttributeError("Can't cast QVariant to ODKType: " +
                                  field['fieldType'])
     return itemType
Ejemplo n.º 2
0
 def __convertField(self, idx):
     """convert a QSqlQuery field into a python value"""
     field = self.fields[idx]
     name = str(field.name())
     valType = field.type()
     if valType == QVariant.String:
         value = unicode(self.query.value(idx).toString())
     elif valType == QVariant.Double:
         value = self.query.value(idx).toDouble()[0]
     elif valType == QVariant.Int:
         value = unicode(self.query.value(idx).toString())
         if '.' in value:
             # rule.limits is defined as integer in older versions
             # but we save floats anyway. Sqlite3 lets us do a lot
             # of illegal things...
             value = self.query.value(idx).toDouble()[0]
         else:
             value = self.query.value(idx).toInt()[0]
     elif valType == QVariant.UInt:
         value = self.query.value(idx).toUInt()[0]
     elif valType == QVariant.LongLong:
         value = self.query.value(idx).toLongLong()[0]
     elif valType == QVariant.ULongLong:
         value = self.query.value(idx).toULongLong()[0]
     elif valType == QVariant.Invalid:
         value = None
     else:
         raise Exception('Query: variant type %s not implemented for field %s ' % \
             (QVariant.typeToName(valType), name))
     return value
Ejemplo n.º 3
0
 def get_layer_metadata(self):
     '''
     builds a metadata dict of the current layer to be stored in summary sheet
     '''
     #fields = collections.OrderedDict()
     fields = ""
     for field in self.lyr.fields().toList():
         fields += field.name()+'_'+QVariant.typeToName(field.type())+'|'+str(field.length())+'|'+str(field.precision())+' '
     #metadata = collections.OrderedDict()
     metadata = [
         ['layer_name', self.lyr.name(),],
         ['gdrive_id', self.service_sheet.spreadsheetId,],
         ['geometry_type', self.geom_types[self.lyr.geometryType()],],
         ['features', "'%s" % str(self.lyr.featureCount()),],
         ['extent', self.lyr.extent().asWktCoordinates(),],
         ['fields', fields,],
         ['srid', self.lyr.crs().authid(),],
         ['proj4_def', "'%s" % self.lyr.crs().toProj4(),]
     ]
     return metadata