Python lib/script to export Foreflight logbook
1import sys 2import time 3from typing import cast 4 5import fflogex 6from getpass import getpass 7import argparse 8from dataclasses import dataclass 9 10 11@dataclass 12class Args: 13 username: str 14 password: str | None 15 output: str 16 17 18def main(): 19 parser = argparse.ArgumentParser( 20 prog="fflogex", 21 description="Export Foreflight Logbook", 22 ) 23 _ = parser.add_argument("-u", "--username", required=True) 24 _ = parser.add_argument( 25 "-p", 26 "--password", 27 help="Specify password inline; You can also skip this and the program will ask you during the execution instead. Be careful your shell might record your password if you choose to use this option.", 28 ) 29 _ = parser.add_argument( 30 "-o", "--output", help="Output file name (.csv)", default="logbook.csv" 31 ) 32 33 opts = cast(Args, cast(object, parser.parse_args())) 34 if opts.password is None: 35 opts.password = getpass() 36 exporter = fflogex.ForeflightLogbookExporter() 37 38 print("Logging in...") 39 exporter.login(opts.username, opts.password) 40 41 print("Requesting logbook export...", end="", flush=True) 42 requestId = exporter.request_export() 43 print(f" [Done] Request ID: {requestId}") 44 45 print("Waiting ...", end="", flush=True) 46 elapsed = 0 47 while elapsed <= 60: 48 elapsed += 1 49 time.sleep(1) 50 print(".", end="", flush=True) 51 link = exporter.get_link(requestId) 52 if link is not None: 53 print(" [OK]") 54 print("Downloading...", end="", flush=True) 55 with open(opts.output, "w", encoding="utf-8") as f: 56 _ = f.write(exporter.download_link(link)) 57 print(f" [OK] Wrote to {opts.output}") 58 sys.exit(0) 59 60 print("") 61 print("[FAILED] Timeout while waiting for the export") 62 sys.exit(1) 63 64 65if __name__ == "__main__": 66 main()