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