Mercurial > piecrust2
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 |
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 |