From 199bc86a88f9ebdde23d9acd4bb2186ead74d5ff Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 12 Aug 2021 17:56:58 +1000 Subject: [PATCH] Minor code review --- src/bcf/bcf/v3/bcfapi.py | 1 + src/foundationserver/README.md | 23 +++--- src/foundationserver/bcfserver/bcf/routes.py | 83 ++++++-------------- 3 files changed, 36 insertions(+), 71 deletions(-) diff --git a/src/bcf/bcf/v3/bcfapi.py b/src/bcf/bcf/v3/bcfapi.py index b2571573f8..7d54ee07c5 100644 --- a/src/bcf/bcf/v3/bcfapi.py +++ b/src/bcf/bcf/v3/bcfapi.py @@ -139,6 +139,7 @@ class BcfClient: self.baseurl = version["api_base_url"] 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() diff --git a/src/foundationserver/README.md b/src/foundationserver/README.md index b34b68c9a3..dc88f5ab4a 100644 --- a/src/foundationserver/README.md +++ b/src/foundationserver/README.md @@ -1,19 +1,16 @@ # Server-Test -1. Cd to the server directory i.e cd `IfcOpenShell\src\bcfserver` +``` +$ pip install -r requirements.txt +$ cd bcfserver/ +$ python +>>> from run import db +>>> db.create_all() +$ export FLASK_APP=run.py +$ flask run +``` -2. Set up the server by installing the dependencies - -3. Run `pip install -r requirements.txt` to install the dependencies - -4. In Python Shell, do the following - - - from run import db - - db.create_all() to setup the database table - -5. Run `set FLASK_APP=run.py` -6. Run `flask run` to start the server -7. Go to [http://localhost:5000](http://localhost:5000) to see the server +Go to [http://localhost:5000](http://localhost:5000) to see the server # Register the user diff --git a/src/foundationserver/bcfserver/bcf/routes.py b/src/foundationserver/bcfserver/bcf/routes.py index 1dc28e4ce7..9f11847e6a 100644 --- a/src/foundationserver/bcfserver/bcf/routes.py +++ b/src/foundationserver/bcfserver/bcf/routes.py @@ -26,38 +26,23 @@ def validate_client(request): def invalid_user(): - message = {"error": "User not recognized"} - response = app.response_class( - response=json.dumps(message), - status=200, - mimetype="application/json", - ) + response = jsonify({"error": "User not recognized"}) + response.status = 401 return response def invalid_project(): - message = {"error": "Project not found"} - response = app.response_class( - response=json.dumps(message), - status=400, - mimetype="application/json", - ) + response = jsonify({"message": "Project not found"}) + response.status = 404 return response @bcf.route("/projects") def projects(): - access_token = validate_client(request) - if access_token: - response = app.response_class( - response=jdata["Projects"], - status=200, - mimetype="application/json", - ) - return response - else: - response = invalid_user() - return response + return invalid_user() + if validate_client(request): + return jsonify(jdata["Projects"]) + return invalid_user() @bcf.route("/") @@ -68,21 +53,12 @@ def bcf_3(): @bcf.route("/projects/") def project_details(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=i, - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response - else: - response = invalid_user() - return response + if validate_client(request): + for project in jdata["Projects"]: + if project["project_id"] == project_id: + return jsonify(project) + return invalid_project() + return invalid_user() @bcf.route("/projects/", methods=["PUT"]) @@ -107,24 +83,15 @@ def update_project(project_id): @bcf.route("/projects//extensions") def extensions(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["Extensions"], - status=200, - mimetype="application/json", - ) - return response - response = invalid_project() - return response - else: - response = invalid_user() - return response + if validate_client(request): + for project in jdata["Projects"]: + if project["project_id"] == project_id: + return jsonify(jdata["Extensions"]) + return invalid_project() + return invalid_user() -@bcf.routes("/projects//topics") +@bcf.route("/projects//topics") def topics(project_id): access_token = validate_client(request) if access_token: @@ -143,8 +110,8 @@ def topics(project_id): return response -@bcf.routes("/projects//topics/", methods=["POST"]) -def topic_details(project_id, topic_id): +@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"] @@ -165,7 +132,7 @@ def topic_details(project_id, topic_id): return response -@bcf.routes("/projects//topics/") +@bcf.route("/projects//topics/") def topic_details(project_id, topic_id): access_token = validate_client(request) if access_token: @@ -598,7 +565,7 @@ def get_documents(project_id, topic_id): return response -@bcf.routes("/projects//topics//documents", methods=["POST"]) +@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":