示例#1
0
 def test_filter(self):
     with app.test_client() as c:
         c.set_cookie("localhost", "access_token_cookie", TOKEN_USER)
         rand = repr(round(time()))
         gcode_ids = [
             gcodes.add_gcode(
                 path="a/b/c",
                 filename="my-unique-filename-%s" % rand,
                 display="file-display",
                 absolute_path="/ab/a/b/c",
                 size=123,
                 user_uuid=UUID_USER,
             ),
             gcodes.add_gcode(
                 path="a/b/c",
                 filename="my-unique-filename-%s" % rand,
                 display="file-display",
                 absolute_path="/ab/a/b/c",
                 size=123,
                 user_uuid=UUID_USER,
             ),
         ]
         response = c.get(
             "/gcodes?filter=filename:%s" % rand,
             headers={"x-csrf-token": TOKEN_USER_CSRF},
         )
         self.assertEqual(response.status_code, 200)
         self.assertTrue("items" in response.json)
         self.assertTrue(len(response.json["items"]) == 2)
         for gcode_id in gcode_ids:
             gcodes.delete_gcode(gcode_id)
示例#2
0
 def setUp(self):
     self.gcode_id = gcodes.add_gcode(
         path="a/b/c",
         filename="file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
     )
     self.gcode_id2 = gcodes.add_gcode(
         path="a/b/c",
         filename="file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
     )
     self.printjob_ids = []
     for i in range(0, 3):
         self.printjob_ids.append(
             printjobs.add_printjob(
                 gcode_id=self.gcode_id,
                 gcode_data={"id": self.gcode_id},
                 printer_ip="172.16.236.11:8080",
                 printer_data={"ip": "172.16.236.11:8080"},
             ))
     for i in range(0, 3):
         self.printjob_ids.append(
             printjobs.add_printjob(
                 gcode_id=self.gcode_id2,
                 gcode_data={"id": self.gcode_id2},
                 printer_ip="172.16.236.12:8080",
                 printer_data={"ip": "172.16.236.12:8080"},
             ))
示例#3
0
def upload():
    if "file" not in request.files:
        return abort(400)
    incoming = request.files["file"]
    if incoming.filename == "":
        return abort(400)

    if not re.search(r"\.gco(de)?$", incoming.filename):
        return abort(415)

    try:
        saved = files.save(incoming, request.form.get("path", "/"))
        gcodes.add_gcode(
            path=saved["path"],
            filename=saved["filename"],
            display=saved["display"],
            absolute_path=saved["absolute_path"],
            size=saved["size"],
        )
    except (IOError, OSError) as e:
        return abort(e, 500)

    return (
        jsonify({
            "files": {
                "local": {
                    "name": saved["filename"],
                    "display": saved["display"],
                    "path": saved["absolute_path"],
                    "origin": "local",
                }
            }
        }),
        201,
    )
示例#4
0
 def test_delete(self):
     gcode_id = gcodes.add_gcode(
         path="delete-ab/c",
         filename="delete-gcode-specific-file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER,
     )
     printjobs.add_printjob(
         gcode_id=gcode_id,
         gcode_data={"id": gcode_id},
         printer_uuid="20e91c14-c3e4-4fe9-a066-e69d53324a20",
         printer_data={"host": "172.16.236.11:8080"},
     )
     printjobs.add_printjob(
         gcode_id=gcode_id,
         gcode_data={"id": gcode_id},
         printer_uuid="20e91c14-c3e4-4fe9-a066-e69d53324a20",
         printer_data={"host": "172.16.236.11:8080"},
     )
     with app.test_client() as c:
         c.set_cookie("localhost", "access_token_cookie", TOKEN_USER)
         response = c.delete(
             "/gcodes/%s" % gcode_id, headers={"x-csrf-token": TOKEN_USER_CSRF},
         )
         self.assertEqual(response.status_code, 204)
     self.assertEqual(gcodes.get_gcode(gcode_id), None)
     pjs = [pj for pj in printjobs.get_printjobs() if pj["gcode_id"] == gcode_id]
     self.assertEqual(len(pjs), 2)
     for pj in pjs:
         self.assertFalse(pj["gcode_data"]["available"])
