|
1 | 1 | import json |
| 2 | +import requests |
2 | 3 | from cfengine_cli.masterfiles.download import ( |
3 | 4 | ENTERPRISE_RELEASES_URL, |
4 | 5 | COMMUNITY_RELEASES_URL, |
@@ -77,35 +78,33 @@ def generate_release_information_impl( |
77 | 78 | def download_enterprise_releasedata(): |
78 | 79 | # Downloading releases.json: |
79 | 80 | try: |
80 | | - releases_data = get_json(ENTERPRISE_RELEASES_URL) |
| 81 | + return requests.get(ENTERPRISE_RELEASES_URL) |
81 | 82 |
|
82 | | - except CFBSNetworkError: |
| 83 | + except requests.RequestException: |
83 | 84 | raise CFBSExitError( |
84 | 85 | "Downloading CFEngine release data failed - check your Wi-Fi / network settings." |
85 | 86 | ) |
86 | 87 |
|
87 | | - return releases_data |
88 | | - |
89 | 88 |
|
90 | 89 | def download_community_releasedata(): |
91 | 90 | # Downloading community/releases.json |
92 | 91 | try: |
93 | | - releases_data = get_json(COMMUNITY_RELEASES_URL) |
94 | | - |
95 | | - except CFBSNetworkError: |
| 92 | + return requests.get(COMMUNITY_RELEASES_URL) |
| 93 | + except requests.RequestException: |
96 | 94 | raise CFBSExitError( |
97 | 95 | "Downloading CFEngine release data failed - check your Wi-Fi / network settings." |
98 | 96 | ) |
99 | 97 |
|
100 | | - return releases_data |
101 | | - |
102 | 98 |
|
103 | 99 | def process_release_type(folder, download_func): |
104 | 100 | # 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) |
108 | 106 |
|
| 107 | + release_data = load_json_from_file(releases_path) |
109 | 108 | stable_releases = get_stable_releases(release_data) |
110 | 109 |
|
111 | 110 | file_checksums_dict = build_release_history(stable_releases) |
@@ -188,7 +187,21 @@ def write_version_files(stable_releases, folder): |
188 | 187 | write_json(f"./{folder}/versions/{version}.json", version_data) |
189 | 188 |
|
190 | 189 |
|
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