Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
 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()
Пример #4
0
 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()
Пример #5
0
 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()
Пример #6
0
    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()