From a0ff199506921b8b4053f71606f5356bcfa93070 Mon Sep 17 00:00:00 2001 From: Phil Morrell Date: Sun, 17 Apr 2022 14:27:35 +0100 Subject: [PATCH] transform the API json into a usable datastructure * index by room_id and recursively build the Space hierarchy * not proper tail recursion, and uses a global variable for now * FlightGear Republic is both child and parent of FlightGear and JSBSim * as proof of concept, print out the room name at correct depth --- script.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/script.py b/script.py index 657a30a..e24996f 100755 --- a/script.py +++ b/script.py @@ -8,8 +8,21 @@ def render(spaces, template): appTemplate = Template(filename=template) print(appTemplate.render(s=spaces)) +def make_hierarchy(room, loops, depth=0): + try: + print(' ' * depth + '- ' + room['name']) + if room['children_state'] and room['room_id'] not in loops: + for child in room['children_state']: + make_hierarchy(ROOMS[child['state_key']], loops, depth+1) + + except: + # missing or no name + print(' ' * depth + ' Skip ' + room['room_id']) + if __name__ == '__main__': with open('libregamingspaces.json') as f: - spaces = json.load(f) + data = json.load(f) - render(spaces, './spaces.html') + # render(data, './spaces.html') + ROOMS = {room['room_id'] : room for room in data} + make_hierarchy(ROOMS['!IdUUdKALNzBLKEjvbP:matrix.org'], ['!JTpfWshTKZpZiUASvP:hacklab.fi'])