Skip to content

Commit ec8f7e3

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

1 file changed

Lines changed: 29 additions & 20 deletions

File tree

src/cfengine_cli/masterfiles/generate_release_information.py

Lines changed: 29 additions & 20 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,
@@ -77,43 +78,37 @@ def generate_release_information_impl(
7778
def download_enterprise_releasedata():
7879
# Downloading releases.json:
7980
try:
80-
releases_data = get_json(ENTERPRISE_RELEASES_URL)
81+
return requests.get(ENTERPRISE_RELEASES_URL)
8182

82-
except CFBSNetworkError:
83+
except requests.RequestException:
8384
raise CFBSExitError(
8485
"Downloading CFEngine release data failed - check your Wi-Fi / network settings."
8586
)
8687

87-
return releases_data
88-
8988

9089
def download_community_releasedata():
9190
# Downloading community/releases.json
9291
try:
93-
releases_data = get_json(COMMUNITY_RELEASES_URL)
94-
95-
except CFBSNetworkError:
92+
return requests.get(COMMUNITY_RELEASES_URL)
93+
except requests.RequestException:
9694
raise CFBSExitError(
9795
"Downloading CFEngine release data failed - check your Wi-Fi / network settings."
9896
)
9997

100-
return releases_data
101-
10298

10399
def process_release_type(folder, download_func):
104100
# Function for processing either community or enterprise releases
105-
release_data = download_func()
106-
107-
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)
108106

107+
release_data = load_json_from_file(releases_path)
109108
stable_releases = get_stable_releases(release_data)
110-
111109
file_checksums_dict = build_release_history(stable_releases)
112-
113110
write_version_files(stable_releases, folder)
114-
115111
sorted_releases = sort_release_data(file_checksums_dict)
116-
117112
write_json(f"./{folder}/checksums.json", sorted_releases)
118113

119114

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

190185

191-
def write_json_pretty(path, data):
192-
# Writes release information in same format as on cfengine.com
193-
with open(path, "w", encoding="utf-8") as f:
194-
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)