optparse -> argparse
[redakcja.git] / apps / build / management / commands / build.py
1 # -*- coding: utf-8 -*-
2 #
3 # This file is part of MIL/PEER, licensed under GNU Affero GPLv3 or later.
4 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 #
6 import os
7 from subprocess import call
8 from optparse import make_option
9
10 from django.core.management.base import BaseCommand, CommandError
11 from django.core.management import call_command
12
13
14 class Command(BaseCommand):
15
16     def add_arguments(self, parser):
17         parser.add_argument(
18             '--node-bin-path',
19             action='store',
20             dest='node_bin_path',
21             type='string',
22             default=None,
23             help='Path to node binary')
24         parser.add_argument(
25             '--npm-bin',
26             action='store',
27             dest='npm_bin',
28             type='string',
29             default='npm',
30             help='Path to npm binary')
31         parser.add_argument(
32             '--editor-npm-env',
33             action='store',
34             dest='editor_npm_env',
35             type='string',
36             default=None,
37             help='Destination path of npm environment, defaults to ./node_modules')
38         parser.add_argument(
39             '--editor-optimize',
40             action='store',
41             dest='editor_optimize',
42             type='string',
43             default=None,
44             help='Optimization strategy for editor build')
45
46     def handle(self, **options):
47         wiki_base_dir = os.path.join(os.getcwd(), 'apps', 'wiki', 'static', 'wiki')
48         rng_base_dir = os.path.join(wiki_base_dir, 'editor')
49         build_dir = os.path.join(wiki_base_dir, 'build')
50
51         self.stdout.write('Installing editor dependencies')
52         if options['editor_npm_env']:
53             npm_env = os.path.join(rng_base_dir, options['editor_npm_env'])
54             if not os.path.exists(npm_env):
55                 os.makedirs(npm_env)
56             assert os.path.isdir(npm_env)
57             os.symlink(npm_env, os.path.join(rng_base_dir, 'node_modules'))
58         try:
59             call([options['npm_bin'], 'install'], cwd=rng_base_dir)
60         except OSError:
61             raise CommandError('Something went wrong, propably npm binary not found. Tried: %s' % options['npm_bin'])
62
63         self.stdout.write('Building editor')
64         if options['node_bin_path']:
65             # grunt needs npm binary to be foundable in PATH
66             os.environ['PATH'] = '%s:%s' % (options['node_bin_path'], os.environ['PATH'])
67         args = ['./node_modules/.bin/grunt', 'build', '--output-dir=%s' % build_dir]
68         if options['editor_optimize']:
69             args.append('--optimize=%s' % options['editor_optimize'])
70         self.stdout.write('Calling %s at %s' % (' '.join(args), rng_base_dir))
71         call(args, cwd=rng_base_dir)
72
73         call_command('collectstatic', interactive=False, ignore_patterns=['editor'])