diff --git a/InvenTree/config.yaml b/InvenTree/config_template.yaml similarity index 85% rename from InvenTree/config.yaml rename to InvenTree/config_template.yaml index ac0bd82d4f..b08efdb8be 100644 --- a/InvenTree/config.yaml +++ b/InvenTree/config_template.yaml @@ -3,15 +3,20 @@ # Ref: https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-DATABASES # Specify database parameters below as they appear in the Django docs database: + # Example configuration - sqlite (default) ENGINE: django.db.backends.sqlite3 - NAME: inventree_db.sqlite3 + NAME: inventree_db.sqlite3 # For more complex database installations, further parameters are required # Refer to the django documentation for full list of options - # USER: db_username - # PASSWORD: db_password - # HOST: db_hostname - # PORT: db_port + + # Example Configuration - MySQL + #ENGINE: django.db.backends.mysql + #NAME: inventree + #USER: inventree + #PASSWORD: password + #HOST: '' + #PORT: '' # Set debug to False to run in production mode debug: True @@ -47,4 +52,4 @@ log_queries: False # Backup options # Set the backup_dir parameter to store backup files in a specific location -backup_dir: '/home/me/inventree-backup/' \ No newline at end of file +backup_dir: '/mnt/c/Users/Oliver/inventree-backup/' \ No newline at end of file diff --git a/InvenTree/keygen.py b/InvenTree/keygen.py deleted file mode 100644 index c96df22794..0000000000 --- a/InvenTree/keygen.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -Generates a Django SECRET_KEY file to be used by manage.py -""" - -import random -import string -import os -import sys -import argparse - -KEY_FN = 'secret_key.txt' -KEY_DIR = os.path.dirname(os.path.realpath(__file__)) - - -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('--output', help='Specify key file path', default=None) - parser.add_argument('--force', '-f', help='Override key file (if it exists)', action='store_true') - parser.add_argument('--dummy', '-d', help='Dummy run (display key only', action='store_true') - - args = parser.parse_args() - - if args.output: - key_filename = args.output - else: - key_filename = os.path.join(KEY_DIR, KEY_FN) - - 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)) - sys.exit(0) - - with open(key_filename, 'w') as key_file: - print("Generating SECRET_KEY file - '{f}'".format(f=key_filename)) - key_file.write(key_data) diff --git a/InvenTree/setup.py b/InvenTree/setup.py new file mode 100644 index 0000000000..b74cfe7358 --- /dev/null +++ b/InvenTree/setup.py @@ -0,0 +1,68 @@ +""" +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) diff --git a/Makefile b/Makefile index 1a59135924..900a67c7b2 100644 --- a/Makefile +++ b/Makefile @@ -19,13 +19,13 @@ migrate: requirements: pip3 install -U -r requirements.txt -secret: - python3 InvenTree/keygen.py +setup: + python3 InvenTree/setup.py superuser: python3 InvenTree/manage.py createsuperuser -install: requirements secret migrate superuser +install: requirements setup migrate superuser mysql: apt-get install mysql-server @@ -52,4 +52,4 @@ backup: python3 InvenTree/manage.py dbbackup python3 InvenTree/manage.py mediabackup -.PHONY: clean migrate requirements secret superuser install mysql style test coverage documentation backup \ No newline at end of file +.PHONY: clean migrate requirements setup superuser install mysql style test coverage documentation backup \ No newline at end of file diff --git a/docs/config.rst b/docs/config.rst index a506ae4317..e737caa46c 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -15,7 +15,7 @@ To support install specific settings, a simple configuration file ``config.yaml` The default configuration file launches a *DEBUG* configuration with a simple SQLITE database backend. This default configuration file is shown below: -.. literalinclude :: ../InvenTree/config.yaml +.. literalinclude :: ../InvenTree/config_template.yaml :language: yaml :linenos: