#!/usr/bin/python # vim: set sw=4 sts=4 et : # Copyright: 2008 Gentoo Foundation # Author(s): Nirbheek Chauhan # License: AGPL-3 # # Immortal lh! # import sys, os, shutil try: from django.core import management except ImportError: print "You need to install django-1.0 first." sys.exit(1) # XXX: Document this in the help if os.environ.has_key('PYTHONPATH'): sys.path.insert(0, os.environ['PYTHONPATH']) DESTDIR = 'autotua_master' SYMLINKS = False def print_help(): print \ """\ %(file)s: Setup the django webapp for autotua Usage: %(file)s install %(file)s syncdb Example: %(file)s install /home/me/projects/ will create `/home/me/projects/autotua_master` with all the necessary files. You then need to edit the database settings in /home/me/projects/autotua_master/settings.py After this, running %(file)s syncdb /home/me/projects/autotua_master will initialize the db By default, the directory will have the files copied. Toggle `SYMLINKS` to symlink the files instead. """ % {'file': sys.argv[0]} def install_master(): """Start the new project""" import subprocess management.call_command('startproject', DESTDIR) if SYMLINKS: os.symlink(cwd+'/master', DESTDIR+'/master') for file in ['autotua_settings.py', 'urls.py']: dest_file = DESTDIR+'/'+file if os.path.isfile(dest_file): os.remove(dest_file) os.symlink(cwd+'/custom/'+file, dest_file) else: shutil.copytree(cwd+'/master', DESTDIR+'/master') for file in ['autotua_settings.py', 'urls.py']: shutil.copy(cwd+'/custom/'+file, DESTDIR) settings = open(DESTDIR+'/settings.py', 'a') settings.write('\nfrom autotua_settings import *\n') settings.close() # Install icons icondir = os.path.abspath(cwd+'/icons') installdir = os.path.abspath(DESTDIR) subprocess.check_call('cd %s; make DESTDIR=%s install' % (icondir, installdir), shell=True) def syncdb_master(): """Initialize the database""" from db_defaults import providers, archs, stages, releases, mirrors import copy management.call_command('syncdb') for provider in providers: provobj = StageProvider(name=provider) provobj.save() # Populate arch list for generic_arch in archs[provider]: gen_archobj = Arch(provider=provobj) # If (generic, (specific1, specific2)) if isinstance(generic_arch, tuple): gen_archobj.generic = generic_arch[0] for arch in generic_arch[1]: archobj = copy.copy(gen_archobj) archobj.specific = arch archobj.save() # If (specific1, specific2, specific3) else: gen_archobj.generic = generic_arch gen_archobj.specific = generic_arch gen_archobj.save() # Populate stage list for stage in stages[provider]: stageobj = Stage(provider=provobj) stageobj.name = stage stageobj.save() # Populate release list for release in releases[provider]: releaseobj = Release(provider=provobj) releaseobj.name = release releaseobj.save() # Populate mirror list obj = Mirror(owner=provobj) obj.structure = mirrors[provider]['structure'] for server in mirrors[provider]['servers']: serverobj = copy.copy(obj) serverobj.server = server[0] serverobj.prefix = server[1] serverobj.save() def setup_sample_job(): from sample_data import sample_job job = Job() for i in ['name', 'jobtagerev', 'atoms']: setattr(job, i, sample_job[i]) maintainers = User.objects.filter(username=sample_job['maintainer'][0]) if maintainers: job.maintainer = maintainers[0] else: job.maintainer = User.objects.create_user(*sample_job['maintainer']) job.provider = StageProvider.objects.get(name=sample_job['provider']) job.stage = Stage.objects.get(name=sample_job['stage'], provider=job.provider) job.arch = Arch.objects.get(specific=sample_job['arch'], provider=job.provider) job.release = Release.objects.get(name=sample_job['release'], provider=job.provider) job.save() if len(sys.argv) < 3: print_help() sys.exit(1) os.chdir(os.path.dirname(sys.argv[0])) cwd = os.getcwd() if not os.path.isdir(sys.argv[2]): os.makedirs(sys.argv[2]) os.chdir(sys.argv[2]) if management.get_version() < '0.99': print "You need django-1.0 to use this." sys.exit(1) sys.path.append(os.getcwd()) sys.path.append(cwd+'/custom') if sys.argv[1] == 'install': install_master() print """Setup done. Now you need to edit the database settings in %(dest)s/settings.py and run `./setup-master.py syncdb %(dest)s`""" % { 'dest': os.path.join(sys.argv[2], DESTDIR) } elif sys.argv[1] == 'syncdb': # Import stuff import settings from django.core.management import setup_environ setup_environ(settings) from master.models import User, StageProvider, Arch, Stage, Release, Mirror, Job # Start stuff syncdb_master() setup_sample_job() print "All done! Now you can start the master with `python manage.py runserver`" else: print_help() sys.exit(1)