Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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({})
Ejemplo n.º 4
0
    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)