diff --git a/server/app/database/__init__.py b/server/app/database/__init__.py index 2455faac0862b4755b7e2c64d95c070d63c6287a..92e6dc8eff7a09ed2dbef788238693e5dde51190 100644 --- a/server/app/database/__init__.py +++ b/server/app/database/__init__.py @@ -5,6 +5,7 @@ database. It can add, get, delete, edit, search and copy items. from app.apis import http_codes from flask_smorest import abort +from flask_smorest.pagination import PaginationParameters # from flask_restx import abort from flask_sqlalchemy import BaseQuery @@ -66,6 +67,8 @@ class ExtendedQuery(BaseQuery): :rtype: list, int """ + pagination_parameters = pagination_parameters or PaginationParameters(page=1, page_size=10) + if order_column: self = self.order_by(order_column if order == 1 else order_column.desc()) diff --git a/server/app/database/controller/search.py b/server/app/database/controller/search.py index aa25ebc3cf0fb9c165169e02f568bac80e0c3be3..1be280e4230f43d5cdbf95456bc1b849c8a23398 100644 --- a/server/app/database/controller/search.py +++ b/server/app/database/controller/search.py @@ -5,7 +5,7 @@ This file contains functionality to find data to the database. from app.database.models import Competition, Media, Question, Slide, User -def image(pagination_parameters, filename=None, order=1, order_by=None): +def image(pagination_parameters=None, filename=None, order=1, order_by=None): """ Finds and returns an image from the file name. """ query = Media.query.filter(Media.type_id == 1) @@ -16,7 +16,7 @@ def image(pagination_parameters, filename=None, order=1, order_by=None): def user( - pagination_parameters, + pagination_parameters=None, email=None, name=None, city_id=None, @@ -38,7 +38,7 @@ def user( def competition( - pagination_parameters, + pagination_parameters=None, name=None, year=None, city_id=None, @@ -57,13 +57,11 @@ def competition( def slide( + pagination_paramters=None, slide_order=None, title=None, body=None, competition_id=None, - page=0, - page_size=15, - order=1, order_by=None, ): """ Finds and returns a slide from the provided parameters. """ @@ -78,11 +76,7 @@ def slide( if competition_id: query = query.filter(Slide.competition_id == competition_id) - order_column = Slide.id # Default order_by - if order_by: - order_column = getattr(Slide.__table__.c, order_by) - - return query.pagination(page, page_size, order_column, order) + return query.paginate_api(pagination_paramters) def questions( diff --git a/server/tests/test_db.py b/server/tests/test_db.py index 9525f8971b904b5b3699349b0b328f9a0dc28b99..6d000820135b88f21c5ab85071ce9be1f3bd9e4a 100644 --- a/server/tests/test_db.py +++ b/server/tests/test_db.py @@ -84,13 +84,13 @@ def test_copy(client): add_default_values() # Fetches a competition - list_item_competitions, _ = dbc.search.competition(name="Tävling 1") + list_item_competitions = dbc.search.competition(name="Tävling 1") item_competition_original = list_item_competitions[0] # Fetches the first slide in that competition num_slides = 3 - item_slides, total = dbc.search.slide(competition_id=item_competition_original.id) - assert total == num_slides + item_slides = dbc.search.slide(competition_id=item_competition_original.id) + assert len(item_slides) == num_slides item_slide_original = item_slides[1] dbc.delete.slide(item_slides[0]) @@ -140,7 +140,6 @@ def test_copy(client): assert_all_slide_orders() -@pytest.mark.skipif(DISABLE_TESTS, reason="Only run when DISABLE_TESTS is enabled") def check_slides_copy(item_slide_original, item_slide_copy, num_slides, order): """ Checks that two slides are correct copies of each other. @@ -198,11 +197,11 @@ def check_slides_copy(item_slide_original, item_slide_copy, num_slides, order): assert a2.question_id == q2.id # Checks that the copy put the slide in the database - item_slides, total = dbc.search.slide( + item_slides = dbc.search.slide( competition_id=item_slide_copy.competition_id, # page_size=num_slides + 1, # Use this total > 15 ) - assert total == num_slides + assert len(item_slides) == num_slides assert item_slide_copy == item_slides[order]