""" Performs initial setup functions. - Generates a Django SECRET_KEY file to be used by manage.py - Copies config template file (if a config file does not already exist) """ import random import string import os import sys import argparse from shutil import copyfile OUTPUT_DIR = os.path.dirname(os.path.realpath(__file__)) KEY_FN = 'secret_key.txt' CONFIG_FN = 'config.yaml' CONFIG_TEMPLATE_FN = 'config_template.yaml' def generate_key(length=50): """ Generate a random string Args: length: Number of characters in returned string (default = 50) Returns: Randomized secret key string """ options = string.digits + string.ascii_letters + string.punctuation key = ''.join([random.choice(options) for i in range(length)]) return key if __name__ == '__main__': parser = argparse.ArgumentParser(description='Generate Django SECRET_KEY file') parser.add_argument('--force', '-f', help='Override existing files', action='store_true') parser.add_argument('--dummy', '-d', help='Dummy run (do not create any files)', action='store_true') args = parser.parse_args() # Places to store files key_filename = os.path.join(OUTPUT_DIR, KEY_FN) conf_template = os.path.join(OUTPUT_DIR, CONFIG_TEMPLATE_FN) conf_filename = os.path.join(OUTPUT_DIR, CONFIG_FN) # Generate secret key data key_data = generate_key() if args.dummy: print('SECRET_KEY: {k}'.format(k=key_data)) sys.exit(0) if not args.force and os.path.exists(key_filename): print("Key file already exists - '{f}'".format(f=key_filename)) else: with open(key_filename, 'w') as key_file: print("Generating SECRET_KEY file - '{f}'".format(f=key_filename)) key_file.write(key_data) if not args.force and os.path.exists(conf_filename): print("Config file already exists (skipping)") else: print("Copying config template to 'config.yaml'") copyfile(conf_template, conf_filename)