From e3254af379675cf164fb246c0761a5d040e6215f Mon Sep 17 00:00:00 2001 From: ernesthenry Date: Sat, 22 Dec 2018 01:13:35 -0800 Subject: [PATCH 1/6] [Deliver #162783265] initial commit for post API end point --- api/__init__.py | 3 +++ api/models.py | 33 +++++++++++++++++++++++++++++++++ api/routes.py | 42 ++++++++++++++++++++++++++++++++++++++++++ app.py | 4 ++++ requirements.txt | 6 ++++++ 5 files changed, 88 insertions(+) create mode 100644 api/__init__.py create mode 100644 api/models.py create mode 100644 api/routes.py create mode 100644 app.py create mode 100644 requirements.txt diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..238373f --- /dev/null +++ b/api/__init__.py @@ -0,0 +1,3 @@ +from flask import Flask +from api import routes +app = Flask(__name__) \ No newline at end of file diff --git a/api/models.py b/api/models.py new file mode 100644 index 0000000..24cff44 --- /dev/null +++ b/api/models.py @@ -0,0 +1,33 @@ +from datetime import datetime + +my_red_flags = [] + + +class Redflag: + + def __init__(self, createdBy, _type, place, status, Images, Videos, comment): + + self.id = len(my_red_flags) + 1 + self.createdOn = datetime.now() + self.createdBy = createdBy + self.type = _type + self.location = place + self.status = status + self.Images = Images + self.Videos = Videos + self.comment = comment + + def format_record(self): + + return { + + "id": self.id, + "createdOn": self.createdOn, + "createdBy": self.createdBy, + "type": self.type, + "location": self.location, + "status": self.status, + "Images": self.Images, + "Videos": self.Videos, + "comment": self.comment + } diff --git a/api/routes.py b/api/routes.py new file mode 100644 index 0000000..2756461 --- /dev/null +++ b/api/routes.py @@ -0,0 +1,42 @@ +from flask import Flask, jsonify, request +from models import Redflag, my_red_flags + + +app = Flask(__name__) + + +@app.route("/") +def hello_world(): + return "Hello Kato" + + +@app.route("/api/v1/red-flags", methods=["POST"]) +def create_redflag(): + data = request.get_json() + red_flag = Redflag(data["createdBy"], data["type"], data["location"], data["status"], data["Images"], + data["Videos"], data["comment"]) + + my_red_flags.append(red_flag.format_record()) + return jsonify({"status": 201, "data": red_flag.format_record()}) + + + + + + + + + + + + + + + + + + + + + + diff --git a/app.py b/app.py new file mode 100644 index 0000000..2d9ecd3 --- /dev/null +++ b/app.py @@ -0,0 +1,4 @@ +from api.routes import app + +if __name__ == "__main__": + app.run(debug = True) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6f02fb6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +Click==7.0 +Flask==1.0.2 +itsdangerous==1.1.0 +Jinja2==2.10 +MarkupSafe==1.1.0 +Werkzeug==0.14.1 From 83abf75a5e56f3a04421fcd1fb6a7d6b85ff18ca Mon Sep 17 00:00:00 2001 From: ernesthenry Date: Sat, 22 Dec 2018 01:45:14 -0800 Subject: [PATCH 2/6] [Deliver #162783265] Edit README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 41a8457..a8fdf16 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # iReporterAPI -Corruption is a huge bane to Africa’s development. African countries must develop novel and localised solutions that will curb this menace, hence the birth of iReporter. iReporter enables any/every citizen to bring any form of corruption to the notice of appropriate authorities and the general public. Users can also report on things that needs government intervention +Corruption is a huge bane to Africa’s development. African countries must develop novel and localised solutions that will curb this menace, hence the birth of iReporter. iReporter enables any/every citizen to bring any form of corruption to the notice of appropriate authorities and the general public. Users can also report on things that needs government intervention. iReporter is an App that is aimed at solving this. From 640dd4baae0442bd98808baa0aa4f06b07fb74ea Mon Sep 17 00:00:00 2001 From: ernesthenry Date: Sat, 22 Dec 2018 02:10:29 -0800 Subject: [PATCH 3/6] [Deliver #162783289] Get a specific red-flag record --- api/routes.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/api/routes.py b/api/routes.py index 2756461..a35afd2 100644 --- a/api/routes.py +++ b/api/routes.py @@ -19,7 +19,19 @@ def create_redflag(): my_red_flags.append(red_flag.format_record()) return jsonify({"status": 201, "data": red_flag.format_record()}) - +@app.route("/api/v1/red-flags", methods = [ "GET" ]) +def get_all_red_flags(): + if len(my_red_flags) > 0: + return jsonify({ "status": 200, "data": [red_flag for red_flag in my_red_flags]}) + return jsonify({ "status": 400, "Error": "There are no records"}) + +@app.route("/api/v1/red-flags/", methods = [ "GET" ]) +def get_a_redflag(id): + redflag = [red_flag for red_flag in my_red_flags if red_flag['id'] == id] + my_red_flags.append(red_flag) + if red_flag: + return jsonify({'redflag': red_flag}) + return jsonify({ "status": 404, "Error": " Invalid record"}) From 5cfd31d7eb0bad1b0538a48915c5f9330ab8299a Mon Sep 17 00:00:00 2001 From: ernesthenry Date: Tue, 8 Jan 2019 16:59:37 +0300 Subject: [PATCH 4/6] [Finishes #162783289] Get a specific red-flag record --- .gitignore | 3 ++ api/models.py | 4 +-- api/routes.py | 79 +++++++++++++++++++++++++++++++++++++-------------- 3 files changed, 63 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 894a44c..634300d 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ venv.bak/ # mypy .mypy_cache/ +.git.exe +iReporterAPI2.exe +.vscode diff --git a/api/models.py b/api/models.py index 24cff44..159115f 100644 --- a/api/models.py +++ b/api/models.py @@ -7,7 +7,7 @@ class Redflag: def __init__(self, createdBy, _type, place, status, Images, Videos, comment): - self.id = len(my_red_flags) + 1 + self._id = len(my_red_flags) + 1 self.createdOn = datetime.now() self.createdBy = createdBy self.type = _type @@ -21,7 +21,7 @@ def format_record(self): return { - "id": self.id, + "id": self._id, "createdOn": self.createdOn, "createdBy": self.createdBy, "type": self.type, diff --git a/api/routes.py b/api/routes.py index a35afd2..b142d79 100644 --- a/api/routes.py +++ b/api/routes.py @@ -1,37 +1,74 @@ from flask import Flask, jsonify, request -from models import Redflag, my_red_flags +from api.models import Redflag, my_red_flags app = Flask(__name__) - @app.route("/") def hello_world(): return "Hello Kato" +#API end point to create a red-flag record @app.route("/api/v1/red-flags", methods=["POST"]) def create_redflag(): - data = request.get_json() - red_flag = Redflag(data["createdBy"], data["type"], data["location"], data["status"], data["Images"], - data["Videos"], data["comment"]) - - my_red_flags.append(red_flag.format_record()) - return jsonify({"status": 201, "data": red_flag.format_record()}) - -@app.route("/api/v1/red-flags", methods = [ "GET" ]) + if not request.json: + return jsonify({ + "Error": "There is no data returned from the request", + "status": 400 + }), 400 + data = request.get_json() + if 'createdBy' not in data or 'comment' not in data or 'type' not in data or 'location' not in data or 'status' not in data: + return jsonify({'status': 400, 'Error': 'The information is missing'}), 400 + red_flag = Redflag( + data["createdBy"], data["type"], + data["location"], data["status"], data["Images"], + data["Videos"], data["comment"] + ) + my_red_flags.append( + red_flag.format_record() + ) + if len(my_red_flags) == 0: + return jsonify({ + "status": 400, + "Error": "Invalid request" + }) + return jsonify({ + "status": 201, + "data": [{ + "id": red_flag._id, + "Message": "Created red-flag record" + }]}), 200 + + + +#API end point to fetch all records +@app.route("/api/v1/red-flags", methods=["GET"]) def get_all_red_flags(): - if len(my_red_flags) > 0: - return jsonify({ "status": 200, "data": [red_flag for red_flag in my_red_flags]}) - return jsonify({ "status": 400, "Error": "There are no records"}) - -@app.route("/api/v1/red-flags/", methods = [ "GET" ]) -def get_a_redflag(id): - redflag = [red_flag for red_flag in my_red_flags if red_flag['id'] == id] - my_red_flags.append(red_flag) - if red_flag: - return jsonify({'redflag': red_flag}) - return jsonify({ "status": 404, "Error": " Invalid record"}) + if len(my_red_flags) > 0: + return jsonify({ + "status": 200, + "data": [red_flag for red_flag in my_red_flags] + }) + return jsonify({ + "status": 400, + "Error": "There are no records" + }) + +#API end point to fetch a specific record +@app.route("/api/v1/red-flags/", methods=["GET"]) +def get_a_redflag(flag_id): + red_flag_record= [red_flag for red_flag in my_red_flags if red_flag['id'] == flag_id] + if red_flag_record: + return jsonify({ + "status": 200, + "redflag": red_flag_record + }), 200 + return jsonify({ + "status": 404, + "Error": " Invalid record" + }) + From 1a9535091f2dbf8ad54d2c28883ae57ceca1b690 Mon Sep 17 00:00:00 2001 From: ernesthenry Date: Tue, 8 Jan 2019 17:34:46 +0300 Subject: [PATCH 5/6] ignored some files --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 634300d..ba580ef 100644 --- a/.gitignore +++ b/.gitignore @@ -103,5 +103,5 @@ venv.bak/ # mypy .mypy_cache/ .git.exe -iReporterAPI2.exe .vscode +iReporterAPI2.exe From 55afc0f7bf1de69846e3e9899dba8cb057d06ea9 Mon Sep 17 00:00:00 2001 From: ernesthenry Date: Tue, 8 Jan 2019 18:43:36 +0300 Subject: [PATCH 6/6] [finishes #163059468] Delete red flag --- api/routes.py | 16 ++++++++++++++++ coverage.yml | 1 + 2 files changed, 17 insertions(+) create mode 100644 coverage.yml diff --git a/api/routes.py b/api/routes.py index b142d79..9eca579 100644 --- a/api/routes.py +++ b/api/routes.py @@ -69,6 +69,22 @@ def get_a_redflag(flag_id): "Error": " Invalid record" }) + +# API end point to delete a specific record +@app.route("/api/v1/red-flags/", methods=["DELETE"]) +def delete_red_flag(flag_id): + red_flag_record = [flag for flag in my_red_flags if flag['id'] == flag_id] + if len(my_red_flags) == 0: + return jsonify({ + "status": "400", + "Error": "Invalid request" + }) + my_red_flags.remove(red_flag_record[0]) + return jsonify({ + 'result': True + }), 200 + + diff --git a/coverage.yml b/coverage.yml new file mode 100644 index 0000000..5ae0821 --- /dev/null +++ b/coverage.yml @@ -0,0 +1 @@ +repo_token: CjaAwOWxXj8kSfulofMGrBmaW7uBGCv58 \ No newline at end of file