Skip to content

Commit 02f1c83

Browse files
committed
GET /api/v2/cases/{case_identifier}/notes-directories should accept parameter per_page
1 parent 74166c4 commit 02f1c83

File tree

6 files changed

+36
-33
lines changed

6 files changed

+36
-33
lines changed

source/app/blueprints/rest/v2/case_routes/notes_directories.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
from app.blueprints.access_controls import ac_api_requires
2424
from app.blueprints.access_controls import ac_fast_check_current_user_has_case_access
25+
from app.blueprints.rest.parsing import parse_pagination_parameters
2526
from app.blueprints.rest.endpoints import response_api_created
2627
from app.blueprints.rest.endpoints import response_api_success
2728
from app.blueprints.rest.endpoints import response_api_deleted
@@ -64,7 +65,8 @@ def search(self, case_identifier):
6465
if not ac_fast_check_current_user_has_case_access(case_identifier, [CaseAccessLevel.full_access]):
6566
return ac_api_return_access_denied(case_identifier)
6667

67-
directories = notes_directories_filter(case_identifier)
68+
pagination_parameters = parse_pagination_parameters(request, default_order_by='name', default_direction='asc')
69+
directories = notes_directories_filter(case_identifier, pagination_parameters)
6870
return response_api_paginated(self._schema_search, directories)
6971

7072
def create(self, case_identifier):

source/app/business/notes_directories.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@
2323
from app.datamgmt.case.case_notes_db import get_directory
2424
from app.datamgmt.case.case_notes_db import delete_directory
2525
from app.datamgmt.case.case_notes_db import paginate_notes_directories
26+
from app.models.pagination_parameters import PaginationParameters
2627

2728

28-
def notes_directories_filter(case_identifier: int):
29-
return paginate_notes_directories(case_identifier)
29+
def notes_directories_filter(case_identifier: int, pagination_parameters: PaginationParameters):
30+
return paginate_notes_directories(case_identifier, pagination_parameters)
3031

3132

3233
def notes_directories_create(directory: NoteDirectory):

source/app/datamgmt/case/case_notes_db.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020
from sqlalchemy import or_
2121
from sqlalchemy.exc import IntegrityError
2222
from datetime import datetime
23+
from flask_sqlalchemy.pagination import Pagination
2324

2425
from app import db
2526
from app.datamgmt.persistence_error import PersistenceError
2627
from app.blueprints.iris_user import iris_current_user
2728
from app.datamgmt.manage.manage_attribute_db import get_default_custom_attributes
2829
from app.datamgmt.states import update_notes_state
29-
from app.models.comments import Comments, NotesComments
30+
from app.models.comments import Comments
31+
from app.models.comments import NotesComments
3032
from app.models.models import NoteDirectory
3133
from app.models.models import NoteRevisions
3234
from app.models.models import Notes
@@ -35,6 +37,8 @@
3537
from app.models.authorization import User
3638
from app.models.cases import Cases
3739
from app.models.models import Client
40+
from app.models.pagination_parameters import PaginationParameters
41+
from app.datamgmt.filtering import paginate
3842

3943

4044
def get_note(note_id):
@@ -164,7 +168,7 @@ def update_note_revision(note: Notes) -> bool:
164168
raise PersistenceError(e)
165169

166170

167-
def add_note(note_title, creation_date, user_id, caseid, directory_id, note_content=""):
171+
def add_note(note_title, creation_date, user_id, caseid, directory_id, note_content=''):
168172
note = Notes()
169173
note.note_title = note_title
170174
note.note_creationdate = note.note_lastupdate = creation_date
@@ -279,7 +283,7 @@ def add_note_group(group_title, caseid, userid, creationdate):
279283
db.session.commit()
280284

281285
if group_title == '':
282-
ng.group_title = "New notes group"
286+
ng.group_title = 'New notes group'
283287

284288
db.session.commit()
285289

@@ -420,7 +424,7 @@ def delete_note_comment(note_id, comment_id):
420424
Comments.comment_user_id == iris_current_user.id
421425
).first()
422426
if not comment:
423-
return False, "You are not allowed to delete this comment"
427+
return False, 'You are not allowed to delete this comment'
424428

