#!/usr/bin/env python3 import os import re from argparse import ArgumentParser # PDF conversion backends import pdfkit import weasyprint # CLI arguments parser = ArgumentParser() parser.add_argument('--backend', '-b', help = 'change the download backend', default = 'pdfkit', choices = ['pdfkit', 'weasyprint']) parser.add_argument('--force', '-f', help = 'force download all links', action='store_false') args = parser.parse_args() for category in os.listdir('Links'): print('Examining: ' + category) os.makedirs(category, exist_ok=True) section = '' for link in open(os.path.join('Links', category), 'r').readlines(): if link[0:2] == '# ': section = link[2:-1] if link[0] == '#' or link[0] == '\n': continue name = os.path.join(category, section + ' - ' + re.sub(r'(?u)[^-\w.]', '', link[5:]) + '.pdf') if not os.path.exists(name) or args.force: print('Downloading: ' + link[:-1]) print('Destination: ' + name) # Time to print! try: if args.backend == 'pdfkit': pdfkit.from_url(link, name) else: pdf = weasyprint.HTML(link).write_pdf() open(name, 'wb').write(pdf) except: print('Error when printing 😱')