Source code for bskExamples

#
#  ISC License
#
#  Copyright (c) 2024, Autonomous Vehicle Systems Lab, University of Colorado at Boulder
#
#  Permission to use, copy, modify, and/or distribute this software for any
#  purpose with or without fee is hereby granted, provided that the above
#  copyright notice and this permission notice appear in all copies.
#
#  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
#  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
#  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
#  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
#  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
#  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#

import os
import requests
import bskLargeData

# define the print color codes
statusColor = '\033[92m'
endColor = '\033[0m'

# this statement is needed to enable Windows to print ANSI codes in the Terminal
# see https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-terminal-in-python/3332860#3332860
os.system("")

# Function to download a single file
[docs] def download_file(file_url, dest_folder): """Download a Basilisk example file""" if not os.path.exists(dest_folder): os.makedirs(dest_folder) local_filename = os.path.join(dest_folder, file_url.split("/")[-1]) with requests.get(file_url, stream=True) as response: response.raise_for_status() with open(local_filename, "wb") as file: for chunk in response.iter_content(chunk_size=8192): file.write(chunk) print(f"Downloaded: {local_filename}")
# Function to process a folder or file via GitHub API
[docs] def process_github_folder(api_url, dest_folder): """Process the BSK GitHub examples folder recursively and download all files.""" response = requests.get(api_url) if response.status_code != 200: print(f"Failed to fetch the URL: {api_url}") print(f"Response: {response.text}") return items = response.json() for item in items: if item["type"] == "file": print(f"Downloading file: {item['name']}") download_file(item["download_url"], dest_folder) elif item["type"] == "dir": print(f"Entering folder: {item['name']}") subfolder_api_url = item["url"] subfolder_dest = os.path.join(dest_folder, item["name"]) process_github_folder(subfolder_api_url, subfolder_dest)
[docs] def main(): """ Script to download all GitHub Basilisk examples into the local folder called ``examples``. This script also downloads the large BSK data files by loading ``bskLargeData.py``. """ # install the large BSK data files bskLargeData.main() # Display the task message print(f"{statusColor}Task: Downloading BSK examples folder{endColor}") # GitHub API URL for the target folder github_api_url = "https://api.github.com/repos/AVSLab/basilisk/contents/examples" destination_folder = "./examples" process_github_folder(github_api_url, destination_folder)
# Main execution if __name__ == "__main__": main()