示例#5
0
文件: gcodes.py 项目: xaralis/karmen
def gcode_create():
    if "file" not in request.files:
        return abort(400)
    incoming = request.files["file"]
    if incoming.filename == "":
        return abort(400)

    if not re.search(r"\.gco(de)?$", incoming.filename):
        return abort(415)

    try:
        saved = files.save(incoming, request.form.get("path", "/"))
        gcode_id = gcodes.add_gcode(
            path=saved["path"],
            filename=saved["filename"],
            display=saved["display"],
            absolute_path=saved["absolute_path"],
            size=saved["size"],
        )
    except (IOError, OSError) as e:
        return abort(e, 500)
    return (
        jsonify(
            make_gcode_response({
                "id": gcode_id,
                "path": saved["path"],
                "filename": saved["filename"],
                "display": saved["display"],
                "absolute_path": saved["absolute_path"],
                "uploaded": datetime.datetime.now(),
                "size": saved["size"],
            })),
        201,
    )
示例#6
0
 def setUp(self):
     self.gcode_id = gcodes.add_gcode(
         path="a/b/c",
         filename="file",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
     )
示例#7
0
 def setUp(self):
     self.gcode_id = gcodes.add_gcode(
         path="a/b/c",
         filename="file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER,
     )
示例#8
0
 def test_filter_next(self):
     with app.test_client() as c:
         c.set_cookie("localhost", "access_token_cookie", TOKEN_USER)
         gcode_uuids = [
             gcodes.add_gcode(
                 uuid=guid.uuid4(),
                 path="a/b/c",
                 filename="unique-filename with space.gcode",
                 display="unique-filename with space.gcode",
                 absolute_path="/ab/a/b/c",
                 size=123,
                 user_uuid=UUID_USER,
                 organization_uuid=UUID_ORG,
             ),
             gcodes.add_gcode(
                 uuid=guid.uuid4(),
                 path="a/b/c",
                 filename="unique-filename with space",
                 display="unique-filename with space",
                 absolute_path="/ab/a/b/c",
                 size=123,
                 user_uuid=UUID_USER,
                 organization_uuid=UUID_ORG,
             ),
         ]
         response = c.get(
             "/organizations/%s/gcodes?search=unique-FILENAME with space&limit=1&order_by=-uuid"
             % UUID_ORG,
             headers={"x-csrf-token": TOKEN_USER_CSRF},
         )
         print(response.json)
         self.assertEqual(response.status_code, 200)
         self.assertTrue("items" in response.json)
         self.assertTrue("next" in response.json)
         self.assertEqual(len(response.json["items"]), 1)
         response2 = c.get(
             response.json["next"],
             headers={"x-csrf-token": TOKEN_USER_CSRF},
         )
         self.assertTrue("items" in response2.json)
         self.assertTrue(response.json["items"][0]["uuid"] >
                         response2.json["items"][0]["uuid"])
         for gcode_uuid in gcode_uuids:
             gcodes.delete_gcode(gcode_uuid)
示例#9
0
 def setUp(self):
     self.gcode_uuid = gcodes.add_gcode(
         uuid=guid.uuid4(),
         path="a/b/c",
         filename="file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER,
         organization_uuid=UUID_ORG,
     )
示例#10
0
 def test_delete_no_token(self):
     gcode_id = gcodes.add_gcode(
         path="delete-ab/c",
         filename="delete-gcode-specific-file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER,
     )
     with app.test_client() as c:
         response = c.delete("/gcodes/%s" % gcode_id)
         self.assertEqual(response.status_code, 401)
示例#11
0
 def setUp(self):
     self.gcode_ids = []
     for i in range(0, 5):
         self.gcode_ids.append(
             gcodes.add_gcode(
                 path="a/b/c",
                 filename="file%s" % i,
                 display="file-display",
                 absolute_path="/ab/a/b/c",
                 size=123,
                 user_uuid=UUID_USER,
             )
         )
