From 2dced3e281f52d7a3acb5e00e3eeaea31542b04a Mon Sep 17 00:00:00 2001
From: Loxbie <ole@freirad.at>
Date: Mon, 23 Sep 2024 17:03:52 +0200
Subject: [PATCH] Feat: check for unset metadata

---
 src/aura_engine/scheduling/api.py       | 19 ++++++++++++++++---
 tests/json/tank-api-v1-playlists-2.json |  8 ++------
 tests/test_scheduling_api_fetcher.py    |  8 +++++---
 3 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/src/aura_engine/scheduling/api.py b/src/aura_engine/scheduling/api.py
index 80e87826..1db51688 100644
--- a/src/aura_engine/scheduling/api.py
+++ b/src/aura_engine/scheduling/api.py
@@ -53,6 +53,7 @@ from aura_steering_api.models.playout_program_entry import (
 )
 from aura_tank_api.models.playlist import Playlist as API_PLAYLIST
 from aura_tank_api.models.playlist_entry import PlaylistEntry as API_PLAYLIST_ENTRY
+from aura_tank_api.types import Unset
 
 ApiResult = NamedTuple(
     "ApiResult",
@@ -248,9 +249,21 @@ class ApiFetcher(threading.Thread):
                 # Files do have a metadata object
                 if entry.file and entry.file.metadata:
                     metadata = PlaylistItem.Metadata(
-                        artist=entry.file.metadata.artist,
-                        album=entry.file.metadata.album,
-                        title=entry.file.metadata.title,
+                        artist=(
+                            ""
+                            if isinstance(entry.file.metadata.artist, Unset)
+                            else entry.file.metadata.artist
+                        ),
+                        album=(
+                            ""
+                            if isinstance(entry.file.metadata.album, Unset)
+                            else entry.file.metadata.album
+                        ),
+                        title=(
+                            ""
+                            if isinstance(entry.file.metadata.title, Unset)
+                            else entry.file.metadata.title
+                        ),
                     )
 
                 item = PlaylistItem(entry.uri, entry.duration, 100, metadata)
diff --git a/tests/json/tank-api-v1-playlists-2.json b/tests/json/tank-api-v1-playlists-2.json
index 64d709db..e89f7a28 100644
--- a/tests/json/tank-api-v1-playlists-2.json
+++ b/tests/json/tank-api-v1-playlists-2.json
@@ -21,11 +21,7 @@
             "state": "done"
           }
         },
-        "metadata": {
-          "artist": "Peaches",
-          "title": "AA XXX",
-          "album": "The Teaches of Peaches"
-        },
+        "metadata": {},
         "size": 36496517,
         "duration": 199
       }
@@ -71,4 +67,4 @@
       }
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/tests/test_scheduling_api_fetcher.py b/tests/test_scheduling_api_fetcher.py
index 7402339f..41d9ad1b 100644
--- a/tests/test_scheduling_api_fetcher.py
+++ b/tests/test_scheduling_api_fetcher.py
@@ -255,9 +255,11 @@ class TestSchedulingApiFetcher(unittest.TestCase):
         self.assertEqual(100, pl_items[0].volume)
         self.assertEqual("file://musikprogramm/303", pl_items[0].source)
         self.assertEqual(199, pl_items[0].duration)
-        self.assertEqual("Peaches", pl_items[0].metadata.artist)
-        self.assertEqual("The Teaches of Peaches", pl_items[0].metadata.album)
-        self.assertEqual("AA XXX", pl_items[0].metadata.title)
+
+        # Faulty metadata is set to an empty string
+        self.assertEqual("", pl_items[0].metadata.artist)
+        self.assertEqual("", pl_items[0].metadata.album)
+        self.assertEqual("", pl_items[0].metadata.title)
 
         # Playlist Item 2
         self.assertEqual(100, pl_items[1].volume)
-- 
GitLab