From ea6da1159b20523d7dbf6807a37df715acfa96c3 Mon Sep 17 00:00:00 2001 From: ipaullly Date: Tue, 6 Nov 2018 02:30:22 +0300 Subject: [PATCH 1/4] [starts #161737782] build model and view for parcels POST api --- app/api/v1/__init__.py | 4 +++- app/api/v1/models.py | 21 +++++++++++++++++++++ app/api/v1/views.py | 18 ++++++++++++++++-- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/app/api/v1/__init__.py b/app/api/v1/__init__.py index af06015..62908e1 100644 --- a/app/api/v1/__init__.py +++ b/app/api/v1/__init__.py @@ -1,7 +1,9 @@ from flask import Blueprint from flask_restful import Api - +from .views import ParcelList version1 = Blueprint('v1', __name__, url_prefix="/api/v1") api = Api(version1) + +api.add_resource(ParcelList, '/parcels') \ No newline at end of file diff --git a/app/api/v1/models.py b/app/api/v1/models.py index e69de29..ca04c2f 100644 --- a/app/api/v1/models.py +++ b/app/api/v1/models.py @@ -0,0 +1,21 @@ + +parcels = [] + +class Parcels: + + def __init__(self): + self.db = parcels + + def create_order(self, item, pickup, dest, pricing): + payload = { + "id" : len(self.db) + 1, + "itemName" : item, + "pickupLocation" : pickup, + "destination" : dest, + "pricing" : pricing + } + self.db.append(payload) + + def order(self): + return self.db + \ No newline at end of file diff --git a/app/api/v1/views.py b/app/api/v1/views.py index 2842140..1ed81bc 100644 --- a/app/api/v1/views.py +++ b/app/api/v1/views.py @@ -1,12 +1,26 @@ from flask_restful import Resource from flask import make_response, jsonify, request +from .models import Parcels -class ParcelList(Resource): +class ParcelList(Resource, Parcels): + + def __init__(self): + self.order = Parcels() def post(self): - pass + data = request.get_json() + item = data['item'] + pickup = data['pickup'] + dest = data['dest'] + pricing = data['pricing'] + + self.order.create_order(item, pickup, dest, pricing) + return make_response(jsonify({ + "message" : "delivery order created successfully" + }), 201) + def get(self): pass From 26d00318e58b2fa11828f327c4afe0ede2de3dbb Mon Sep 17 00:00:00 2001 From: ipaullly Date: Tue, 6 Nov 2018 14:48:16 +0300 Subject: [PATCH 2/4] [starts #161748253] Create GET delivery order list --- app/api/v1/models.py | 2 +- app/api/v1/views.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/api/v1/models.py b/app/api/v1/models.py index ca04c2f..4a9dd80 100644 --- a/app/api/v1/models.py +++ b/app/api/v1/models.py @@ -16,6 +16,6 @@ def create_order(self, item, pickup, dest, pricing): } self.db.append(payload) - def order(self): + def order_list(self): return self.db \ No newline at end of file diff --git a/app/api/v1/views.py b/app/api/v1/views.py index 1ed81bc..153f45a 100644 --- a/app/api/v1/views.py +++ b/app/api/v1/views.py @@ -2,7 +2,7 @@ from flask import make_response, jsonify, request from .models import Parcels - +cancelled = 'cancel' class ParcelList(Resource, Parcels): def __init__(self): @@ -22,7 +22,12 @@ def post(self): }), 201) def get(self): - pass + resp = self.order.order_list() + return make_response(jsonify({ + "message" : "ok" + "Delivery Orders" : resp + }), 200) + class IndividualParcel(Resource): @@ -30,4 +35,5 @@ def get(self, id): pass def put(self, id): - pass \ No newline at end of file + pass + \ No newline at end of file From 67006a92b1723460c94a33d9d02a1ca24ef4da06 Mon Sep 17 00:00:00 2001 From: ipaullly Date: Wed, 7 Nov 2018 00:44:46 +0300 Subject: [PATCH 3/4] [starts #161766269]Build API to retrieve single order --- app/api/v1/__init__.py | 5 +++-- app/api/v1/models.py | 5 +++++ app/api/v1/views.py | 24 ++++++++++++++---------- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/api/v1/__init__.py b/app/api/v1/__init__.py index 62908e1..a419e8f 100644 --- a/app/api/v1/__init__.py +++ b/app/api/v1/__init__.py @@ -1,9 +1,10 @@ from flask import Blueprint from flask_restful import Api -from .views import ParcelList +from .views import ParcelList, IndividualParcel version1 = Blueprint('v1', __name__, url_prefix="/api/v1") api = Api(version1) -api.add_resource(ParcelList, '/parcels') \ No newline at end of file +api.add_resource(ParcelList, '/parcels') +api.add_resource(IndividualParcel, '/parcels/') \ No newline at end of file diff --git a/app/api/v1/models.py b/app/api/v1/models.py index 4a9dd80..53b78ac 100644 --- a/app/api/v1/models.py +++ b/app/api/v1/models.py @@ -18,4 +18,9 @@ def create_order(self, item, pickup, dest, pricing): def order_list(self): return self.db + + def retrieve_single_order(self, parcelID): + order_by_id = [parc for parc in self.db if parc['id'] == parcelID][0] + return order_by_id + \ No newline at end of file diff --git a/app/api/v1/views.py b/app/api/v1/views.py index 153f45a..a4ebb90 100644 --- a/app/api/v1/views.py +++ b/app/api/v1/views.py @@ -2,11 +2,9 @@ from flask import make_response, jsonify, request from .models import Parcels -cancelled = 'cancel' -class ParcelList(Resource, Parcels): +order = Parcels() - def __init__(self): - self.order = Parcels() +class ParcelList(Resource): def post(self): data = request.get_json() @@ -15,16 +13,17 @@ def post(self): dest = data['dest'] pricing = data['pricing'] - self.order.create_order(item, pickup, dest, pricing) - + order.create_order(item, pickup, dest, pricing) + orders = order.db return make_response(jsonify({ - "message" : "delivery order created successfully" + "message" : "delivery order created successfully", + "orders" : orders }), 201) def get(self): - resp = self.order.order_list() + resp = order.order_list() return make_response(jsonify({ - "message" : "ok" + "message" : "ok", "Delivery Orders" : resp }), 200) @@ -32,7 +31,12 @@ def get(self): class IndividualParcel(Resource): def get(self, id): - pass + single = order.retrieve_single_order(id) + return make_response(jsonify({ + "message" : "Ok", + "order" : single + }), 200) + def put(self, id): pass From 37f0d14487b07c0cefe5cd431fd8b9d3f7efdf11 Mon Sep 17 00:00:00 2001 From: ipaullly Date: Wed, 7 Nov 2018 00:53:12 +0300 Subject: [PATCH 4/4] [finishes #161766269] Add class and methods docstrings --- app/api/v1/models.py | 13 ++++++++++++- app/api/v1/views.py | 18 +++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/app/api/v1/models.py b/app/api/v1/models.py index 53b78ac..6e24a12 100644 --- a/app/api/v1/models.py +++ b/app/api/v1/models.py @@ -2,11 +2,16 @@ parcels = [] class Parcels: - + """ + Class with CRUD functionalities on the Parcels resource + """ def __init__(self): self.db = parcels def create_order(self, item, pickup, dest, pricing): + """ + instance method to generate new entry into delivery orders list + """ payload = { "id" : len(self.db) + 1, "itemName" : item, @@ -17,9 +22,15 @@ def create_order(self, item, pickup, dest, pricing): self.db.append(payload) def order_list(self): + """ + retrieves entire list of delivery orders + """ return self.db def retrieve_single_order(self, parcelID): + """ + retrive a single order by id + """ order_by_id = [parc for parc in self.db if parc['id'] == parcelID][0] return order_by_id diff --git a/app/api/v1/views.py b/app/api/v1/views.py index a4ebb90..6f0b6be 100644 --- a/app/api/v1/views.py +++ b/app/api/v1/views.py @@ -5,8 +5,13 @@ order = Parcels() class ParcelList(Resource): - + """ + class for Create order and retrieve list of orders API endpoints + """ def post(self): + """ + post method to add new order to list of orders + """ data = request.get_json() item = data['item'] pickup = data['pickup'] @@ -21,16 +26,23 @@ def post(self): }), 201) def get(self): + """ + get method to retrieve list of all orders + """ resp = order.order_list() return make_response(jsonify({ "message" : "ok", "Delivery Orders" : resp }), 200) - class IndividualParcel(Resource): - + """ + class for API endpoints for retrieving single order and cancelling particular order + """ def get(self, id): + """ + get method to retrieve order by id + """ single = order.retrieve_single_order(id) return make_response(jsonify({ "message" : "Ok",