Use array index for reverse index

This commit is contained in:
relikd
2020-09-15 21:18:43 +02:00
parent 71bd8e2a43
commit eb4d104575

View File

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