diff --git a/sheetsync/sheetsync/streamlog.py b/sheetsync/sheetsync/streamlog.py index 9634310..97afbe2 100644 --- a/sheetsync/sheetsync/streamlog.py +++ b/sheetsync/sheetsync/streamlog.py @@ -18,10 +18,14 @@ class StreamLogClient(): self.event_id = event_id self.session = requests.Session() - def get_rows(self): - """Return a list of rows, where each row is a dict""" + def get_entries(self): + """Return a list of log entries, where each row is a dict""" return self.request("GET", "event", self.event_id, "log") + def get_tags(self): + """Return a list of dicts representing tags objects""" + return self.request("GET", "event", self.event_id, "tags") + def write_value(self, row_id, key, value): """Write key=value for the given row, or delete if value=None""" logging.debug("Write to streamlog {} {} = {!r}".format(row_id, key, value)) @@ -44,7 +48,32 @@ class StreamLogClient(): return None -class StreamLogMiddleware(Middleware): +class StreamLogPlaylistsMiddleware(Middleware): + # There's no point sharing any code with StreamLogEventsMiddleware, + # the operations are too different. + def __init__(self, client, playlists_worksheet): + self.client = client + self.playlists_worksheet = playlists_worksheet + + def get_rows(self): + rows = [] + for tag in self.client.get_tags(): + rows.append({ + "id": tag["id"], + "sheet_name": playlists_worksheet, + "_parse_errors": [], + # Special case for the "all everything" list, otherwise all playlists have a single tag. + "tags": [] if tags["tag"] == "" else [tag["tag"]], + "name": "unknown", # TODO missing in StreamLog + "show_in_description": False, # TODO missing in StreamLog + "description": tag["description"], + }) + return True, rows + + # writing intentionally not implemented + + +class StreamLogEventsMiddleware(Middleware): def __init__(self, client): self.client = client # Maps DB column names to streamlog fields. @@ -87,7 +116,7 @@ class StreamLogMiddleware(Middleware): def get_rows(self): all_rows = [] - for row in self.client.get_rows()["event_log"]: + for row in self.client.get_entries()["event_log"]: row = self.parse_row(row) # Malformed rows can be skipped, represented as a None result if row is not None: