From 238d5edc037710fdfcbd4e8c6c2ee462cd48b8da Mon Sep 17 00:00:00 2001 From: David Trattnig <david.trattnig@o94.at> Date: Thu, 25 Jun 2020 21:08:03 +0200 Subject: [PATCH] List playlog implementation. --- src/models.py | 6 +++-- src/rest/controllers/internal_controller.py | 8 +++--- src/service.py | 28 ++++++++++++++++++++- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/models.py b/src/models.py index 5fd43b4..fde3539 100644 --- a/src/models.py +++ b/src/models.py @@ -85,12 +85,14 @@ class PlayLog(db.Model): @staticmethod - def paginate(page, page_size): + def paginate(page, page_size, since_time=None): """ - Returns a list of entries for a given page. + Returns a list of entries for a given page and an start time (optional). """ def q(page=0, page_size=None): query = db.session.query(PlayLog) + if isinstance(since_time, datetime.datetime): + query = query.filter(PlayLog.track_start >= since_time) listen(query, 'before_compile', apply_limit(page, page_size), retval=True) return query diff --git a/src/rest/controllers/internal_controller.py b/src/rest/controllers/internal_controller.py index 3701d38..c000739 100644 --- a/src/rest/controllers/internal_controller.py +++ b/src/rest/controllers/internal_controller.py @@ -2,13 +2,13 @@ import connexion import six from src.rest.models.clock_info import ClockInfo # noqa: E501 -org.joda.time.* # noqa: E501 from src.rest.models.health_info import HealthInfo # noqa: E501 from src.rest.models.play_log_entry import PlayLogEntry # noqa: E501 from src.rest.models.status_entry import StatusEntry # noqa: E501 from src.rest import util from flask import current_app +from dateutil.parser import parse def activate_engine(engine_number): # noqa: E501 @@ -33,6 +33,7 @@ def add_playlog(): # noqa: E501 :rtype: PlayLogEntry """ service = current_app.config['SERVICE'] + service.store_playlog() def clock_info(): # noqa: E501 @@ -101,10 +102,9 @@ def list_playlog(date_time, page=None, limit=None): # noqa: E501 :rtype: List[PlayLogEntry] """ - if connexion.request.is_json: - date_time = .from_dict(connexion.request.get_json()) # noqa: E501 service = current_app.config['SERVICE'] - return 'do some magic!' + date_time = parse(date_time) + return service.list_playlog(page, limit, date_time) def log_engine_health(engine_number): # noqa: E501 diff --git a/src/service.py b/src/service.py index 6223f08..20173cb 100644 --- a/src/service.py +++ b/src/service.py @@ -61,11 +61,37 @@ class ApiService(): (List[PlayLogEntry]) """ if not size or size > 50 or size < 1: size = 20 - tracklist = PlayLog.paginate(page, size) + tracklist = PlayLog.paginate(page, size, None) tracklist_schema = TrackSchema(many=True) return tracklist_schema.dump(tracklist) + def list_playlog(self, page=None, size=None, since_time=None): + """ + Get paginated playlog entries for since the given timestamp. + + Args: + since_time (datetime): Get entries after this timestamp (e.g. '2020-08-29T09:12:33.001Z') + 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 + + Returns: + (List[PlayLogEntry]) + """ + tracklist = PlayLog.paginate(page, size, since_time) + tracklist_schema = TrackSchema(many=True) + return tracklist_schema.dump(tracklist) + + + def store_playlog(): + """ + Stores the passed playlog entry. + + Returns: + (PlayLogEntry) + """ + + def clock_info(self): """ Retrieves the currently playing playlist. -- GitLab