1 # -*- coding: utf-8 -*-
 
   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.
 
   7 from subprocess import call
 
   8 from optparse import make_option
 
  10 from django.core.management.base import BaseCommand, CommandError
 
  11 from django.core.management import call_command
 
  14 class Command(BaseCommand):
 
  16     option_list = BaseCommand.option_list + (
 
  23             help='Path to node binary'),
 
  30             help='Path to npm binary'),
 
  34             dest='editor_npm_env',
 
  37             help='Destination path of npm environment, defaults to ./node_modules'),
 
  41             dest='editor_optimize',
 
  44             help='Optimization strategy for editor build'),
 
  47     def handle(self, **options):
 
  48         wiki_base_dir = os.path.join(os.getcwd(), 'apps', 'wiki', 'static', 'wiki')
 
  49         rng_base_dir = os.path.join(wiki_base_dir, 'editor')
 
  50         build_dir = os.path.join(wiki_base_dir, 'build')
 
  52         self.stdout.write('Installing editor dependencies')
 
  53         if options['editor_npm_env']:
 
  54             npm_env = os.path.join(rng_base_dir, options['editor_npm_env'])
 
  55             if not os.path.exists(npm_env):
 
  57             assert os.path.isdir(npm_env)
 
  58             os.symlink(npm_env, os.path.join(rng_base_dir, 'node_modules'))
 
  60             call([options['npm_bin'], 'install'], cwd=rng_base_dir)
 
  62             raise CommandError('Something went wrong, propably npm binary not found. Tried: %s' % options['npm_bin'])
 
  64         self.stdout.write('Building editor')
 
  65         if options['node_bin_path']:
 
  66             # grunt needs npm binary to be foundable in PATH
 
  67             os.environ['PATH'] = '%s:%s' % (options['node_bin_path'], os.environ['PATH'])
 
  68         args = ['./node_modules/.bin/grunt', 'build', '--output-dir=%s' % build_dir]
 
  69         if options['editor_optimize']:
 
  70             args.append('--optimize=%s' % options['editor_optimize'])
 
  71         self.stdout.write('Calling %s at %s' % (' '.join(args), rng_base_dir))
 
  72         call(args, cwd=rng_base_dir)
 
  74         call_command('collectstatic', interactive=False, ignore_patterns=['editor'])