Skip to content
Snippets Groups Projects
json_export.py 2.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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)