Use array index for reverse index
This commit is contained in:
@@ -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] [...]')
|
||||||
|
|||||||
Reference in New Issue
Block a user