class ReportSchema(OptionalMappingSchema): carrier = OptionalStringNode() homeMobileCountryCode = OptionalIntNode() homeMobileNetworkCode = OptionalIntNode() radioType = OptionalStringVocabularyNode(vocabulary=RADIO_STRINGS) timestamp = OptionalNode(UnixTimeFromInteger()) bluetoothBeacons = BluetoothBeaconsSchema(missing=()) wifiAccessPoints = WifiAccessPointsSchema(missing=()) def deserialize(self, data): data = super(ReportSchema, self).deserialize(data) if (data is colander.drop or data is colander.null): # pragma: no cover return colander.drop if not (data.get('bluetoothBeacons') or data.get('cellTowers') or data.get('wifiAccessPoints')): return colander.drop top_radio = data.get('radioType', None) for cell in data.get('cellTowers', ()): if top_radio and ('radioType' not in cell or not cell['radioType']): cell['radioType'] = top_radio if cell.get('radioType') == 'umts': cell['radioType'] = 'wcdma' if 'radioType' in data: del data['radioType'] return data
class ReportSchema(OptionalMappingSchema): carrier = OptionalStringNode() homeMobileCountryCode = OptionalIntNode() homeMobileNetworkCode = OptionalIntNode() radioType = OptionalStringVocabularyNode(vocabulary=RADIO_STRINGS) timestamp = OptionalNode(UnixTimeFromInteger()) bluetoothBeacons = BluetoothBeaconsSchema(missing=()) wifiAccessPoints = WifiAccessPointsSchema(missing=()) def deserialize(self, data): data = super(ReportSchema, self).deserialize(data) if data is colander.drop or data is colander.null: return colander.drop if not ( data.get("bluetoothBeacons") or data.get("cellTowers") or data.get("wifiAccessPoints") ): return colander.drop top_radio = data.get("radioType", None) for cell in data.get("cellTowers", ()): if top_radio and ("radioType" not in cell or not cell["radioType"]): cell["radioType"] = top_radio if cell.get("radioType") == "umts": cell["radioType"] = "wcdma" if "radioType" in data: del data["radioType"] return data
class BaseReportV0Schema(OptionalMappingSchema): lat = OptionalBoundedFloatNode(to_name="latitude") lon = OptionalBoundedFloatNode(to_name="longitude") time = OptionalNode(UnixTimeFromString(), to_name="timestamp") accuracy = OptionalBoundedFloatNode() age = OptionalIntNode() altitude = OptionalBoundedFloatNode() altitude_accuracy = OptionalBoundedFloatNode(to_name="altitudeAccuracy") heading = OptionalBoundedFloatNode() pressure = OptionalBoundedFloatNode() radio = OptionalStringVocabularyNode(vocabulary=RADIO_STRINGS, to_name="radioType") speed = OptionalBoundedFloatNode() source = OptionalStringVocabularyNode( vocabulary=SOURCE_STRINGS, validator=colander.OneOf(SOURCE_STRINGS))
class PositionSchema(OptionalMappingSchema): latitude = OptionalBoundedFloatNode() longitude = OptionalBoundedFloatNode() accuracy = OptionalBoundedFloatNode() age = OptionalIntNode() altitude = OptionalBoundedFloatNode() altitudeAccuracy = OptionalBoundedFloatNode() heading = OptionalBoundedFloatNode() pressure = OptionalBoundedFloatNode() speed = OptionalBoundedFloatNode() source = OptionalStringVocabularyNode(vocabulary=SOURCE_STRINGS)
class CellTowerSchema(OptionalMappingSchema): radioType = OptionalStringVocabularyNode(vocabulary=RADIO_STRINGS) mobileCountryCode = OptionalIntNode() mobileNetworkCode = OptionalIntNode() locationAreaCode = OptionalIntNode() cellId = OptionalIntNode() age = OptionalIntNode() asu = OptionalIntNode() serving = OptionalIntNode() signalStrength = OptionalIntNode() timingAdvance = OptionalIntNode()
class CellV0Schema(OptionalMappingSchema): radio = OptionalStringVocabularyNode(vocabulary=RADIO_STRINGS, to_name="radioType") mcc = OptionalIntNode(to_name="mobileCountryCode") mnc = OptionalIntNode(to_name="mobileNetworkCode") lac = OptionalIntNode(to_name="locationAreaCode") cid = OptionalIntNode(to_name="cellId") age = OptionalIntNode() asu = OptionalIntNode() psc = OptionalIntNode(to_name="primaryScramblingCode") serving = OptionalIntNode() signal = OptionalIntNode(to_name="signalStrength") ta = OptionalIntNode(to_name="timingAdvance")