1 # -*- coding: utf-8 -*-
3 from subprocess import call
4 from optparse import make_option
6 from django.core.management.base import BaseCommand, CommandError
7 from django.core.management import call_command
10 class Command(BaseCommand):
12 option_list = BaseCommand.option_list + (
19 help='Path to node binary'),
26 help='Path to npm binary'),
30 dest='editor_npm_env',
33 help='Destination path of npm environment, defaults to ./node_modules'),
37 dest='editor_optimize',
40 help='Optimization strategy for editor build'),
43 def handle(self, **options):
44 wiki_base_dir = os.path.join(os.getcwd(), 'apps', 'wiki', 'static', 'wiki')
45 rng_base_dir = os.path.join(wiki_base_dir, 'editor')
46 build_dir = os.path.join(wiki_base_dir, 'build')
48 self.stdout.write('Installing editor dependencies')
49 if options['editor_npm_env']:
50 npm_env = os.path.join(rng_base_dir, options['editor_npm_env'])
51 if not os.path.exists(npm_env):
53 assert os.path.isdir(npm_env)
54 os.symlink(npm_env, os.path.join(rng_base_dir, 'node_modules'))
56 call([options['npm_bin'], 'install'], cwd=rng_base_dir)
58 raise CommandError('Something went wrong, propably npm binary not found. Tried: %s' % options['npm_bin'])
60 self.stdout.write('Building editor')
61 if options['node_bin_path']:
62 # grunt needs npm binary to be foundable in PATH
63 os.environ['PATH'] = '%s:%s' % (options['node_bin_path'], os.environ['PATH'])
64 args = ['./node_modules/.bin/grunt', 'build', '--output-dir=%s' % build_dir]
65 if options['editor_optimize']:
66 args.append('--optimize=%s' % options['editor_optimize'])
67 call(args, cwd=rng_base_dir)
69 call_command('collectstatic', interactive=False, ignore_patterns=['editor'])