Skip to content

Commit

Permalink
[DOJOT-96] Feature - Sorting (#200)
Browse files Browse the repository at this point in the history
* Add sort options to device and template handlers

* Update apiary docs
  • Loading branch information
LuanEdCosta committed Sep 2, 2022
1 parent 0a64333 commit 0393bc5
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 6 deletions.
19 changes: 16 additions & 3 deletions DeviceManager/DeviceHandler.py
Expand Up @@ -10,7 +10,7 @@
import secrets
from flask import request, jsonify, Blueprint, make_response
from sqlalchemy.exc import IntegrityError
from sqlalchemy import or_, and_, func, text
from sqlalchemy import or_, and_, func, text, desc

from DeviceManager.utils import *
from DeviceManager.utils import create_id, get_pagination, format_response
Expand Down Expand Up @@ -261,10 +261,23 @@ def get_devices(token, params, sensitive_data=False):
pagination = {'page': params.get('page_number'), 'per_page': params.get('per_page'), 'error_out': False}

SORT_CRITERION = {
'id': Device.id,
'asc:id': Device.id,
'desc:id': desc(Device.id),
'label': Device.label,
None: Device.id
'asc:label': Device.label,
'desc:label': desc(Device.label),
'created': Device.created,
'asc:created': Device.created,
'desc:created': desc(Device.created),
'updated': Device.updated,
'asc:updated': Device.updated,
'desc:updated': desc(Device.updated),
None: None
}
sortBy = SORT_CRITERION.get(params.get('sortBy'))

sortBy = SORT_CRITERION.get(params.get('sortBy'), None)
LOGGER.debug(f" Sorting devices by {sortBy}")

attr_filter = []
query = params.get('attr')
Expand Down
14 changes: 14 additions & 0 deletions DeviceManager/TemplateHandler.py
Expand Up @@ -4,6 +4,7 @@
from flask_sqlalchemy import BaseQuery, Pagination
from sqlalchemy.exc import IntegrityError
from sqlalchemy.sql import text, collate, func
from sqlalchemy import desc

from DeviceManager.DatabaseHandler import db
from DeviceManager.DatabaseModels import handle_consistency_exception, assert_template_exists, assert_device_exists
Expand Down Expand Up @@ -122,10 +123,23 @@ def get_templates(params, token):
LOGGER.debug(f"... filter was added to query.")

SORT_CRITERION = {
'id': DeviceTemplate.id,
'asc:id': DeviceTemplate.id,
'desc:id': desc(DeviceTemplate.id),
'label': DeviceTemplate.label,
'asc:label': DeviceTemplate.label,
'desc:label': desc(DeviceTemplate.label),
'created': DeviceTemplate.created,
'asc:created': DeviceTemplate.created,
'desc:created': desc(DeviceTemplate.created),
'updated': DeviceTemplate.updated,
'asc:updated': DeviceTemplate.updated,
'desc:updated': desc(DeviceTemplate.updated),
None: None
}

sortBy = SORT_CRITERION.get(params.get('sortBy'), None)
LOGGER.debug(f" Sorting templates by {sortBy}")

LOGGER.debug(f"Sortby filter is {sortBy}")
if parsed_query:
Expand Down
6 changes: 3 additions & 3 deletions docs/apiary.apib
Expand Up @@ -152,7 +152,7 @@ Get the full list of templates with all their associated attributes.

+ sortBy: label (string, optional)

Return entries sorted by given field. Currently only `label` is supported.
Return entries sorted by given field. You can add the prefix `asc` to sort in ascending order or `desc` for descending. If you omit the prefix the default order will be `asc`. Supported fields: `id`, `asc:id`, `desc:id`, `label`, `asc:label`, `desc:label`, `created`, `asc:created`, `desc:created`, `updated`, `asc:updated`, `desc:updated`.

+ Request
+ Headers
Expand Down Expand Up @@ -897,7 +897,7 @@ the template ID from where the attributes came from. In this example, there is o

+ sortBy: label (string, optional)

Return entries sorted by given field. Currently only `label` is supported.
Return entries sorted by given field. You can add the prefix `asc` to sort in ascending order or `desc` for descending. If you omit the prefix the default order will be `asc`. Supported fields: `id`, `asc:id`, `desc:id`, `label`, `asc:label`, `desc:label`, `created`, `asc:created`, `desc:created`, `updated`, `asc:updated`, `desc:updated`.

+ Request List complete device information
+ Headers
Expand Down Expand Up @@ -1606,7 +1606,7 @@ the template ID from where the attributes came from. In this example, there is o

+ sortBy: label (string, optional)

Return entries sorted by given field. Currently only `label` is supported.
Return entries sorted by given field. You can add the prefix `asc` to sort in ascending order or `desc` for descending. If you omit the prefix the default order will be `asc`. Supported fields: `id`, `asc:id`, `desc:id`, `label`, `asc:label`, `desc:label`, `created`, `asc:created`, `desc:created`, `updated`, `asc:updated`, `desc:updated`.

+ Request List complete device information
+ Headers
Expand Down

0 comments on commit 0393bc5

Please sign in to comment.