Skip to content

Commit 1c4ce4c

Browse files
committed
ENT-13808: Download releases.json directly to file and parse afterwards
1 parent df491ad commit 1c4ce4c

1 file changed

Lines changed: 29 additions & 24 deletions

File tree

src/cfengine_cli/masterfiles/generate_release_information.py

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
import requests
23
from cfengine_cli.masterfiles.download import (
34
ENTERPRISE_RELEASES_URL,
45
COMMUNITY_RELEASES_URL,
@@ -53,10 +54,6 @@ def generate_release_information_impl(
5354
)
5455
generate_vcf_download(DOWNLOAD_PATH, downloaded_versions)
5556

56-
generate_release_history()
57-
58-
generate_git_tags_map()
59-
6057
if check:
6158
print(
6259
"Downloading releases of masterfiles from git (github.com) and generating "
@@ -81,43 +78,37 @@ def generate_release_information_impl(
8178
def download_enterprise_releasedata():
8279
# Downloading releases.json:
8380
try:
84-
releases_data = get_json(ENTERPRISE_RELEASES_URL)
81+
return requests.get(ENTERPRISE_RELEASES_URL)
8582

86-
except CFBSNetworkError:
83+
except requests.RequestException:
8784
raise CFBSExitError(
8885
"Downloading CFEngine release data failed - check your Wi-Fi / network settings."
8986
)
9087

91-
return releases_data
92-
9388

9489
def download_community_releasedata():
9590
# Downloading community/releases.json
9691
try:
97-
releases_data = get_json(COMMUNITY_RELEASES_URL)
98-
99-
except CFBSNetworkError:
92+
return requests.get(COMMUNITY_RELEASES_URL)
93+
except requests.RequestException:
10094
raise CFBSExitError(
10195
"Downloading CFEngine release data failed - check your Wi-Fi / network settings."
10296
)
10397

104-
return releases_data
105-
10698

10799
def process_release_type(folder, download_func):
108100
# Function for processing either community or enterprise releases
109-
release_data = download_func()
110-
111-
write_json_pretty(f"./{folder}/releases.json", release_data)
101+
releases_path = f"./{folder}/releases.json"
102+
print(f"\nDownloading release data for {folder}...")
103+
response = download_func()
104+
# Save raw file to preserve exact format from website
105+
save_to_file(releases_path, response.content)
112106

107+
release_data = load_json_from_file(releases_path)
113108
stable_releases = get_stable_releases(release_data)
114-
115109
file_checksums_dict = build_release_history(stable_releases)
116-
117110
write_version_files(stable_releases, folder)
118-
119111
sorted_releases = sort_release_data(file_checksums_dict)
120-
121112
write_json(f"./{folder}/checksums.json", sorted_releases)
122113

123114

@@ -192,7 +183,21 @@ def write_version_files(stable_releases, folder):
192183
write_json(f"./{folder}/versions/{version}.json", version_data)
193184

194185

195-
def write_json_pretty(path, data):
196-
# Writes release information in same format as on cfengine.com
197-
with open(path, "w", encoding="utf-8") as f:
198-
json.dump(data, f, indent=2, ensure_ascii=False)
186+
def save_to_file(path, content):
187+
try:
188+
with open(path, "wb") as f:
189+
f.write(content)
190+
print(f"Saved {path}")
191+
192+
except OSError:
193+
raise CFBSExitError(f"Failed to write file {path}.")
194+
195+
196+
def load_json_from_file(path):
197+
# Open saved file and return as dict
198+
try:
199+
with open(path, "r", encoding="utf-8") as f:
200+
return json.load(f)
201+
202+
except OSError:
203+
raise CFBSExitError(f"Failed to read file {path}.")

0 commit comments

Comments
 (0)