Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import sys
- import json
- def fix_session_file(input_file, output_file):
- # Most issues are due to inconsistencies in terms of which subsets are
- # defined where. So this function simply removes all subsets from the
- # session file.
- with open(input_file) as f:
- session = json.load(f)
- # Find all subsets and subset groups in session file
- subsets = []
- for key, value in session.items():
- if value['_type'] in ['glue.core.subset.Subset',
- 'glue.core.subset_group.GroupedSubset',
- 'glue.core.subset_group.SubsetGroup']:
- subsets.append(key)
- if 'state' in value:
- subsets.append(value['state'])
- for subset in subsets:
- session.pop(subset)
- # Now remove all traces of subsets
- layer_states = []
- for key, value in session.items():
- # Remove subsets from data
- if value['_type'] == 'glue.core.data.Data':
- value['subsets'] = []
- # Remove subset groups from data collection
- if value['_type'] == 'glue.core.data_collection.DataCollection':
- value['groups'] = []
- value['subset_group_count'] = 0
- # Find all layer states that mention subsets
- if 'values' in value and 'layer' in value['values']:
- if value['values']['layer'] in subsets:
- layer_states.append(key)
- for layer_state in layer_states:
- session.pop(layer_state)
- for key, value in session.items():
- # Find all callback lists that include these layer states
- if 'values' in value:
- for layer_state in layer_states:
- if layer_state in value['values']:
- value['values'].remove(layer_state)
- if 'layers' in value:
- for layer in value['layers'][:]:
- if layer['state'] in layer_states:
- value['layers'].remove(layer)
- with open(output_file, 'w') as f:
- json.dump(session, f, indent=2)
- if len(sys.argv) != 3:
- print("Usage: python remove_subsets_from_glu.py input_file.glu output_file.glu")
- sys.exit(1)
- if os.path.exists(sys.argv[2]):
- print("ERROR: file {0} already exists".format(sys.argv[2]))
- sys.exit(1)
- fix_session_file(*sys.argv[1:])
Add Comment
Please, Sign In to add comment