annotate piecrust/processing/browserify.py @ 1041:717ac3c4ee77

bake: Fix where the Browserify processor outputs things.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 20 Jan 2018 17:15:24 -0800
parents 7487e2df8a56
children c2bfa1869f0d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1038
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import os
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import os.path
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 import logging
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 import platform
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 import subprocess
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 from piecrust.processing.base import Processor, PRIORITY_FIRST, FORCE_BUILD
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 logger = logging.getLogger(__name__)
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 class BrowserifyProcessor(Processor):
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 PROCESSOR_NAME = 'browserify'
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 def __init__(self):
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 super(BrowserifyProcessor, self).__init__()
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 self.priority = PRIORITY_FIRST
1041
717ac3c4ee77 bake: Fix where the Browserify processor outputs things.
Ludovic Chabant <ludovic@chabant.com>
parents: 1038
diff changeset
18 self.is_delegating_dependency_check = False
1038
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 self._conf = None
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 def initialize(self, app):
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 super(BrowserifyProcessor, self).initialize(app)
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 self._conf = app.config.get('browserify')
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 if self._conf is None:
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 return
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 if self._conf is True:
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 self._conf = {}
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 self._conf.setdefault('bin', 'browserify')
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 def matches(self, path):
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 return self._conf is not None and os.path.splitext(path)[1] == '.js'
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 def getDependencies(self, path):
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 return FORCE_BUILD
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38
1041
717ac3c4ee77 bake: Fix where the Browserify processor outputs things.
Ludovic Chabant <ludovic@chabant.com>
parents: 1038
diff changeset
39 def getOutputFilenames(self, filename):
717ac3c4ee77 bake: Fix where the Browserify processor outputs things.
Ludovic Chabant <ludovic@chabant.com>
parents: 1038
diff changeset
40 return [filename]
717ac3c4ee77 bake: Fix where the Browserify processor outputs things.
Ludovic Chabant <ludovic@chabant.com>
parents: 1038
diff changeset
41
1038
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 def process(self, path, out_dir):
1041
717ac3c4ee77 bake: Fix where the Browserify processor outputs things.
Ludovic Chabant <ludovic@chabant.com>
parents: 1038
diff changeset
43 out_path = os.path.join(out_dir, os.path.basename(path))
1038
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 args = [self._conf['bin'], path, '-o', out_path]
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 cwd = self.app.root_dir
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 logger.debug("Running Browserify: %s" % ' '.join(args))
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 try:
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 retcode = subprocess.call(args, cwd=cwd)
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 except FileNotFoundError as ex:
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 logger.error("Tried running Browserify processor "
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 "with command: %s" % args)
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 raise Exception("Error running Browserify. "
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 "Did you install it?") from ex
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 if retcode != 0:
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 raise Exception("Error occured in Browserify compiler. "
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 "Please check log messages above for "
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 "more information.")
7487e2df8a56 bake: Add support for Browserify.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 return True