def deserialize(self): '''Deserializes this instance and returns the object representation''' if self._obj: return self._obj new_obj_data = {} # take the intersection of the fields given and the fields in # self.model_fields for field_name in [f for f in self.model_fields if f in self._data]: value = self.sanitize_field_value(field_name, self._data[field_name]) new_obj_data[field_name] = value for stub_field_name in self.stub_fields.keys(): new_obj_data[stub_field_name] = self.stub_object_finding( new_obj_data, stub_field_name, self._data[stub_field_name]) if self.model_has_field('geo_location') and \ 'geoLocation' in self._data: dataloc = self._data['geoLocation'] loc = GeoLocation(elevation=dataloc.get('elevation', None), latitude=dataloc['latitude'], longitude=dataloc['longitude']) loc.save() new_obj_data['geo_location'] = loc # the query string may contain more object data, for instance if # we're posting to a child collection resource new_obj_data.update(self._filters) self._obj = self.model(**new_obj_data) return self._obj
def setUp(self): self.unit = Unit(name='C') self.unit.save() self.temp_metric = Metric(name='temperature') self.temp_metric.save() self.setpoint_metric = Metric(name='setpoint') self.setpoint_metric.save() self.geo_locations = [ GeoLocation(elevation=50, latitude=42.847, longitude=72.917), GeoLocation(elevation=-23.8, latitude=40.847, longitude=42.917) ] for loc in self.geo_locations: loc.save() self.sites = [ Site(name='Test Site 1', geo_location=self.geo_locations[0], raw_zmq_stream='tcp://example.com:8372'), Site(name='Test Site 2', geo_location=self.geo_locations[1], raw_zmq_stream='tcp://example.com:8172') ] for site in self.sites: site.save() num_devices = 2 * len(self.sites) self.devices = [Device(name='Thermostat %d' % i, site=self.sites[i % len(self.sites)]) for i in range(0, num_devices)] num_people = 2 * len(self.sites) self.people = [Person(first_name='John', last_name = 'Doe %d' % i, site=self.sites[i % len(self.sites)]) for i in range(0, num_people)] for person in self.people: person.save() self.sensors = [] for device in self.devices: device.save() self.sensors.append(ScalarSensor(device=device, metric=self.temp_metric, unit=self.unit)) self.sensors.append(ScalarSensor(device=device, metric=self.setpoint_metric, unit=self.unit)) self.scalar_data = [] for sensor in self.sensors: sensor.save() self.scalar_data.append(ScalarData( sensor=sensor, timestamp=now() - timedelta(minutes=2), value=22.0)) self.scalar_data.append(ScalarData( sensor=sensor, timestamp=now() - timedelta(minutes=1), value=23.0)) for data in self.scalar_data: data.save()
def update(self, data): '''Updates this resource given the data, which is expected to be a dict in the format given by this resource's schema''' for k, v in data.iteritems(): if k in self.model_fields: setattr(self._obj, k, v) elif k in self.stub_fields: setattr(self._obj, k, self.stub_object_finding(self._obj, k, v)) elif k == 'geoLocation': loc = self._obj.geo_location if loc is None: loc = GeoLocation(elevation=v.get('elevation', None), latitude=v['latitude'], longitude=v['longitude']) loc.save() self._obj.geo_location = loc else: for field, value in v.iteritems(): setattr(loc, field, value) loc.save() self._obj.save()
def setUp(self): self.unit = Unit(name='C') self.unit.save() self.temp_metric = Metric(name='temperature') self.temp_metric.save() self.setpoint_metric = Metric(name='setpoint') self.setpoint_metric.save() self.geo_locations = [ GeoLocation(elevation=50, latitude=42.847, longitude=72.917), GeoLocation(elevation=-23.8, latitude=40.847, longitude=42.917) ] for loc in self.geo_locations: loc.save() self.metadata = [] self.sites = [ Site(name='Test Site 1', geo_location=self.geo_locations[0], raw_zmq_stream='tcp://example.com:8372'), Site(name='Test Site 2', geo_location=self.geo_locations[1], raw_zmq_stream='tcp://example.com:8172') ] for site in self.sites: site.save() self.metadata.append( Metadata(key="Test", value="Test Metadata 1", timestamp=now().isoformat(), content_object=site)) self.metadata.append( Metadata(key="Test", value="Test Metadata 2", timestamp=now().isoformat(), content_object=site)) num_devices = 2 * len(self.sites) self.devices = [ Device(name='Thermostat %d' % i, site=self.sites[i % len(self.sites)]) for i in range(0, num_devices) ] num_people = 2 * len(self.sites) # self.people = [Person(first_name='John', # last_name = 'Doe %d' % i, # site=self.sites[i % len(self.sites)]) # for i in range(0, num_people)] # for person in self.people: # person.save() self.sensors = [] for device in self.devices: device.save() self.metadata.append( Metadata(key="Test", value="Test Metadata 1", timestamp=now().isoformat(), content_object=device)) self.metadata.append( Metadata(key="Test", value="Test Metadata 2", timestamp=now().isoformat(), content_object=device)) self.sensors.append( ScalarSensor(device=device, metric=self.temp_metric, unit=self.unit)) self.sensors.append( ScalarSensor(device=device, metric=self.setpoint_metric, unit=self.unit)) self.scalar_data = [] for sensor in self.sensors: sensor.save() self.metadata.append( Metadata(key="Test", value="Test Metadata 1", timestamp=now().isoformat(), content_object=sensor)) self.metadata.append( Metadata(key="Test", value="Test Metadata 1", timestamp=now().isoformat(), content_object=sensor)) self.scalar_data.append({ 'sensor': sensor, 'timestamp': now() - timedelta(minutes=2), 'value': 22.0 }) self.scalar_data.append({ 'sensor': sensor, 'timestamp': now() - timedelta(minutes=1), 'value': 23.0 }) if self.write_scalar_data: for data in self.scalar_data: resources.influx_client.post_data( data['sensor'].device.site.id, data['sensor'].device.id, data['sensor'].id, data['sensor'].metric, data['value'], data['timestamp']) for metadata in self.metadata: metadata.save()