Mercurial > libervia-web
annotate libervia/server/tasks/task.py @ 1287:1f26d8c2afc1
server: restricted_bridge first draft:
bridge with a limited set of methods, where arguments are checked or removed, and
security_limit is used. This bridge is used for calls from browser.
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 19 Jun 2020 16:47:51 +0200 |
parents | a46d0e0f383b |
children | 822bd0139769 |
rev | line source |
---|---|
1239 | 1 #!/usr/bin/env python3 |
2 | |
1146 | 3 # Libervia: a Salut à Toi frontend |
1237 | 4 # Copyright (C) 2011-2020 Jérôme Poisson <goffi@goffi.org> |
1146 | 5 |
6 # This program is free software: you can redistribute it and/or modify | |
7 # it under the terms of the GNU Affero General Public License as published by | |
8 # the Free Software Foundation, either version 3 of the License, or | |
9 # (at your option) any later version. | |
10 | |
11 # This program is distributed in the hope that it will be useful, | |
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 # GNU Affero General Public License for more details. | |
15 | |
16 # You should have received a copy of the GNU Affero General Public License | |
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
18 from twisted.python.procutils import which | |
1245 | 19 from sat.core.log import getLogger |
20 from sat.tools.common import async_process | |
1146 | 21 from sat.core import exceptions |
22 from sat.core.i18n import _ | |
1245 | 23 from typing import Optional |
1146 | 24 |
25 log = getLogger(__name__) | |
26 | |
27 | |
1245 | 28 class Task: |
1146 | 29 """Handle tasks of a Libervia site""" |
1245 | 30 # can be "stop" or "continue" |
31 ON_ERROR: str = "stop" | |
32 LOG_OUTPUT: bool = True | |
33 # list of directories to check for restarting this task | |
1260 | 34 # Task.onDirEvent will be called if it exists, otherwise |
35 # the task will be run and Task.start will be called | |
1245 | 36 WATCH_DIRS: Optional[list] = None |
1261
a46d0e0f383b
tasks: `AFTER` attribute to handle tasks order:
Goffi <goffi@goffi.org>
parents:
1260
diff
changeset
|
37 # list of task names which must be prepared/started before this one |
a46d0e0f383b
tasks: `AFTER` attribute to handle tasks order:
Goffi <goffi@goffi.org>
parents:
1260
diff
changeset
|
38 AFTER: Optional[list] = None |
1146 | 39 |
1261
a46d0e0f383b
tasks: `AFTER` attribute to handle tasks order:
Goffi <goffi@goffi.org>
parents:
1260
diff
changeset
|
40 def __init__(self, manager, task_name): |
1245 | 41 self.manager = manager |
1261
a46d0e0f383b
tasks: `AFTER` attribute to handle tasks order:
Goffi <goffi@goffi.org>
parents:
1260
diff
changeset
|
42 self.name = task_name |
1245 | 43 |
44 @property | |
45 def host(self): | |
46 return self.manager.host | |
47 | |
48 @property | |
49 def resource(self): | |
50 return self.manager.resource | |
1146 | 51 |
52 @property | |
53 def site_path(self): | |
1245 | 54 return self.manager.site_path |
1146 | 55 |
56 @property | |
57 def build_path(self): | |
58 """path where generated files will be build for this site""" | |
1245 | 59 return self.manager.build_path |
1146 | 60 |
61 def getConfig(self, key, default=None, value_type=None): | |
1147
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
62 return self.host.getConfig(self.resource, key=key, default=default, |
02afab1b15c5
server, pages, tasks: moved getConfig to backend, and added shorcut version in LiberviaPage and TasksManager
Goffi <goffi@goffi.org>
parents:
1146
diff
changeset
|
63 value_type=value_type) |
1146 | 64 |
65 @property | |
66 def site_name(self): | |
67 return self.resource.site_name | |
68 | |
69 def findCommand(self, name, *args): | |
70 """Find full path of a shell command | |
71 | |
72 @param name(unicode): name of the command to find | |
73 @param *args(unicode): extra names the command may have | |
74 @return (unicode): full path of the command | |
75 @raise exceptions.NotFound: can't find this command | |
76 """ | |
77 names = (name,) + args | |
78 for n in names: | |
79 try: | |
1216 | 80 cmd_path = which(n)[0] |
1146 | 81 except IndexError: |
82 pass | |
1189
170802865156
server (tasks): fixed findCommand when first name can't be found
Goffi <goffi@goffi.org>
parents:
1166
diff
changeset
|
83 else: |
170802865156
server (tasks): fixed findCommand when first name can't be found
Goffi <goffi@goffi.org>
parents:
1166
diff
changeset
|
84 return cmd_path |
1146 | 85 raise exceptions.NotFound(_( |
1216 | 86 "Can't find {name} command, did you install it?").format(name=name)) |
1146 | 87 |
88 def runCommand(self, command, *args, **kwargs): | |
1245 | 89 kwargs['verbose'] = self.LOG_OUTPUT |
1146 | 90 return async_process.CommandProtocol.run(command, *args, **kwargs) |