def PUT(self):
        if not "upload" in self.req.auth.perms:
            # The client doesn't actually get this for larger files because the
            # connection gets aborted when we don't accept their upload.

            self.status_code = 403
            return {"e": 1, "msg": "You can't upload."}

        b = Blob(mime=self.req.mimetype)
        b.writestream(self.req.stream)

        new = True
        sb = self.dbs.query(Blob).get(b.id)
        if sb:  # We already have this blob.
            b = sb
            new = False
        else:  # Save the new one.
            self.dbs.add(b)
            self.dbs.commit()

        self.status_code = 201 if new else 200
        self.headers["Location"] = "/blob/" + b.id

        return {"e": 0, "id": b.id, "new": new}
def blob(mime, content):
	b = Blob(mime=mime)
	b.write(content)
	sess.add(b)
	return b
def file(mime, name):
	name = os.path.join(os.path.dirname(__file__), name)
	b = Blob(mime=mime)
	b.writestream(open(name, "rb"))
	sess.add(b)
	return b