425429
NotesComments.query.filter(
426430
NotesComments.comment_note_id == note_id,
@@ -430,7 +434,7 @@ def delete_note_comment(note_id, comment_id):
430434
db.session.delete(comment)
431435
db.session.commit()
432436

433-
return True, "Comment deleted"
437+
return True, 'Comment deleted'
434438

435439

436440
def get_directories_with_note_count(case_id):
@@ -454,16 +458,10 @@ def get_directories_with_note_count(case_id):
454458
return directories_with_note_count
455459

456460

457-
def paginate_notes_directories(case_id):
458-
query = NoteDirectory.query.filter_by(case_id=case_id).order_by(
459-
NoteDirectory.name.asc()
460-
)
461+
def paginate_notes_directories(case_id, pagination_parameters: PaginationParameters) -> Pagination:
462+
query = NoteDirectory.query.filter_by(case_id=case_id)
461463

462-
return query.paginate(
463-
#page=pagination_parameters.get_page(),
464-
#per_page=pagination_parameters.get_per_page(),
465-
error_out=False
466-
)
464+
return paginate(NoteDirectory, pagination_parameters, query)
467465

468466
def get_directory_with_note_count(directory):
469467
note_count = Notes.query.filter_by(directory_id=directory.id).count()

source/app/datamgmt/case/case_rfiles_db.py

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,11 @@
2525
from app.datamgmt.manage.manage_attribute_db import get_default_custom_attributes
2626
from app.datamgmt.states import update_evidences_state
2727
from app.models.models import CaseReceivedFile
28-
from app.models.comments import Comments, EvidencesComments
28+
from app.models.comments import Comments
29+
from app.models.comments import EvidencesComments
2930
from app.models.authorization import User
3031
from app.models.pagination_parameters import PaginationParameters
31-
from app.datamgmt.conversions import convert_sort_direction
32+
from app.datamgmt.filtering import paginate
3233

3334

3435
def get_rfiles(caseid):
@@ -45,18 +46,8 @@ def get_paginated_evidences(case_identifier, pagination_parameters: PaginationPa
4546
query = CaseReceivedFile.query.filter(
4647
CaseReceivedFile.case_id == case_identifier
4748
)
48-
order_func = convert_sort_direction(pagination_parameters.get_direction())
4949

50-
order_by = pagination_parameters.get_order_by()
51-
column = getattr(CaseReceivedFile, order_by)
52-
53-
query = query.order_by(order_func(column))
54-
55-
return query.paginate(
56-
page=pagination_parameters.get_page(),
57-
per_page=pagination_parameters.get_per_page(),
58-
error_out=False
59-
)
50+
return paginate(CaseReceivedFile, pagination_parameters, query)
6051

6152

6253
def add_rfile(evidence: CaseReceivedFile, caseid, user_id):

source/app/datamgmt/filtering.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,15 @@ def get_filtered_data(model,
209209
log.exception(e)
210210
raise BusinessProcessingError(f'Error parsing custom_conditions: {e}')
211211

212-
# Apply ordering if requested.
212+
return paginate(model, pagination_parameters, query)
213+
214+
215+
def paginate(model, pagination_parameters: PaginationParameters, query):
213216
order_by = pagination_parameters.get_order_by()
214217
if order_by is not None and hasattr(model, order_by):
215218
order_func = convert_sort_direction(pagination_parameters.get_direction())
216-
query = query.order_by(order_func(getattr(model, order_by)))
219+
column = getattr(model, order_by)
220+
query = query.order_by(order_func(column))
217221

218222
# Paginate and return the results.
219223
result = query.paginate(

tests/tests_rest_notes_directories.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,13 @@ def test_get_notes_directories_filter_should_return_total(self):
276276
self._subject.create(f'/api/v2/cases/{case_identifier}/notes-directories', body).json()
277277

278278
response = self._subject.get(f'/api/v2/cases/{case_identifier}/notes-directories').json()
279-
280279
self.assertEqual(1, response['total'])
281280

281+
def test_get_notes_directories_filter_should_accept_per_page_query_parameter(self):
282+
case_identifier = self._subject.create_dummy_case()
283+
body = {'name': 'directory_name'}
284+
self._subject.create(f'/api/v2/cases/{case_identifier}/notes-directories', body).json()
285+
self._subject.create(f'/api/v2/cases/{case_identifier}/notes-directories', body).json()
286+
287+
response = self._subject.get(f'/api/v2/cases/{case_identifier}/notes-directories', {'per_page': 1}).json()
288+
self.assertEqual(1, len(response['data']))

0 commit comments

Comments
 (0)