Skip to content

Commit 47efe87

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

1 file changed

Lines changed: 29 additions & 16 deletions

File tree

src/cfengine_cli/masterfiles/generate_release_information.py

Lines changed: 29 additions & 16 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,35 +78,33 @@ 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)
110109

111110
file_checksums_dict = build_release_history(stable_releases)
@@ -188,7 +187,21 @@ def write_version_files(stable_releases, folder):
188187
write_json(f"./{folder}/versions/{version}.json", version_data)
189188

190189

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)
190+
def save_to_file(path, content):
191+
try:
192+
with open(path, "wb") as f:
193+
f.write(content)
194+
print(f"Saved {path}")
195+
196+
except OSError:
197+
raise CFBSExitError(f"Failed to write file {path}.")
198+
199+
200+
def load_json_from_file(path):
201+
# Open saved file and return as dict
202+
try:
203+
with open(path, "r", encoding="utf-8") as f:
204+
return json.load(f)
205+
206+
except OSError:
207+
raise CFBSExitError(f"Failed to read file {path}.")

0 commit comments

Comments
 (0)