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()