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
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
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