def update_device_association(self, serial_number, req_data): system_id = req_data.get("system_id") device = DeviceModel.from_serial_number(serial_number) if device is None: abort(400, 'No such device.') if system_id is not None: system = System.from_system_id(system_id) return self.associate_device(device, system) else: return self.disassociate_device(device)
def test_device_creation(admin_app): serial_number = str(uuid.uuid4()) post_data = { "serial_number": serial_number } with admin_app: resp = admin_app.post('/api/device', data=json.dumps(post_data), headers={"content-type": "application/json"}) assert resp.status_code == 200 from models.device import Device assert Device.from_serial_number(serial_number) is not None
def post(self): # Request post json data data = request.get_json() # Abort if None if data is None: abort(400, "Missing required data.") # Gets serial number, then gets key from referencing serial number serial_number = data.get('serial_number') sensor_data = data.get('data') ext = data.get('ext') type_ = data.get('type') if None in (serial_number, sensor_data, ext, type_): abort(400, "Missing required data field.") device = DeviceModel.from_serial_number(serial_number) data_type = DeviceDataType.from_name(type_) if None in (device, data_type): abort(400, "No matching device or type in datastore.") device.update_type(data_type) data_loc = store_data(device, sensor_data, data_type, ext) # Creates a new entry for the data coming in then posts it entry = DeviceData.create(device.key) entry.location = data_loc entry.put() # PubSub stuff try: data = self.get_pubsub_data(entry) except LookupError: pass else: pubsub_url = current_app.config['PUBSUB_URL'] requests.post(pubsub_url, json=data, headers={'content-type': 'application/json'}) return jsonify({})
def put(self, serial_number): data = request.get_json() if "system_id" in data: system, devices = self.update_device_association( serial_number, data) else: device = DeviceModel.from_serial_number(serial_number) if device is None: abort(400) try: device.update_from(data) except RuntimeError: abort(400) system = device.system_key.get() devices = DeviceModel.from_system_key(system.key) data, _ = self.get_system_info(system) data['devices'] = [d.to_json() for d in devices] return jsonify(data)