import json import pandas as pd from configuration_to_table import get_renamed_settings FILES_DIR = './files' def main(): with open(f'{FILES_DIR}/neo4j_cluster_config/dev_v5_settings.json', 'r', encoding='utf-8-sig') as f: v5_settings = json.load(f) v5_settings = {x['name_v5']: x for x in v5_settings} with open(f'{FILES_DIR}/neo4j_cluster_config/dev_v4_settings.json', 'r', encoding='utf-8-sig') as f: v4_settings = json.load(f) v4_settings = {x['name_v4']: x for x in v4_settings} with open(f'{FILES_DIR}/neo4j_docs/renamed_settings.json', 'r') as f: renamed_settings = json.load(f) renamed_settings = {x['v5']: x['v4'] for x in renamed_settings} with open(f'{FILES_DIR}/neo4j_docs/deprecated_settings.json', 'r') as f: deprecated_settings = json.load(f) deprecated_settings = {x['deprecated_setting']: x for x in deprecated_settings} with open(f'{FILES_DIR}/neo4j_docs/v5_settings.json', 'r') as f: v5_docs = json.load(f) v5_docs = {x['Setting']: x for x in v5_docs} devops_comments = get_devops_comments() result = [] for v5_name, v5_settings in v5_settings.items(): renamed = False new = True if v5_name in v4_settings: v4_name = v5_name v4_setting = v4_settings[v5_name] new = False del v4_settings[v4_name] else: v4_name = renamed_settings.get(v5_name, '') v4_setting = v4_settings.get(v4_name) if v4_setting: renamed = True new = False del v4_settings[v4_name] result.append( { 'Group': v5_docs.get(v5_name, {}).get('Settings Group'), "Name v5": v5_settings['name_v5'].strip(), 'Name v4': v4_name.strip() or ' ', 'Default value v5': v5_docs.get(v5_name, {}).get('Default Value') or "'", "Value v5": v5_settings['value_v5'], 'Value v4': v4_setting.get('value_v4') if v4_setting else '', 'Unchanged': v5_settings['value_v5'] == v4_setting.get('value_v4') if v4_setting else '', 'Is explicitly set v5': v5_settings.get('isExplicitlySet_v5'), "Dynamic v5": v5_settings['dynamic_v5'], 'Dynamic v4': v4_setting.get('dynamic_v4') if v4_setting else '', 'Renamed': renamed, 'New': new, 'Removed': False, "Description v5": v5_settings['description_v5'], 'Valid values v5': v5_settings.get('validValues_v5'), 'Deprecated': deprecated_settings.get(v5_name, {}).get('deprecated_version'), 'DevOps status': devops_comments.get(v5_name, {}).get('status') or "'", 'DevOps comment': devops_comments.get(v5_name, {}).get('comment', '') or "'", } ) for v4_name, v4_settings in v4_settings.items(): result.append( { 'Group': '', "Name v5": "'", 'Name v4': v4_name, 'Default value v5': '', "Value v5": "'", 'Value v4': v4_settings.get('value_v4'), 'Unchanged': "'", 'Is explicitly set v5': "'", "Dynamic v5": "'", 'Dynamic v4': v4_settings.get('dynamic_v4'), 'Renamed': "'", 'New': "'", 'Removed': True, "Description v5": "'", 'Valid values v5': "'", 'Deprecated': "'", 'DevOps status': devops_comments.get(v4_name, {}).get('status') or "'", 'DevOps comment': devops_comments.get(v4_name, {}).get('comment', '') or "'", } ) df = pd.DataFrame(result) df.fillna('').to_excel(f'{FILES_DIR}/v4_v5.xlsx', index=False, engine='openpyxl', merge_cells=False) def get_devops_comments(): all_settings = {} with open(f'{FILES_DIR}/devops/migrated.txt') as f: raw = f.readlines() for raw_record in raw: v4, v5 = raw_record.split(' MIGRATED -> ') v5_setting, v5_value = v5.split('=', 1) all_settings[v5_setting] = {'status': 'MIGRATED', 'comment': raw_record} with open(f'{FILES_DIR}/devops/translated.txt') as f: raw = f.readlines() for raw_record in raw: v4, v5 = raw_record.split(' TRANSLATED -> ') v5_setting, v5_value = v5.split('=', 1) all_settings[v5_setting] = {'status': 'TRANSLATED', 'comment': raw_record} with open(f'{FILES_DIR}/devops/unchanged.txt') as f: raw = f.readlines() for raw_record in raw: v5_setting, v5_value = raw_record.split('=') all_settings[v5_setting] = {'status': 'UNCHANGED', 'comment': raw_record} with open(f'{FILES_DIR}/devops/removed.txt') as f: raw = f.readlines() for raw_record in raw: v5_setting, v5_value = raw_record.split('=') all_settings[v5_setting] = {'status': 'REMOVED', 'comment': raw_record} with open(f'{FILES_DIR}/devops/removed_unknown.txt') as f: raw = f.readlines() for raw_record in raw: v5_setting, v5_value = raw_record.split('=') all_settings[v5_setting] = {'status': 'REMOVED UNKNOWN', 'comment': raw_record} return all_settings if __name__ == '__main__': main() # devops_comments()