in prebuilt-rules-scripts/generate.py [0:0]
def get_rule_diff(package_version):
previous_release = _get_last_release_version()
err_str = f'Most recent detected version: {previous_release} !< {package_version}. '
err_str += f'Remove {package_version} generated files (3) or specify a higher version to build'
assert Version(package_version) > Version(previous_release), err_str
# Path to the JSON rule file generated for this release
diff_file = str(PREBUILT_RULES.joinpath('diff-files', 'gen-files', f'json-from-docs-{package_version}.json'))
with open(diff_file, 'r') as source:
lasted_rules_dict = json.load(source)
# Path to the final JSON rule file generated for the previous release
prev_final = str(PREBUILT_RULES.joinpath('diff-files', 'final-files', f'final-rule-file-{previous_release}.json'))
with open(prev_final, 'r') as source:
previous_rules_dict = json.load(source)
diff_dict = []
lasted_rules_dict = sorted(lasted_rules_dict, key=_sort_by_name)
previous_rules_dict = sorted(previous_rules_dict, key=_sort_by_name)
old_name = None
counter = 0
rule_found = False
for new_rule in lasted_rules_dict:
for old_rule in previous_rules_dict:
if old_rule['rule_id'] == new_rule['rule_id']:
if old_rule['name'] != new_rule['name']:
old_name = old_rule['name']
old_file_name = _convert_name_to_filename(old_rule["name"])
new_file_name = _convert_name_to_filename(new_rule["name"])
file_name_changed = old_file_name != new_file_name
old_rule['name'] = new_rule['name']
if 'changelog' in old_rule:
new_rule['changelog'] = old_rule['changelog']
if old_rule['version'] != new_rule['version']:
new_rule['last_update'] = package_version
if 'changelog' not in new_rule:
new_rule['changelog'] = {}
new_rule['changelog']['changes'] = []
if 'query' in new_rule:
if old_rule['query'] != new_rule['query']:
new_rule['changelog']['changes'].append({
"version": new_rule['version'],
"updated": new_rule['last_update'],
"pre_query": old_rule['query'],
"doc_text": "Updated query.",
"pre_name": old_name
})
elif old_rule['query'] == new_rule['query']:
new_rule['changelog']['changes'].append({
"version": new_rule['version'],
"updated": new_rule['last_update'],
"pre_query": old_rule['query'],
"doc_text": "Formatting only",
"pre_name": old_name
})
if 'query' not in new_rule:
new_rule['changelog']['changes'].append({
"version": new_rule['version'],
"updated": new_rule['last_update'],
"pre_query": "N/A",
"doc_text": "Formatting only",
"pre_name": old_name
})
if file_name_changed:
new_rule['changelog']['changes'][-1]['duplicate_old_file'] = old_file_name
else:
new_rule['last_update'] = old_rule['last_update']
diff_dict.append(new_rule)
new_rule['added'] = old_rule['added']
old_name = None
rule_found = True
if rule_found is False:
new_rule['last_update'] = package_version
new_rule['added'] = package_version
diff_dict.append(new_rule)
counter = counter + 1
rule_found = False
# Outputs the final JSON file from which the documentation is generated. Note
# that this file is needed for the next release to compare future changes.
final = str(PREBUILT_RULES.joinpath('diff-files', 'final-files', f'final-rule-file-{package_version}.json'))
with open(final, "w") as fp:
json.dump(diff_dict, fp, indent=2)
click.echo(f'saved file: {final}')