equal
deleted
inserted
replaced
15 # |
15 # |
16 # You should have received a copy of the GNU Lesser General Public License along |
16 # You should have received a copy of the GNU Lesser General Public License along |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
18 |
18 |
19 import os, os.path as osp |
19 import os, os.path as osp |
20 import signal |
|
21 from tempfile import mkdtemp, NamedTemporaryFile, TemporaryFile |
20 from tempfile import mkdtemp, NamedTemporaryFile, TemporaryFile |
22 import tempfile |
21 import tempfile |
23 from Queue import Queue, Empty |
22 from Queue import Queue, Empty |
24 from subprocess import Popen, check_call, CalledProcessError |
23 from subprocess import Popen, check_call, CalledProcessError |
25 from shutil import rmtree, copy as copyfile |
24 from shutil import rmtree, copy as copyfile |
78 assert os.access(home, os.W_OK), \ |
77 assert os.access(home, os.W_OK), \ |
79 'No write access to your home directory, Firefox will crash.'\ |
78 'No write access to your home directory, Firefox will crash.'\ |
80 ' Are you sure "%s" is a valid home for user "%s"' % (home, user) |
79 ' Are you sure "%s" is a valid home for user "%s"' % (home, user) |
81 check_call(self.firefox_cmd + ['-CreateProfile', |
80 check_call(self.firefox_cmd + ['-CreateProfile', |
82 '%s %s' % (self._profile_name, self._tmp_dir)], |
81 '%s %s' % (self._profile_name, self._tmp_dir)], |
83 stdout=stdout, stderr=stderr) |
82 stdout=stdout, stderr=stderr) |
84 except CalledProcessError as cpe: |
83 except CalledProcessError as cpe: |
85 stdout.seek(0) |
84 stdout.seek(0) |
86 stderr.seek(0) |
85 stderr.seek(0) |
87 raise VerboseCalledProcessError(cpe.returncode, cpe.cmd, stdout.read(), stderr.read()) |
86 raise VerboseCalledProcessError(cpe.returncode, cpe.cmd, stdout.read(), stderr.read()) |
88 |
87 |
93 stdout=fnull, stderr=fnull) |
92 stdout=fnull, stderr=fnull) |
94 |
93 |
95 def stop(self): |
94 def stop(self): |
96 if self._process is not None: |
95 if self._process is not None: |
97 assert self._process.returncode is None, self._process.returncode |
96 assert self._process.returncode is None, self._process.returncode |
98 os.kill(self._process.pid, signal.SIGTERM) |
97 self._process.terminate() |
99 self._process.wait() |
98 self._process.wait() |
100 self._process = None |
99 self._process = None |
101 |
100 |
102 def __del__(self): |
101 def __del__(self): |
103 self.stop() |
102 self.stop() |