annotate piecrust/admin/siteinfo.py @ 1188:a7c43131d871

bake: Fix file write flushing problem with Python 3.8+ Writing the cache files fails in Python 3.8 because it looks like flushing behaviour has changed. We need to explicitly flush. And even then, in very rare occurrences, it looks like it can still run into racing conditions, so we do a very hacky and ugly "retry" loop when fetching cached data :(
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 15 Jun 2021 22:36:23 -0700
parents 62900c42d6dd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import os
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import os.path
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 import sys
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 import copy
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 import logging
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 import subprocess
1105
68593928298d internal: Remove unnecessary imports.
Ludovic Chabant <ludovic@chabant.com>
parents: 960
diff changeset
7 from flask import flash
960
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
8 from piecrust import CACHE_DIR
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 from piecrust.app import PieCrustFactory
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 logger = logging.getLogger(__name__)
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 class UnauthorizedSiteAccessError(Exception):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 pass
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 class InvalidSiteError(Exception):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 pass
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 class SiteInfo:
952
94fd4f07da83 admin: Fix more URL prefix issues, improve publishing.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
24 def __init__(self, root_dir, *, url_prefix='', debug=False):
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 self.root_dir = root_dir
952
94fd4f07da83 admin: Fix more URL prefix issues, improve publishing.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
26 self.url_prefix = url_prefix
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 self.debug = debug
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 self._piecrust_factory = None
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 self._piecrust_app = None
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 self._scm = None
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31
935
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
32 def make_url(self, rel_url):
952
94fd4f07da83 admin: Fix more URL prefix issues, improve publishing.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
33 prefix = self.url_prefix
94fd4f07da83 admin: Fix more URL prefix issues, improve publishing.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
34 if not prefix:
94fd4f07da83 admin: Fix more URL prefix issues, improve publishing.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
35 return rel_url
94fd4f07da83 admin: Fix more URL prefix issues, improve publishing.
Ludovic Chabant <ludovic@chabant.com>
parents: 935
diff changeset
36 return prefix + rel_url
935
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
37
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
38 @property
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 def piecrust_factory(self):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 if self._piecrust_factory is None:
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 self._piecrust_factory = PieCrustFactory(
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 self.root_dir,
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 cache_key='admin',
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 debug=self.debug,
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 config_values=[
935
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
46 ('site/root', self.make_url('/preview/')),
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
47 ('site/asset_url_format', self.make_url(
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
48 '/preview/_asset/%path%'))]
7ecb946bfafd admin: Lots of fixes for running the admin panel in a WSGI server.
Ludovic Chabant <ludovic@chabant.com>
parents: 886
diff changeset
49 )
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 return self._piecrust_factory
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 @property
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 def piecrust_app(self):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 if self._piecrust_app is None:
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 logger.debug("Creating PieCrust admin app: %s" % self.root_dir)
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 self._piecrust_app = self.piecrust_factory.create()
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 return self._piecrust_app
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 @property
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 def scm(self):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 if self._scm is None:
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 cfg = copy.deepcopy(self.piecrust_app.config.get('scm', {}))
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 if os.path.isdir(os.path.join(self.root_dir, '.hg')):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 from .scm.mercurial import MercurialSourceControl
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 self._scm = MercurialSourceControl(self.root_dir, cfg)
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 elif os.path.isdir(os.path.join(self.root_dir, '.git')):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 from .scm.git import GitSourceControl
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 self._scm = GitSourceControl(self.root_dir, cfg)
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 else:
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 self._scm = False
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 return self._scm
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 @property
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 def publish_pid_file(self):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 return os.path.join(self.piecrust_app.cache_dir, 'publish.pid')
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 @property
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 def publish_log_file(self):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 return os.path.join(self.piecrust_app.cache_dir, 'publish.log')
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82
960
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
83 def rebakeAssets(self):
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
84 out_dir = os.path.join(
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
85 self.root_dir,
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
86 CACHE_DIR,
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
87 self.piecrust_factory.cache_key,
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
88 'server')
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
89 args = [
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
90 '--no-color',
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
91 'bake',
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
92 '-o', out_dir,
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
93 '--assets-only']
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
94 proc = self._runChef(args)
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
95 try:
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
96 proc.wait(timeout=2)
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
97 if proc.returncode == 0:
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
98 flash("Assets baked successfully!")
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
99 else:
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
100 flash("Asset baking process returned '%s'... check the log." %
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
101 proc.returncode)
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
102 except subprocess.TimeoutExpired:
1105
68593928298d internal: Remove unnecessary imports.
Ludovic Chabant <ludovic@chabant.com>
parents: 960
diff changeset
103 flash("Asset baking process is still running... "
68593928298d internal: Remove unnecessary imports.
Ludovic Chabant <ludovic@chabant.com>
parents: 960
diff changeset
104 "check the log later.")
960
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
105
955
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
106 def getPublishTargetLogFile(self, target):
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
107 target = target.replace(' ', '_').lower()
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
108 return os.path.join(self.piecrust_app.cache_dir,
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
109 'publish.%s.log' % target)
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
110
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 def publish(self, target):
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 args = [
955
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
113 '--no-color',
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 '--pid-file', self.publish_pid_file,
955
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
115 '--log', self.publish_log_file,
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 'publish',
955
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
117 '--log-publisher', self.getPublishTargetLogFile(target),
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
118 '--log-debug-info',
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 target]
960
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
120 proc = self._runChef(args)
955
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
121 try:
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
122 proc.wait(timeout=2)
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
123 if proc.returncode == 0:
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
124 flash("Publish process ran successfully!")
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
125 else:
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
126 flash("Publish process returned '%s'... check the log." %
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
127 proc.returncode)
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
128 except subprocess.TimeoutExpired:
a4f1eafd1964 admin: Show more info from the publishing process.
Ludovic Chabant <ludovic@chabant.com>
parents: 952
diff changeset
129 flash("Publish process is still running... check the log later.")
886
dcdec4b951a1 admin: Get the admin panel working again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130
1114
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1105
diff changeset
131 def runTask(self, task_id):
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1105
diff changeset
132 args = [
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1105
diff changeset
133 '--no-color',
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1105
diff changeset
134 'tasks', 'run',
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1105
diff changeset
135 '-t', task_id]
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1105
diff changeset
136 self._runChef(args)
8af2ea1f5c34 tasks: Add new `tasks` command and infrastructure, with `mention` task.
Ludovic Chabant <ludovic@chabant.com>
parents: 1105
diff changeset
137
960
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
138 def _runChef(self, args):
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
139 chef_path = os.path.realpath(os.path.join(
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
140 os.path.dirname(__file__),
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
141 '../../chef.py'))
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
142 args = [sys.executable, chef_path] + args
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
143
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
144 logger.info("Running chef command: %s" % args)
1183
62900c42d6dd admin: Don't pass a custom environment to sub-processes.
Ludovic Chabant <ludovic@chabant.com>
parents: 1114
diff changeset
145 proc = subprocess.Popen(args, cwd=self.root_dir)
960
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
146 logger.info("Chef process ID: %s" % proc.pid)
8101692fdc11 admin: Add a "rebake preview assets" button to the dashboard.
Ludovic Chabant <ludovic@chabant.com>
parents: 955
diff changeset
147 return proc