def ls(args): " Show list of installed sites. " print_header("Installed sites:") for site in gen_sites(args.path): print site.get_info() return True
def autocomplete(force=False): " Shell autocompletion support. " if 'MAKESITE_AUTO_COMPLETE' not in environ and not force: return commands = filter(lambda cmd: cmd != 'main', ACTIONS.keys()) cwords = environ['COMP_WORDS'].split()[1:] cword = int(environ['COMP_CWORD']) try: current = cwords[cword - 1] except IndexError: current = '' try: sub_action = [cmd for cmd in commands if cmd in cwords][0] if sub_action in ['info', 'uninstall', 'update', 'template']: if settings.MAKESITE_HOME: if not current or current.startswith('/'): sites = list(gen_sites(settings.MAKESITE_HOME)) print ' '.join(site.deploy_dir for site in sites if site. deploy_dir.startswith(current)) else: names = map(lambda s: s.get_name( ), gen_sites(settings.MAKESITE_HOME)) print ' '.join( name for name in names if name.startswith(current)) elif sub_action == 'install' and (cwords[-1] == '-m' or (current and cwords[-2] == '-m')): print ' '.join( mod for mod in get_base_modules() if mod.startswith(current)) elif sub_action == 'install' and (cwords[-1] == '-t' or (current and cwords[-2] == '-t')): print ' '.join(tpl for tpl in get_base_templates( ) if tpl.startswith(current)) elif sub_action == 'module': print ' '.join( tpl for tpl in get_base_modules() if tpl.startswith(current)) except IndexError: print (' '.join(a for a in commands if a.startswith(current))) sys.exit(1)
def test_site(self): args = FakeArgs( template='django', branch='feature/red-alert', src=op.join(settings.MOD_DIR, 'django'), ) # Init engine engine = Installer(args) self.assertTrue(op.isdir(engine.deploy_dir)) self.assertEqual(engine.templates, ['base']) # Clone source engine.clone_source() self.assertTrue(op.isdir(op.join(engine.deploy_dir, 'source'))) self.assertTrue(op.isfile(op.join(engine.deploy_dir, 'source', 'Makefile'))) self.assertEqual(engine.template, 'base,src-dir,virtualenv,django') self.assertEqual(engine.target_dir, op.join(args.home, args.PROJECT, args.branch.replace('/', '-'))) self.assertEqual(engine.django_settings, 'settings.dev') self.assertEqual(engine.templates, [ ('base', op.join(settings.TPL_DIR, 'base')), ('src-dir', op.join(settings.TPL_DIR, 'src-dir')), ('virtualenv', op.join(settings.TPL_DIR, 'virtualenv')), ('django', op.join(settings.TPL_DIR, 'django')), ]) self.assertTrue(op.isfile(op.join(engine.deploy_dir, settings.TPLNAME))) self.assertTrue(op.isfile(op.join(engine.deploy_dir, 'service', 'django_install.sh'))) self.assertTrue(op.isfile(op.join(engine.deploy_dir, settings.CFGNAME))) # Build site engine.build() # Init site site = Site(engine.target_dir) self.assertEqual(site.get_name(), u'main.feature-red-alert') self.assertEqual(site.get_info(), u'main.feature-red-alert [base,src-dir,virtualenv,django]') self.assertTrue('www-data' in site.get_info(full=True)) with self.assertRaises(AssertionError): site.add_template('django') self.assertEqual(site._get_template_path('zeta'), op.join(settings.TPL_DIR, 'zeta')) site.add_template('zeta') site.run_install('zeta') zeta_scripts = list(site._gen_scripts('install', template_name='zeta')) self.assertEqual(zeta_scripts, [u'/tmp/main/feature-red-alert/service/zeta_install_update.sh']) self.assertEqual(site.get_info(), u'main.feature-red-alert [base,src-dir,virtualenv,django,zeta]') self.assertEqual(site['safe_branch'], 'feature-red-alert') site.remove_template('zeta') site.run_remove('zeta') self.assertEqual(site.get_info(), u'main.feature-red-alert [base,src-dir,virtualenv,django]') # Find site self.assertTrue(find_site(site.deploy_dir)) self.assertTrue(find_site(site.get_name())) # Gen scripts self.assertTrue(op.join(site.service_dir, 'django_install.sh') in site._gen_scripts('install')) sites = list(gen_sites(op.dirname(engine.deploy_dir))) self.assertTrue(sites) for s in sites: s.clean()
def test_site(self): from makesite import settings args = FakeArgs( template='django', branch='feature/red-alert', home=settings.MAKESITE_HOME, src=op.join(settings.MOD_DIR, 'django'), ) # Init engine engine = Installer(args) self.assertTrue(op.isdir(engine.deploy_dir)) self.assertEqual(engine.templates, ['base']) # Clone source engine.clone_source() self.assertTrue(op.isdir(op.join(engine.deploy_dir, 'source'))) self.assertTrue( op.isfile(op.join(engine.deploy_dir, 'source', 'Makefile'))) self.assertEqual(engine.template, 'base,src-dir,virtualenv,django') self.assertEqual( engine.target_dir, op.join(args.home, args.PROJECT, args.branch.replace('/', '-'))) self.assertEqual(engine.django_settings, 'settings.dev') self.assertEqual(engine.templates, [ ('base', op.join(settings.TPL_DIR, 'base')), ('src-dir', op.join(settings.TPL_DIR, 'src-dir')), ('virtualenv', op.join(settings.TPL_DIR, 'virtualenv')), ('django', op.join(settings.TPL_DIR, 'django')), ]) self.assertTrue(op.isfile(op.join(engine.deploy_dir, settings.TPLNAME))) self.assertTrue( op.isfile( op.join(engine.deploy_dir, 'service', 'django_install.sh'))) self.assertTrue(op.isfile(op.join(engine.deploy_dir, settings.CFGNAME))) # Build site engine.build() # Init site site = Site(engine.target_dir) self.assertEqual(site.get_name(), u'main.feature-red-alert') self.assertEqual( site.get_info(), u'main.feature-red-alert [base,src-dir,virtualenv,django]') self.assertTrue('www-data' in site.get_info(full=True)) if version_info >= (2, 7): with self.assertRaises(AssertionError): site.add_template('django') self.assertEqual(site._get_template_path('zeta'), op.join(settings.TPL_DIR, 'zeta')) site.add_template('zeta') site.run_install('zeta') zeta_scripts = list(site._gen_scripts('install', template_name='zeta')) self.assertEqual( zeta_scripts, [u'/tmp/main/feature-red-alert/service/zeta_install_update.sh']) self.assertEqual( site.get_info(), u'main.feature-red-alert [base,src-dir,virtualenv,django,zeta]') self.assertEqual(site['safe_branch'], 'feature-red-alert') site.remove_template('zeta') site.run_remove('zeta') self.assertEqual( site.get_info(), u'main.feature-red-alert [base,src-dir,virtualenv,django]') # Find site self.assertTrue(find_site(site.deploy_dir)) self.assertTrue(find_site(site.get_name())) # Gen scripts self.assertTrue( op.join(site.service_dir, 'django_install.sh') in site._gen_scripts('install')) sites = list(gen_sites(op.dirname(engine.deploy_dir))) self.assertTrue(sites) for s in sites: s.clean()