Skip to content

Commit da58f1e

Browse files
author
Cameron Brandon White
committed
Merge pull request #21 from cameronbwhite/master
(gh-17) Added Pagination
2 parents 2d5653d + a0e8ca4 commit da58f1e

File tree

1 file changed

+64
-17
lines changed

1 file changed

+64
-17
lines changed

acmapi/resources.py

+64-17
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ def _get_membership_by_id(membership_id):
4747
def _get_officership_by_id(officership_id):
4848
return models.Officership.query.get(officership_id)
4949

50-
def _get_post_by_list(list_id):
51-
return models.Post.query.filter_by(
50+
def _get_post_by_list(list_id, page, pagesize):
51+
return list(models.Post.query.filter_by(
5252
list=list_id).order_by(
53-
models.Post.index).all()
53+
models.Post.index).limit(pagesize).offset(page-1))
5454

55-
def _get_event_by_list(list_id):
56-
return models.Event.query.filter_by(
55+
def _get_event_by_list(list_id, page, pagesize):
56+
return list(models.Event.query.filter_by(
5757
list=list_id).order_by(
58-
models.Event.index).all()
58+
models.Event.index).limit(pagesize).offset(page-1))
5959

6060
class Root(restful.Resource):
6161
@marshal_with(root_fields)
@@ -66,11 +66,18 @@ class Events(restful.Resource):
6666

6767
def get(self, event_id=None):
6868

69+
parser = reqparse.RequestParser(argument_class=CustomArgument)
70+
71+
parser.add_argument('page', type=int, default=1)
72+
parser.add_argument('pagesize', type=int)
73+
74+
args = parser.parse_args()
75+
6976
DB.create_all()
7077

7178
if event_id:
7279

73-
event = _get_event_by_list(event_id)
80+
event = _get_event_by_list(event_id, args.page, args.pagesize)
7481
if not event:
7582
_handle_error(LookupError('event not found'))
7683

@@ -87,12 +94,12 @@ def get(self, event_id=None):
8794
events = DB.session.query(models.Event)\
8895
.join(sub, models.Event.index==sub.c.max_index)\
8996
.filter(models.Event.list==sub.c.list)\
90-
.all()
97+
.limit(args.pagesize).offset(args.page-1)
9198

9299
return list(map(
93100
lambda event:
94101
marshal(event, event_fields),
95-
events))
102+
list(events)))
96103

97104
@AUTH.login_required
98105
def post(self):
@@ -111,6 +118,8 @@ def post(self):
111118
parser.add_argument('location', type=str)
112119
parser.add_argument('start', type=datetime_type, required=True)
113120
parser.add_argument('end', type=datetime_type, required=True)
121+
parser.add_argument('page', type=int, default=1)
122+
parser.add_argument('pagesize', type=int)
114123

115124
args = parser.parse_args()
116125

@@ -198,11 +207,18 @@ class Posts(restful.Resource):
198207

199208
def get(self, post_id=None):
200209

210+
parser = reqparse.RequestParser(argument_class=CustomArgument)
211+
212+
parser.add_argument('page', type=int, default=1)
213+
parser.add_argument('pagesize', type=int)
214+
215+
args = parser.parse_args()
216+
201217
DB.create_all()
202218

203219
if post_id:
204220

205-
posts = _get_post_by_list(post_id)
221+
posts = _get_post_by_list(post_id, args.page, args.pagesize)
206222
if not posts:
207223
_handle_error(LookupError('post not found'))
208224

@@ -219,12 +235,12 @@ def get(self, post_id=None):
219235
posts = DB.session.query(models.Post)\
220236
.join(sub, models.Post.index==sub.c.max_index)\
221237
.filter(models.Post.list==sub.c.list)\
222-
.all()
238+
.limit(args.pagesize).offset(args.page-1)
223239

224240
return list(map(
225241
lambda post:
226242
marshal(post, post_fields),
227-
posts))
243+
list(posts)))
228244

229245
@AUTH.login_required
230246
def post(self):
@@ -237,6 +253,8 @@ def post(self):
237253
parser.add_argument('description', type=str)
238254
parser.add_argument('content', type=str)
239255
parser.add_argument('hidden', type=bool, default=False)
256+
parser.add_argument('page', type=int, default=1)
257+
parser.add_argument('pagesize', type=int)
240258

241259
args = parser.parse_args()
242260

@@ -312,6 +330,13 @@ class People(restful.Resource):
312330

313331
def get(self, person_id=None, username=None):
314332

333+
parser = reqparse.RequestParser(argument_class=CustomArgument)
334+
335+
parser.add_argument('page', type=int, default=1)
336+
parser.add_argument('pagesize', type=int)
337+
338+
args = parser.parse_args()
339+
315340
DB.create_all()
316341

317342
if person_id or username:
@@ -332,12 +357,12 @@ def get(self, person_id=None, username=None):
332357

333358
else:
334359

335-
people = models.Person.query.all()
360+
people = models.Person.query.limit(args.pagesize).offset(args.page-1)
336361

337362
return list(map(
338363
lambda person:
339364
marshal(person, person_fields),
340-
people))
365+
list(people)))
341366

342367
@AUTH.login_required
343368
def post(self):
@@ -458,7 +483,14 @@ def delete(self, person_id=None, username=None):
458483
class Memberships(restful.Resource):
459484

460485
def get(self, membership_id=None):
461-
486+
487+
parser = reqparse.RequestParser(argument_class=CustomArgument)
488+
489+
parser.add_argument('page', type=int, default=1)
490+
parser.add_argument('pagesize', type=int)
491+
492+
args = parser.parse_args()
493+
462494
DB.create_all()
463495

464496
if membership_id:
@@ -475,7 +507,7 @@ def get(self, membership_id=None):
475507
return list(map(
476508
lambda membership:
477509
marshal(membership, membership_fields),
478-
models.Membership.query.all()))
510+
list(models.Membership.query.limit(args.pagesize).offset(args.page-1))))
479511

480512
@AUTH.login_required
481513
def post(self):
@@ -569,6 +601,13 @@ class Officerships(restful.Resource):
569601

570602
def get(self, officership_id=None):
571603

604+
parser = reqparse.RequestParser(argument_class=CustomArgument)
605+
606+
parser.add_argument('page', type=int, default=1)
607+
parser.add_argument('pagesize', type=int)
608+
609+
args = parser.parse_args()
610+
572611
DB.create_all()
573612

574613
if officership_id:
@@ -585,7 +624,7 @@ def get(self, officership_id=None):
585624
return list(map(
586625
lambda officership:
587626
marshal(officership, officership_fields),
588-
models.Officership.query.all()))
627+
list(models.Officership.query.limit(args.pagesize).offset(args.page-1))))
589628

590629
@AUTH.login_required
591630
def post(self):
@@ -675,6 +714,14 @@ class Database(restful.Resource):
675714

676715
@AUTH.login_required
677716
def get(self):
717+
718+
parser = reqparse.RequestParser(argument_class=CustomArgument)
719+
720+
parser.add_argument('page', type=int, default=1)
721+
parser.add_argument('pagesize', type=int)
722+
723+
args = parser.parse_args()
724+
678725
parsed_url = urlparse(current_app.config['SQLALCHEMY_DATABASE_URI'])
679726

680727
username, password, host, port = None, None, None, None

0 commit comments

Comments
 (0)