Skip to content
Snippets Groups Projects

Introduce utility to export all data related to an event to json

Merged Benjamin Hättasch requested to merge meta-export into main
2 files
+ 81
0
Compare changes
  • Side-by-side
  • Inline

Files

+ 57
0
 
import json
 
import sys
 
 
event_id = int(sys.argv[1])
 
target_name = sys.argv[2]
 
 
print(f"Creating export for event '{event_id}' as '{target_name}'")
 
 
# Load json file just created by django
 
with open('backups/akplanning_only.json', 'r') as json_file:
 
exported_entries = json.load(json_file)
 
print(f"Loaded {len(exported_entries)} entries in total, restricting to event...")
 
 
entries_without_event = 0
 
entries_out = []
 
virtual_rooms_to_preserve = set()
 
 
# Loop over all dumped entries
 
for entry in exported_entries:
 
# Handle all entries with event reference
 
if "event" in entry['fields']:
 
event = int(entry['fields']['event'])
 
 
# Does this entry belong to the event we are looking for?
 
if event == event_id:
 
# Store for backup
 
entries_out.append(entry)
 
 
# Remember the primary keys of all rooms of this event
 
# Required for special handling of virtual rooms,
 
# since they inherit from normal rooms and have no direct event reference
 
if entry['model'] == "AKModel.room":
 
virtual_rooms_to_preserve.add(entry['pk'])
 
# Handle entries without event reference
 
else:
 
# Backup virtual rooms of that event
 
if entry['model'] == "AKOnline.virtualroom":
 
if entry['pk'] in virtual_rooms_to_preserve:
 
entries_out.append(entry)
 
# Backup the event itself
 
elif entry['model'] == "AKModel.event":
 
if int(entry['pk']) == event_id:
 
entries_out.append(entry)
 
# Backup tags
 
elif entry['model'] == "AKModel.aktag":
 
# No restriction needed, backup all tags
 
entries_out.append(entry)
 
else:
 
# This should normally not happen (all other models should have a reference to the event)
 
entries_without_event += 1
 
print(entry)
 
 
print(f"Ignored entries without event: {entries_without_event}")
 
print(f"Exporting {len(entries_out)} entries for event")
 
 
with open(f'backups/{target_name}.json', 'w') as json_file:
 
json.dump(entries_out, json_file, indent=2)
Loading