From 1b4d0bf57748fce66f21c3944aa80279e990fb5e Mon Sep 17 00:00:00 2001 From: Prabhat Singh <59395410+TestPrab@users.noreply.github.com> Date: Tue, 17 Aug 2021 03:18:55 +0530 Subject: [PATCH] updated routes (#1661) --- src/bcf/bcf/v3/bcfapi.py | 20 +- .../bcfserver/bcf/project.json | 373 +++++++ src/foundationserver/bcfserver/bcf/routes.py | 916 +++++++++--------- 3 files changed, 820 insertions(+), 489 deletions(-) diff --git a/src/bcf/bcf/v3/bcfapi.py b/src/bcf/bcf/v3/bcfapi.py index 7d54ee07c5..218caab3db 100644 --- a/src/bcf/bcf/v3/bcfapi.py +++ b/src/bcf/bcf/v3/bcfapi.py @@ -141,33 +141,43 @@ class BcfClient: def get(self, endpoint, params=None, is_auth_required=False): # TODO: handle error http status codes and raise exception. Follow error.json standard. headers = {"Authorization": "Bearer " + self.foundation_client.get_access_token()} - return requests.get(f"{self.baseurl}{endpoint}", headers=headers, params=params or None).json() + response = requests.get(f"{self.baseurl}{endpoint}", headers=headers, params=params or None) + if response.status_code == 200: + return response.json() + else: + raise Exception(f"{response.status_code}, {response.text}") def post(self, endpoint, data=None, params=None): headers = { "Authorization": "Bearer " + self.foundation_client.get_access_token(), "Content-type": "application/json", } - resp = requests.post( + response = requests.post( f"{self.baseurl}{endpoint}", headers=headers, params=params or None, data=data or None, ) - return resp.status_code, resp.text + if response.status_code == 201: + return response.status_code, response.text + else: + raise Exception(f"{response.status_code}, {response.text}") def put(self, endpoint, data=None, params=None): headers = { "Authorization": "Bearer " + self.foundation_client.get_access_token(), "Content-type": "application/json", } - resp = requests.put( + response = requests.put( f"{self.baseurl}{endpoint}", headers=headers, params=params or None, data=data or None, ) - return resp.status_code, resp.text + if response.status_code == 200: + return response.status_code, response.text + else: + raise Exception(f"{response.status_code}, {response.text}") def delete(self, endpoint, params=None): headers = {"Authorization": "Bearer " + self.foundation_client.get_access_token()} diff --git a/src/foundationserver/bcfserver/bcf/project.json b/src/foundationserver/bcfserver/bcf/project.json index d1be22bd72..8033bc5933 100644 --- a/src/foundationserver/bcfserver/bcf/project.json +++ b/src/foundationserver/bcfserver/bcf/project.json @@ -67,5 +67,378 @@ "comment_actions": [ "update" ] +}], +"Topics": [{ + "guid": "A245F4F2-2C01-B43B-B612-5E456BEF8116", + "server_assigned_id": "ISSUE-00001", + "creation_author": "Architect@example.com", + "title": "Example topic 1", + "labels": [ + "Architecture", + "Structural" + ], + "creation_date": "2013-10-21T17:34:22.409Z" +}, { + "guid": "A211FCC2-3A3B-EAA4-C321-DE22ABC8414", + "server_assigned_id": "ISSUE-00078", + "creation_author": "Architect@example.com", + "title": "Example topic 2", + "labels": [ + "Architecture", + "Heating", + "Electrical" + ], + "creation_date": "2014-11-19T14:24:11.316Z" +}, +{ + "guid": "B345F4F2-3A04-B43B-A713-5E456BEF8228", + "server_assigned_id": "ISSUE-00549", + "creation_author": "Architect@example.com", + "creation_date": "2016-08-01T17:34:22.409Z", + "topic_type": "Clash", + "topic_status": "open", + "title": "Example topic 3", + "priority": "high", + "labels": [ + "Architecture", + "Heating" + ], + "assigned_to": "harry.muster@example.com", + "bim_snippet": { + "snippet_type": "clash", + "is_external": true, + "reference": "https://example.com/bcf/1.0/ADFE23AA11BCFF444122BB", + "reference_schema": "https://example.com/bcf/1.0/clash.xsd" + }, + "authorization": { + "topic_actions": [ + "createComment", + "createViewpoint" + ] + } +} +], +"Files":[{ + "display_information": [{ + "field_display_name": "Model Name", + "field_value": "ARCH-Z100-051" + }, { + "field_display_name": "Revision Date", + "field_value": "May 3 2020" + }], + "file": { + "ifc_project": "0J$yPqHBD12v72y4qF6XcD", + "file_name": "OfficeBuilding_Architecture_0001.ifc", + "reference": "https://example.com/files/0J$yPqHBD12v72y4qF6XcD_0001.ifc" + } +}, { + "display_information": [{ + "field_display_name": "Model Name", + "field_value": "MEP-Z100-015" + }, { + "field_display_name": "Revision Date", + "field_value": "Apr 30 2020" + }], + "file": { + "ifc_project": "3hwBHP91jBRwPsmyf$3Hea", + "file_name": "OfficeBuilding_Heating_0003.ifc", + "reference": "cf37bae6-0900-46be-b37f-b34754fe0b4a" + } +}], +"Comments":[ + { + "guid": "C4215F4D-AC45-A43A-D615-AA456BEF832B", + "date": "2016-08-01T12:34:22.409Z", + "author": "max.muster@example.com", + "comment": "Clash found", + "topic_guid": "B345F4F2-3A04-B43B-A713-5E456BEF8228", + "authorization": { + "comment_actions": [ + "update" + ] + } + }, + { + "guid": "A333FCA8-1A31-CAAC-A321-BB33ABC8414", + "date": "2016-08-01T14:24:11.316Z", + "author": "bob.heater@example.com", + "comment": "will rework the heating model", + "topic_guid": "B345F4F2-3A04-B43B-A713-5E456BEF8228" + } + ], +"RelatedTopics":[{ + "related_topic_guid": "db49df2b-0e42-473b-a3ee-f7b785d783c4" +}, { + "related_topic_guid": "6963a846-54d1-4050-954d-607cd5e48aa3" +}], +"Viewpoints":[{ + "guid": "b24a82e9-f67b-43b8-bda0-4946abf39624", + "perspective_camera": { + "camera_view_point": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "camera_direction": { + "x": 1.0, + "y": 1.0, + "z": 2.0 + }, + "camera_up_vector": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "field_of_view": 90.0, + "aspect_ratio": 1.33 + }, + "lines": [{ + "start_point": { + "x": 2.0, + "y": 1.0, + "z": 1.0 + }, + "end_point": { + "x": 0.0, + "y": 1.0, + "z": 0.7 + } + }], + "clipping_planes": [{ + "location": { + "x": 0.7, + "y": 0.3, + "z": -0.2 + }, + "direction": { + "x": 1.0, + "y": 0.4, + "z": 0.1 + } + }] +}, { + "guid": "a11a82e7-e66c-34b4-ada1-5846abf39133", + "perspective_camera": { + "camera_view_point": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "camera_direction": { + "x": 1.0, + "y": 1.0, + "z": 2.0 + }, + "camera_up_vector": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "field_of_view": 90.0, + "aspect_ratio": 1.33 + }, + "lines": [{ + "start_point": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "end_point": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + }], + "clipping_planes": [{ + "location": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "direction": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + } + }], + "coloring": [ + { + "color": "#ff0000", + "components": [ + { + "ifc_guid": "2MF28NhmDBiRVyFakgdbCT", + "originating_system": "Example CAD Application", + "authoring_tool_id": "EXCAD/v1.0" + }, + { + "ifc_guid": "3$cshxZO9AJBebsni$z9Yk" + } + ] + } + ], + "visibility": { + "default_visibility": true, + "exceptions": [ + { + "ifc_guid": "2MF28NhmDBiRVyFakgdbCT", + "originating_system": "Example CAD Application", + "authoring_tool_id": "EXCAD/v1.0" + }, + { + "ifc_guid": "3$cshxZO9AJBebsni$z9Yk" + } + ], + "view_setup_hints": { + "spaces_visible": true, + "space_boundaries_visible": false, + "openings_visible": true + } + } +}, +{ + "guid": "a11a82e7-e66c-34b4-ada1-5846abf39133", + "index": 10, + "perspective_camera": { + "camera_view_point": { + "x": 0, + "y": 0, + "z": 0 + }, + "camera_direction": { + "x": 1, + "y": 1, + "z": 2 + }, + "camera_up_vector": { + "x": 0, + "y": 0, + "z": 1 + }, + "field_of_view": 90, + "aspect_ratio": 1.33 + }, + "lines": [ + { + "start_point": { + "x": 1, + "y": 1, + "z": 1 + }, + "end_point": { + "x": 0, + "y": 0, + "z": 0 + } + } + ], + "clipping_planes": [ + { + "location": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "direction": { + "x": 1, + "y": 0, + "z": 0 + } + } + ], + "bitmaps": [ + { + "guid": "20c1cb56-315f-4a0a-922d-ed7a4a8edf55", + "bitmap_type": "jpg", + "location": { + "x": 10, + "y": -10, + "z": 7 + }, + "normal": { + "x": -1, + "y": 1.25, + "z": 0 + }, + "up": { + "x": -5.4, + "y": -4.3, + "z": 1 + }, + "height": 1666 + } + ], + "snapshot": { + "snapshot_type": "png" + }, + "selection": [ + { + "ifc_guid": "2MF28NhmDBiRVyFakgdbCT", + "originating_system": "Example CAD Application", + "authoring_tool_id": "EXCAD/v1.0" + }, + { + "ifc_guid": "3$cshxZO9AJBebsni$z9Yk" + } + ] + }], +"DocumentReferences":[{ + "guid": "212ab37a-6122-448e-86fc-86503183b520", + "url": "http://example.com/files/LegalRequirements.pdf", + "description": "The legal requirements for buildings." +}, { + "guid": "6cbfe31d-95c3-4f4d-92a6-420c23698721", + "document_guid": "472ab37a-6122-448e-86fc-86503183b520", + "description": "The building owners global design parameters for buildings." +}], +"Documents":[{ + "guid": "472ab37a-6122-448e-86fc-86503183b520", + "filename": "LegalRequirements.pdf" +}, { + "guid": "6cbfe31d-95c3-4f4d-92a6-420c23698721", + "filename": "DesignParameters.pdf" +}], +"Events": [{ + "topic_guid": "A211FCC2-3A3B-EAA4-C321-DE22ABC8414", + "date": "2014-11-19T14:24:11.316Z", + "author": "Architect@example.com", + "events": [ + { + "type": "status_updated", + "value": "Closed" + } + ] +}, { + "topic_guid": "A245F4F2-2C01-B43B-B612-5E456BEF8116", + "date": "2013-10-21T17:34:22.409Z", + "author": "Architect@example.com", + "events": [ + { + "type": "type_updated", + "value": "Warning" + } + ] +}], +"EventComments":[{ + "comment_guid": "C4215F4D-AC45-A43A-D615-AA456BEF832B", + "topic_guid": "A211FCC2-3A3B-EAA4-C321-DE22ABC8414", + "date": "2014-11-19T14:24:11.316Z", + "author": "Architect@example.com", + "events": [ + { + "type": "comment_created", + "value": null + } + ] +}, { + "comment_guid": "C4215F4D-AC45-A43A-D615-AA456BEF832B", + "topic_guid": "A245F4F2-2C01-B43B-B612-5E456BEF8116", + "date": "2013-10-21T17:34:22.409Z", + "author": "Architect@example.com", + "events": [ + { + "type": "viewpoint_updated", + "value": "b24a82e9-f67b-43b8-bda0-4946abf39624" + } + ] }] } \ No newline at end of file diff --git a/src/foundationserver/bcfserver/bcf/routes.py b/src/foundationserver/bcfserver/bcf/routes.py index 9f11847e6a..699aa8011b 100644 --- a/src/foundationserver/bcfserver/bcf/routes.py +++ b/src/foundationserver/bcfserver/bcf/routes.py @@ -26,20 +26,19 @@ def validate_client(request): def invalid_user(): - response = jsonify({"error": "User not recognized"}) + response = jsonify({"message": "User not recognized"}) response.status = 401 return response def invalid_project(): response = jsonify({"message": "Project not found"}) - response.status = 404 + response.status_code = 404 return response @bcf.route("/projects") def projects(): - return invalid_user() if validate_client(request): return jsonify(jdata["Projects"]) return invalid_user() @@ -63,22 +62,15 @@ def project_details(project_id): @bcf.route("/projects/", methods=["PUT"]) def update_project(project_id): - access_token = validate_client(request) - if access_token and request.method == "PUT": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) + if validate_client(request) and request.method == "PUT": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + response = jsonify(data) return response - response = invalid_project() - return response + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//extensions") @@ -93,428 +85,433 @@ def extensions(project_id): @bcf.route("/projects//topics") def topics(project_id): - access_token = validate_client(request) - if access_token: - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - response = app.response_class( - response=jdata["Topics"], - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request): + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + return jsonify(jdata["Topics"]) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics/", methods=["POST"]) def create_topic(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "POST": - body = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=body, - status=201, - mimetype="application/json", - ) + + if validate_client(request) and request.method == "POST": + body = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + response = jsonify(body) + response.status_code = 201 return response - response = invalid_project() - return response + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics/") def topic_details(project_id, topic_id): - access_token = validate_client(request) - if access_token: - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=j, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request): + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify(topic) + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics/", methods=["PUT"]) def update_topic(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "PUT": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request) and request.method == "PUT": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify(data) + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics/", methods=["DELETE"]) def delete_topic(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "DELETE": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - message = {"DELETED"} - response = app.response_class( - response=json.dumps(message), - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request) and request.method == "DELETE": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify({"OK"}) + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//snippet", methods=["GET"]) def get_snippet(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=json.dumps("Snippet test successfull"), - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify({"Get Snippet Executed successfully"}) + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//snippet", methods=["PUT"]) def update_snippet(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "PUT": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request) and request.method == "PUT": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify(data) + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//files_information", methods=["GET"]) def get_files_information(project_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - response = app.response_class( - response=jdata["Files"], - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + return jsonify(jdata["Files"]) + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//files", methods=["GET"]) def get_files(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=json.dumps("Get request for files successfull"), - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify("Get request for files successfull") + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//files", methods=["PUT"]) def update_files(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "PUT": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "PUT": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify(data) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//comments", methods=["GET"]) def get_comments(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=jdata["Comments"], - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify(jdata["Comments"]) + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//comments", methods=["POST"]) def create_comments(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "POST": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) + if validate_client(request) and request.method == "POST": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + response = jsonify(data) + response.status_code = 201 return response - response = invalid_project() - return response + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() -@bcf.route( - "/projects//topics//comments/", methods=["GET"] -) +@bcf.route("/projects//topics//comments/", methods=["GET"]) def get_comment(project_id, topic_id, comment_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - for k in jdata["Comments"]: - if (k["guid"]) == comment_id: - response = app.response_class( - response=k, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + for comment in jdata["Comments"]: + if (comment["guid"]) == comment_id: + return jsonify(comment) + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() -@bcf.route( - "/projects//topics//comments/", methods=["PUT"] -) +@bcf.route("/projects//topics//comments/", methods=["PUT"]) def update_comment(project_id, topic_id, comment_id): - access_token = validate_client(request) - if access_token and request.method == "PUT": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - for k in jdata["Comments"]: - if (k["guid"]) == comment_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request) and request.method == "PUT": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + for comment in jdata["Comments"]: + if (comment["guid"]) == comment_id: + return jsonify(data) + return invalid_project() else: - response = invalid_user() - return response + return invalid_user() -@bcf.route( - "/projects//topics//comments/", methods=["DELETE"] -) +@bcf.route("/projects//topics//comments/", methods=["DELETE"]) def delete_comment(project_id, topic_id, comment_id): - access_token = validate_client(request) - if access_token and request.method == "DELETE": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - for k in jdata["Comments"]: - if (k["guid"]) == comment_id: - message = {"DELETED"} - response = app.response_class( - response=json.dumps(message), - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + if validate_client(request) and request.method == "DELETE": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + for comment in jdata["Comments"]: + if (comment["guid"]) == comment_id: + return jsonify("OK") + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() -""" -***Add ViewPoints Routes Here *** -""" +@bcf.route("/projects//topics//viewpoints", methods=["GET"]) +def get_viewpoints(project_id, topic_id): + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if project["project_id"] == project_id: + for topic in jdata["Topics"]: + if topic["guid"] == topic_id: + return jsonify(jdata["Viewpoints"]) + return invalid_project() + else: + return invalid_user() + + +@bcf.route("/projects//topics//viewpoints", methods=["POST"]) +def create_viewpoints(project_id, topic_id): + if validate_client(request) and request.method == "POST": + for project in jdata["Projects"]: + if project["project_id"] == project_id: + for topic in jdata["Topics"]: + if topic["guid"] == topic_id: + data = request.get_json() + response = jsonify(data) + response.status_code = 201 + return response + return invalid_project() + else: + return invalid_user() + + +@bcf.route("/projects//topics//viewpoints/", methods=["GET"]) +def get_viewpoint(project_id, topic_id, viewpoint_id): + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if project["project_id"] == project_id: + for topic in jdata["Topics"]: + if topic["guid"] == topic_id: + for viewpoint in jdata["Viewpoints"]: + if viewpoint["guid"] == viewpoint_id: + response = jsonify(viewpoint) + response.status_code = 200 + return response + return invalid_project() + else: + return invalid_user() + + +@bcf.route("/projects//topics//viewpoints/", methods=["DELETE"]) +def delete_viewpoint(project_id, topic_id, viewpoint_id): + if validate_client(request) and request.method == "DELETE": + for project in jdata["Projects"]: + if project["project_id"] == project_id: + for topic in jdata["Topics"]: + if topic["guid"] == topic_id: + for viewpoint in jdata["Viewpoints"]: + if viewpoint["guid"] == viewpoint_id: + response = jsonify(viewpoint) + response.status_code = 200 + return response + return invalid_project() + else: + return invalid_user() + + +@bcf.route("/projects//topics//viewpoints//snapshot", methods=["GET"]) +def get_snapshot(project_id, topic_id, viewpoint_id): + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if project["project_id"] == project_id: + for topic in jdata["Topics"]: + if topic["guid"] == topic_id: + for viewpoint in jdata["Viewpoints"]: + if viewpoint["guid"] == viewpoint_id: + response = jsonify(viewpoint["snapshot"]) + response.status_code = 200 + return response + return invalid_project() + else: + return invalid_user() + + +@bcf.route("/projects//topics//viewpoints//bitmaps/", methods=["GET"]) +def get_bitmap(project_id, topic_id, viewpoint_id, bitmap_id): + if validate_client(request): + for project in jdata["Projects"]: + if project["project_id"] == project_id: + for topic in jdata["Topics"]: + if topic["guid"] == topic_id: + for viewpoint in jdata["Viewpoints"]: + if viewpoint["guid"] == viewpoint_id: + for bitmap in viewpoint["bitmaps"]: + if bitmap["guid"] == bitmap_id: + response = jsonify(bitmap) + response.status_code = 200 + return response + return invalid_project() + else: + return invalid_user() + + +@bcf.route("/projects//topics//viewpoints//selection", methods=["GET"]) +def get_selection(project_id, topic_id, viewpoint_id): + if validate_client(request): + for project in jdata["Projects"]: + if project["project_id"] == project_id: + for topic in jdata["Topics"]: + if topic["guid"] == topic_id: + for viewpoint in jdata["Viewpoints"]: + if viewpoint["guid"] == viewpoint_id: + response = jsonify(viewpoint["selection"]) + response.status_code = 200 + return response + return invalid_project() + else: + return invalid_user() + + +@bcf.route("/projects//topics//viewpoints//coloring", methods=["GET"]) +def get_coloring(project_id, topic_id, viewpoint_id): + if validate_client(request): + for project in jdata["Projects"]: + if project["project_id"] == project_id: + for topic in jdata["Topics"]: + if topic["guid"] == topic_id: + for viewpoint in jdata["Viewpoints"]: + if viewpoint["guid"] == viewpoint_id: + response = jsonify(viewpoint["coloring"]) + response.status_code = 200 + return response + return invalid_project() + else: + return invalid_user() + + +@bcf.route("/projects//topics//viewpoints//visibility", methods=["GET"]) +def get_visibility(project_id, topic_id, viewpoint_id): + if validate_client(request): + for project in jdata["Projects"]: + if project["project_id"] == project_id: + for topic in jdata["Topics"]: + if topic["guid"] == topic_id: + for viewpoint in jdata["Viewpoints"]: + if viewpoint["guid"] == viewpoint_id: + response = jsonify(viewpoint["visibility"]) + response.status_code = 200 + return response + return invalid_project() + else: + return invalid_user() @bcf.route("/projects//topics//related_topics", methods=["GET"]) def get_related_topics(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=jdata["RelatedTopics"], - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify(jdata["RelatedTopics"]) + return invalid_project() return response else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//related_topics", methods=["PUT"]) def update_related_topics(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "PUT": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "PUT": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify(data) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() -@bcf.route( - "/projects//topics//document_references", methods=["GET"] -) +@bcf.route("/projects//topics//document_references", methods=["GET"]) def get_document_references(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=jdata["DocumentReferences"], - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify(jdata["DocumentReferences"]) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() -@bcf.route( - "/projects//topics//document_references", methods=["POST"] -) +@bcf.route("/projects//topics//document_references", methods=["POST"]) def create_document_references(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "POST": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) + + if validate_client(request) and request.method == "POST": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + response = jsonify(data) + response.status_code = 201 return response - response = invalid_project() - return response + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route( @@ -522,156 +519,113 @@ def create_document_references(project_id, topic_id): methods=["PUT"], ) def update_document_references(project_id, topic_id, document_reference_id): - access_token = validate_client(request) - if access_token and request.method == "PUT": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - for k in jdata["DocumentReferences"]: - if (k["guid"]) == document_reference_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "PUT": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + for document in jdata["DocumentReferences"]: + if (document["guid"]) == document_reference_id: + return jsonify(data) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//documents", methods=["GET"]) def get_documents(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=jdata["Documents"], - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + return jsonify(jdata["Documents"]) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//documents", methods=["POST"]) def create_documents(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "POST": - data = request.form["data"] - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - response = app.response_class( - response=data, - status=200, - mimetype="application/json", - ) + + if validate_client(request) and request.method == "POST": + data = request.get_json() + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + response = jsonify(data) + response.status_code = 201 return response - response = invalid_project() - return response + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() -@bcf.route( - "/projects//topics//documents/", methods=["GET"] -) +@bcf.route("/projects//topics//documents/", methods=["GET"]) def get_document(project_id, topic_id, document_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - for k in jdata["Documents"]: - if (k["guid"]) == document_id: - response = app.response_class( - response=k, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + for document in jdata["Documents"]: + if (document["guid"]) == document_id: + return jsonify(document) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics/events", methods=["GET"]) def get_events(project_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - response = app.response_class( - response=jdata["Events"], - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + return jsonify(jdata["Events"]) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics//events", methods=["GET"]) def get_topic_events(project_id, topic_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - for k in jdata["Events"]: - if (k["topic_guid"]) == topic_id: - response = app.response_class( - response=k, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + for event in jdata["Events"]: + if (event["topic_guid"]) == topic_id: + return jsonify(event) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route("/projects//topics/comments/events", methods=["GET"]) def get_comments_events(project_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - response = app.response_class( - response=jdata["EventComments"], - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + return jsonify(jdata["EventComments"]) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user() @bcf.route( @@ -679,22 +633,16 @@ def get_comments_events(project_id): methods=["GET"], ) def get_comment_events(project_id, topic_id, comment_id): - access_token = validate_client(request) - if access_token and request.method == "GET": - for i in jdata["Projects"]: - if (i["project_id"]) == project_id: - for j in jdata["Topics"]: - if (j["guid"]) == topic_id: - for k in jdata["EventComments"]: - if (k["comment_guid"]) == comment_id: - response = app.response_class( - response=k, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response + + if validate_client(request) and request.method == "GET": + for project in jdata["Projects"]: + if (project["project_id"]) == project_id: + for topic in jdata["Topics"]: + if (topic["guid"]) == topic_id: + for comment in jdata["EventComments"]: + if (comment["comment_guid"]) == comment_id: + return jsonify(comment) + return invalid_project() + else: - response = invalid_user() - return response + return invalid_user()