Source code for vyoma_download.cli

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Console script for vyoma_download."""

###############################################################################

import os
import sys
import stat
import getpass
import logging
import argparse

from . import __version__
from vyoma_download.vyoma_download import User, Course
import vyoma_download.verbose_logger as verbose_logger

###############################################################################

verbose_logger.install()

# --------------------------------------------------------------------------- #

root_logger = logging.getLogger()
root_logger.addHandler(logging.StreamHandler()),
root_logger.setLevel(logging.INFO)

# --------------------------------------------------------------------------- #

logger = logging.getLogger(__name__)

###############################################################################


[docs]def main(): desc = "Download course contents from 'sanskritfromhome.in'." p = argparse.ArgumentParser(description=desc) p.add_argument("course-url", help="URL of the relevant course") p.add_argument("-v", "--video", action='store_true', help="Download video links only") p.add_argument("-a", "--audio", action='store_true', help="Download audios only") p.add_argument("-d", "--document", action='store_true', help="Download documents only") p.add_argument("-o", "--output", default=None, help="Path of the directory to download content to") p.add_argument("-u", "--username", default=None) p.add_argument("-p", "--password", default=None) p.add_argument('--status', help='Display status of the current course', action='store_true') p.add_argument('--verbose', help='Enable verbose output', action='store_true') p.add_argument('--debug', help='Enable debug information', action='store_true') p.add_argument('--version', action='version', version='%(prog)s ' + __version__) args = vars(p.parse_args()) if args['verbose']: root_logger.setLevel(verbose_logger.VERBOSE) if args['debug']: root_logger.setLevel(logging.DEBUG) # credentials config = {} home_dir = os.path.expanduser('~') config_file = os.path.join(home_dir, '.vyoma.cfg') if os.path.isfile(config_file): with open(config_file) as f: lines = f.read().split('\n') for line in lines: if line.strip(): key, value = line.split('=') config[key.strip()] = value.strip() username = ( args['username'] or os.environ.get('VYOMA_USER') or config.get('username') ) password = ( args['password'] or os.environ.get('VYOMA_PASS') or config.get('password') ) manual = not (username and password) if not username: username = input('Username: ') if not password: password = getpass.getpass('Password: ') username = username.strip() password = password.strip() # action vyoma_user = User( username=username, password=password, download_dir=args['output'] ) if not vyoma_user.login(): logging.error("Could not sign-in. Are the credentials correct?") return 1 if manual: answer = input("Save credentials for future use? (Y/n)") if not answer or answer.lower()[0] == 'y': with open(config_file, 'w') as f: f.write(f"username = {username}\n" f"password = {password}") logging.info("Credentials saved!") os.chmod(config_file, stat.S_IREAD + stat.S_IWRITE) if vyoma_user.logged_in: course = Course(args['course-url'], user=vyoma_user) if args['status']: course.show_status() return 0 course.fetch_links() if not(any([args['audio'], args['video'], args['document']])): course.download_content() else: course.download_content( document=args['document'], audio=args['audio'], video=args['video'] ) course.show_status() return 0
############################################################################### if __name__ == "__main__": sys.exit(main()) ###############################################################################