From bbb16bb3c2fb902e7b5ad8b7d5e015736bc8b2be Mon Sep 17 00:00:00 2001 From: lamusmaser <1940060+lamusmaser@users.noreply.github.com> Date: Tue, 14 Jun 2022 20:15:59 -0600 Subject: [PATCH] Update TaskAPIView with GET - #257 PR (#258) * Initial commit for GET response for TaskAPIView. * Update for missing space - linting issue. * Additional linting fixes. * add is_locked method to check if lock is set * Update to use `.is_locked` method and add decorator. * Fix linting issue. * Fix doubled "rescan" call for locked file. Removed call to ".owned()" under "is_locked". * Commenting out GET call in TaskAPI view to revert change for testing. * Commenting is_locked function to see if Server Response 500 is stopped. * Reassert is_locked function within RedisArchivist class. * Create test GET responder. * Reverting simple GET response change. * Reapplying simple GET response for `/api/task/`. * Reapplying change with modification to lock key. * Documentation update for new GET calls. * README: fix returned value as `bool` instead of `str`. * Updating the `is_locked` key reference to "rescan" and "downloading" to fix which key is being retrieved. * Use dictionary keys, rather than line-by-line statements. * Fix typo in README for Task View. Co-authored-by: simon --- tubearchivist/api/README.md | 14 ++++++++++++++ tubearchivist/api/views.py | 11 +++++++++++ tubearchivist/home/src/ta/ta_redis.py | 6 ++++++ 3 files changed, 31 insertions(+) diff --git a/tubearchivist/api/README.md b/tubearchivist/api/README.md index c0889d3..0316b3e 100644 --- a/tubearchivist/api/README.md +++ b/tubearchivist/api/README.md @@ -202,6 +202,20 @@ When valid returns message with user id: ``` ## Task View +GET /api/task/ +POST /api/task/ + +Check if there is an ongoing task: +GET /api/task/ + +Returns: +```json +{ + "rescan": false, + "downloading": false +} +``` + Start a background task POST /api/task/ ```json diff --git a/tubearchivist/api/views.py b/tubearchivist/api/views.py index d1165c2..f695fab 100644 --- a/tubearchivist/api/views.py +++ b/tubearchivist/api/views.py @@ -452,9 +452,20 @@ class LoginApiView(ObtainAuthToken): class TaskApiView(ApiBaseView): """resolves to /api/task/ + GET: check if ongoing background task POST: start a new background task """ + @staticmethod + def get(request): + """handle get request""" + + response = {"rescan": False, "downloading": False} + for key in response.keys(): + response[key] = RedisArchivist().is_locked(key) + + return Response(response) + def post(self, request): """handle post request""" diff --git a/tubearchivist/home/src/ta/ta_redis.py b/tubearchivist/home/src/ta/ta_redis.py index e13a997..43e9ab6 100644 --- a/tubearchivist/home/src/ta/ta_redis.py +++ b/tubearchivist/home/src/ta/ta_redis.py @@ -80,6 +80,12 @@ class RedisArchivist(RedisBase): redis_lock = self.conn.lock(self.NAME_SPACE + lock_key) return redis_lock + def is_locked(self, lock_key): + """check if lock is set""" + lock_name = self.NAME_SPACE + lock_key + lock_status = bool(self.conn.execute_command("GET", lock_name)) + return lock_status + def get_progress(self): """get a list of all progress messages""" all_messages = []