Newer
Older
thu-learn-downloader-optimized / main.py
import argparse

import tqdm

from downloader import Downloader


parser = argparse.ArgumentParser(
    add_help="Automatically download files from THU Web Learning."
)
parser.add_argument("--username", required=True)
parser.add_argument("--password", required=True)
parser.add_argument(
    "--semesters",
    nargs="+",
    default=None,
    required=False,
    help="semesters to be synced. If you want to sync all semesters, do not pass this argument",
)
parser.add_argument(
    "--prefix",
    default="thu-learn",
    required=False,
    help='location to save downloaded files, default to "learn/"',
)
parser.add_argument(
    "--file_size_limit",
    default=None,
    type=float,
    required=False,
    help="(unit: MB) files exceed limit will not be downloaded",
)
parser.add_argument(
    "--no_sync_docs",
    action="store_true",
    default=False,
    required=False,
    help="pass this argument to skip syncing files",
)
parser.add_argument(
    "--no_sync_work",
    action="store_true",
    default=False,
    required=False,
    help="pass this argument to skip syncing homework",
)
parser.add_argument(
    "--no_sync_submit",
    action="store_true",
    default=False,
    required=False,
    help="pass this argument to skip syncing your submission & grade and everything personal",
)


def main(args: argparse.Namespace):
    downloader = Downloader(
        username=args.username,
        password=args.password,
        prefix=args.prefix,
        file_size_limit=args.file_size_limit,
        sync_docs=(not args.no_sync_docs),
        sync_work=(not args.no_sync_work),
        sync_submit=(not args.no_sync_submit),
    )
    semester_id_list: list[str] = downloader.helper.get_semester_id_list()
    semesters: list[str] = args.semesters if args.semesters else semester_id_list
    for semester in tqdm.tqdm(
        iterable=semesters,
        desc="semesters",
        leave=False,
        dynamic_ncols=True,
        position=0,
    ):
        if semester in semester_id_list:
            downloader.sync_semester(semester_id=semester)
        else:
            print(f"{semester} not found")


if __name__ == "__main__":
    args = parser.parse_args()
    main(args)