diff --git a/src/json_reverse_index.py b/src/json_reverse_index.py index 2a899c7..5cad9d9 100755 --- a/src/json_reverse_index.py +++ b/src/json_reverse_index.py @@ -14,31 +14,53 @@ def load_index_json(file_path): if mylib.file_exists(file_path): json = mylib.json_read(file_path) else: - json = dict({'pardom': dict(), 'subdom': dict()}) + json = dict({'bundle': [], 'pardom': dict(), 'subdom': dict()}) return json -def delete_from_index(index, bundle_ids): +def delete_from_index(index, bundle_ids, deleteOnly=False): + ids_to_delete = set() + for bid in bundle_ids: + try: + i = index['bundle'].index(bid) + except ValueError: # index not found + continue + ids_to_delete.add(i) + if deleteOnly: + index['bundle'][i] = '_' + + if len(ids_to_delete) == 0: + return False + for key in ['pardom', 'subdom']: for domain in list(index[key].keys()): - for bid in bundle_ids: + for i in ids_to_delete: try: - index[key][domain].remove(bid) - except ValueError: - pass # ignore if not present + index[key][domain].remove(i) + except ValueError: # ignore if not present + continue if not index[key][domain]: del(index[key][domain]) + return True def insert_in_index(index, bundle_ids): + has_changes = False for bid in bundle_ids: + try: + i = index['bundle'].index(bid) + except ValueError: # index not found + i = len(index['bundle']) + index['bundle'].append(bid) json, _ = mylib.json_read_evaluated(bid) for key in ['pardom', 'subdom']: # assuming keys are identical for domain, _, _ in json[key]: try: - index[key][domain].append(bid) + index[key][domain].append(i) except KeyError: - index[key][domain] = [bid] + index[key][domain] = [i] + has_changes = True + return has_changes def process(bundle_ids, deleteOnly=False): @@ -50,11 +72,14 @@ def process(bundle_ids, deleteOnly=False): # load previous index json = load_index_json(index_file) # delete previous index entries - delete_from_index(json, bundle_ids) + did_change = delete_from_index(json, bundle_ids, deleteOnly=deleteOnly) # write new index to disk if not deleteOnly: - insert_in_index(json, bundle_ids) - mylib.json_write(index_file, json, pretty=False) + did_change |= insert_in_index(json, bundle_ids) + if did_change: + mylib.json_write(index_file, json, pretty=False) + else: + print(' no change') print('') @@ -63,5 +88,5 @@ if __name__ == '__main__': if len(args) > 0: process(args) else: - # process(['*']) + # process(['*'], deleteOnly=False) mylib.usage(__file__, '[bundle_id] [...]')