from django.core.management.base import BaseCommand, CommandError from django.conf import settings import commands, os from optparse import make_option class Command(BaseCommand): option_list = BaseCommand.option_list + ( make_option('--test', '-t', dest='test', action='store_true', default=False, help='Simulate the synchronization.'), ) help = 'It allows to sync your develop site project with the remote site repository.' def handle(self, *args, **options): """ List of options in rsync command: -a: Preserve the attibutes of the files. -v: Verbose. -z: Enables the compression. -u: Update files. -r: Recursive. -E: Preserve Executability. -h: Human readable. -n: Simulate. """ # Check the rsync command st, out = commands.getstatusoutput('rsync --version') if st !=0: self.stderr.write('Error: To use this command you need the rsync command.\n') exit(1) # Check for the settings parameters try: # Deploy data USER_SERVER = settings.USER_SERVER DOMAIN_SERVER = settings.DOMAIN_SERVER DIR_SERVER = settings.DIR_SERVER DIR_LOCAL = settings.DIR_LOCAL except AttributeError: self.stderr.write('Error: You have to define the parameters in settings.py.\n') exit(1) opts = '-uhzravE --exclude="*.pyc" --exclude=settings.py --exclude="mydata.db"' if options['test']: opts = opts+' -n' os.system('rsync '+opts+' '+DIR_LOCAL+' '+USER_SERVER+'@'+DOMAIN_SERVER+':'+DIR_SERVER) self.stdout.write('\nWARNING: Consider that the file settings.py must be sent manually.\n'+ \ 'Don\'t apply any changes in the server directory except into settings.py\n') pass