示例#12
0
def upload():
    token = request.headers.get("x-api-key", None)
    if not token:
        return abort(403)
    user_uuid = None
    try:
        decoded = decode_token(token)
        user_uuid = decoded["identity"]
    except Exception as e:
        abort(403)

    if decoded["user_claims"].get("organization_uuid") is None:
        abort(403)

    if "file" not in request.files:
        return abort(400)
    incoming = request.files["file"]
    if incoming.filename == "":
        return abort(400)

    if not re.search(r"\.gco(de)?$", incoming.filename):
        return abort(415)
    try:
        org_uuid = decoded["user_claims"]["organization_uuid"]
        saved = files.save(org_uuid, incoming, request.form.get("path", ""))
        gcode_id = gcodes.add_gcode(
            uuid=guid.uuid4(),
            path=saved["path"],
            filename=saved["filename"],
            display=saved["display"],
            absolute_path=saved["absolute_path"],
            organization_uuid=org_uuid,
            size=saved["size"],
            user_uuid=user_uuid,
        )
        analyze_gcode.delay(gcode_id)
    except (IOError, OSError) as e:
        return abort(500, "upload IOError;\t" + str(e))
    return (
        jsonify({
            "files": {
                "local": {
                    "name": saved["filename"],
                    "display": saved["display"],
                    "path": saved["absolute_path"],
                    "origin": "local",
                }
            }
        }),
        201,
    )
示例#13
0
 def setUp(self):
     self.gcode_uuids = []
     for i in range(0, 5):
         self.gcode_uuids.append(
             gcodes.add_gcode(
                 uuid=guid.uuid4(),
                 path="a/b/c",
                 filename="file%s" % i,
                 display="file-display",
                 absolute_path="/ab/a/b/c",
                 size=123,
                 user_uuid=UUID_USER,
                 organization_uuid=UUID_ORG,
             ))
示例#14
0
 def test_get_not_on_disk(self):
     gcode_id = gcodes.add_gcode(
         path="a/b/c",
         filename="file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER,
     )
     with app.test_client() as c:
         c.set_cookie("localhost", "access_token_cookie", TOKEN_USER)
         response = c.get(
             "/gcodes/%s/data" % gcode_id, headers={"x-csrf-token": TOKEN_USER_CSRF},
         )
         self.assertEqual(response.status_code, 404)
示例#15
0
 def test_delete_bad_user(self):
     gcode_id = gcodes.add_gcode(
         path="delete-ab/c",
         filename="delete-gcode-specific-file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER,
     )
     with app.test_client() as c:
         c.set_cookie("localhost", "access_token_cookie", TOKEN_USER2)
         response = c.delete(
             "/gcodes/%s" % gcode_id, headers={"x-csrf-token": TOKEN_USER2_CSRF},
         )
         self.assertEqual(response.status_code, 401)
示例#16
0
def gcode_create(org_uuid):
    if "file" not in request.files:
        return abort(make_response(jsonify(message="No file uploaded"), 400))
    incoming = request.files["file"]
    if incoming.filename == "":
        return abort(
            make_response(jsonify(message="Uploaded file has to have a name"),
                          400))

    if not re.search(r"\.gco(de)?$", incoming.filename):
        return abort(
            make_response(
                jsonify(message="Uploaded file does not look like gcode"),
                415))

    try:
        saved = files.save(org_uuid, incoming, request.form.get("path", "/"))
        gcode_id = gcodes.add_gcode(
            uuid=guid.uuid4(),
            path=saved["path"],
            filename=saved["filename"],
            display=saved["display"],
            absolute_path=saved["absolute_path"],
            size=saved["size"],
            user_uuid=get_current_user()["uuid"],
            organization_uuid=org_uuid,
        )
        analyze_gcode.delay(gcode_id)
    except (IOError, OSError) as e:
        return abort(make_response(jsonify(message=str(e)), 500))
    return (
        jsonify(
            make_gcode_response({
                "uuid": gcode_id,
                "organization_uuid": org_uuid,
                "user_uuid": get_current_user()["uuid"],
                "username": get_current_user()["username"],
                "path": saved["path"],
                "filename": saved["filename"],
                "display": saved["display"],
                "absolute_path": saved["absolute_path"],
                "uploaded": datetime.datetime.now(),
                "size": saved["size"],
            })),
        201,
    )
示例#17
0
 def test_delete_org_admin(self):
     gcode_uuid = gcodes.add_gcode(
         uuid=guid.uuid4(),
         path="delete-ab/c",
         filename="delete-gcode-specific-file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER2,
         organization_uuid=UUID_ORG2,
     )
     with app.test_client() as c:
         c.set_cookie("localhost", "access_token_cookie", TOKEN_USER)
         response = c.delete(
             "/organizations/%s/gcodes/%s" % (UUID_ORG2, gcode_uuid),
             headers={"x-csrf-token": TOKEN_USER_CSRF},
         )
         self.assertEqual(response.status_code, 204)
示例#18
0
 def test_download(self):
     mock_file = tempfile.NamedTemporaryFile(delete=False)
     gcode_id = gcodes.add_gcode(
         path="a/b/c",
         filename="file1",
         display="file-display",
         absolute_path=mock_file.name,
         size=123,
         user_uuid=UUID_USER,
     )
     with app.test_client() as c:
         c.set_cookie("localhost", "access_token_cookie", TOKEN_USER)
         response = c.get(
             "/gcodes/%s/data" % gcode_id, headers={"x-csrf-token": TOKEN_USER_CSRF},
         )
         self.assertEqual(response.status_code, 200)
     mock_file.close()
     os.remove(mock_file.name)
示例#19
0
 def test_delete(self):
     gcode_id = gcodes.add_gcode(
         path="a/b/c",
         filename="file",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
     )
     printjob_id = printjobs.add_printjob(
         gcode_id=gcode_id,
         gcode_data={"id": gcode_id},
         printer_ip="172.16.236.11:8080",
         printer_data={"ip": "172.16.236.11:8080"},
     )
     with app.test_client() as c:
         response = c.delete("/printjobs/%s" % printjob_id)
         self.assertEqual(response.status_code, 204)
     self.assertEqual(printjobs.get_printjob(printjob_id), None)
示例#20
0
 def setUp(self):
     self.gcode_uuid = gcodes.add_gcode(
         uuid=guid.uuid4(),
         path="a/b/c",
         filename="file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER,
         organization_uuid=UUID_ORG,
     )
     self.printjob_id = printjobs.add_printjob(
         gcode_uuid=self.gcode_uuid,
         gcode_data={"uuid": self.gcode_uuid},
         printer_uuid="20e91c14-c3e4-4fe9-a066-e69d53324a20",
         printer_data={
             "ip": "172.16.236.11",
             "port": 8080
         },
         user_uuid=UUID_USER,
         organization_uuid=UUID_ORG,
     )
示例#21
0
 def setUp(self):
     self.gcode_uuid = gcodes.add_gcode(
         uuid=guid.uuid4(),
         path="a/b/c",
         filename="file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER,
         organization_uuid=UUID_ORG,
     )
     self.gcode_uuid2 = gcodes.add_gcode(
         uuid=guid.uuid4(),
         path="a/b/c",
         filename="file1",
         display="file-display",
         absolute_path="/ab/a/b/c",
         size=123,
         user_uuid=UUID_USER,
         organization_uuid=UUID_ORG,
     )
     uuids = []
     for i in range(0, 7):
         uuids.append(guid.uuid4())
     uuids.sort(reverse=True)
     self.printjob_ids = []
     for i in range(0, 3):
         self.printjob_ids.append(
             printjobs.add_printjob(
                 uuid=uuids.pop(),
                 gcode_uuid=self.gcode_uuid,
                 gcode_data={"uuid": self.gcode_uuid},
                 printer_uuid="20e91c14-c3e4-4fe9-a066-e69d53324a20",
                 printer_data={
                     "ip": "172.16.236.11",
                     "port": 8080
                 },
                 user_uuid=UUID_USER,
                 organization_uuid=UUID_ORG,
             ))
     for i in range(0, 3):
         self.printjob_ids.append(
             printjobs.add_printjob(
                 uuid=uuids.pop(),
                 gcode_uuid=self.gcode_uuid2,
                 gcode_data={"uuid": self.gcode_uuid2},
                 printer_uuid="e24a9711-aabc-48f0-b790-eac056c43f07",
                 printer_data={
                     "ip": "172.16.236.12",
                     "port": 8080
                 },
                 user_uuid=UUID_USER,
                 organization_uuid=UUID_ORG,
             ))
     printjobs.add_printjob(
         uuid=uuids.pop(),
         gcode_uuid=self.gcode_uuid2,
         gcode_data={"uuid": self.gcode_uuid2},
         printer_uuid="7e5129ad-08d0-42d1-b65c-847d3c636157",
         printer_data={
             "ip": "172.16.236.12",
             "port": 8080
         },
         user_uuid=UUID_USER,
         organization_uuid=UUID_ORG2,
     )