From b76f78c79485e8375af39dbdd2cd7fc7b5ac7a8e Mon Sep 17 00:00:00 2001 From: David Trattnig <david.trattnig@o94.at> Date: Thu, 1 Oct 2020 15:50:21 +0200 Subject: [PATCH] From and to date filter for track service. #12 --- src/rest/controllers/internal_controller.py | 4 ++-- src/rest/controllers/public_controller.py | 17 +++++++++++++++-- src/service.py | 9 +++++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/rest/controllers/internal_controller.py b/src/rest/controllers/internal_controller.py index 7e75443..38c73ab 100644 --- a/src/rest/controllers/internal_controller.py +++ b/src/rest/controllers/internal_controller.py @@ -101,8 +101,8 @@ def list_playlog(from_date=None, to_date=None, page=None, limit=None, skip_synce td = None try: - fd = parse(from_date) - td = parse(to_date) + fd = util.deserialize_datetime(from_date) + td = util.deserialize_datetime(to_date) except Exception: service.logger.info("Invalid 'from_date' (%s) or 'to_date' (%s) for 'list_playlog'" % (str(from_date), str(to_date))) diff --git a/src/rest/controllers/public_controller.py b/src/rest/controllers/public_controller.py index cdd0ba4..ffeea84 100644 --- a/src/rest/controllers/public_controller.py +++ b/src/rest/controllers/public_controller.py @@ -18,11 +18,15 @@ def current_track(): # noqa: E501 return service.current_track() -def list_tracks(page=None, limit=None): # noqa: E501 +def list_tracks(from_date=None, to_date=None, page=None, limit=None): # noqa: E501 """List recent tracks in the play-log Lists the track-service entries for a given page. # noqa: E501 + :param from_date: Get entries after this timestamp + :type from_date: str + :param to_date: Get entries before this timestamp + :type to_date: str :param page: The number of items to skip before starting to collect the result set :type page: int :param limit: The numbers of items to return per page @@ -31,4 +35,13 @@ def list_tracks(page=None, limit=None): # noqa: E501 :rtype: List[Track] """ service = current_app.config['SERVICE'] - return service.list_tracks(page, limit) + fd = None + td = None + + try: + fd = util.deserialize_datetime(from_date) + td = util.deserialize_datetime(to_date) + except Exception: + service.logger.info("Invalid 'from_date' (%s) or 'to_date' (%s) for 'list_tracks'" % (str(from_date), str(to_date))) + + return service.list_tracks(page, limit, fd, td) \ No newline at end of file diff --git a/src/service.py b/src/service.py index 1ed2ad0..e1028b1 100644 --- a/src/service.py +++ b/src/service.py @@ -104,19 +104,20 @@ class ApiService(): return track_schema.dump(track) - def list_tracks(self, page=None, size=None): + def list_tracks(self, page=None, size=None, from_time=None, to_time=None): """ Lists track-service entries with pagination. Args: page (Integer): The number of the page to return size (Integer): The numbers of items to return - + from_time (datetime): Optionally, get entries after this timestamp (e.g. "2020-08-29T09:12:33.001Z") + to_time (datetime): Optionally, get entries before this timestamp (e.g. "2020-08-29T09:12:33.001Z") Returns: (JSON) """ if not size or size > 50 or size < 1: size = 20 - tracklist = PlayLog.paginate(page, size, None, None, False) + tracklist = PlayLog.paginate(page, size, from_time, to_time, False) tracklist_schema = TrackSchema(many=True) return tracklist_schema.dump(tracklist) @@ -129,7 +130,7 @@ class ApiService(): page (Integer): The number of items to skip before starting to collect the result set size (Integer): The numbers of items to return per page from_time (datetime): Optionally, get entries after this timestamp (e.g. "2020-08-29T09:12:33.001Z") - from_time (datetime): Optionally, get entries before this timestamp (e.g. "2020-08-29T09:12:33.001Z") + to_time (datetime): Optionally, get entries before this timestamp (e.g. "2020-08-29T09:12:33.001Z") skip_synced (Boolean): Optionally, don't return entries which have been posted directly before (sync node only) Returns: -- GitLab