|
1 #!/usr/bin/env python |
|
2 # -*- coding: utf-8 -*- |
|
3 |
|
4 import os |
|
5 import sys |
|
6 from functools import wraps |
|
7 |
|
8 import click |
|
9 |
|
10 import fake_wx |
|
11 |
|
12 from ProjectController import ProjectController |
|
13 from LocalRuntimeMixin import LocalRuntimeMixin |
|
14 |
|
15 class Log: |
|
16 |
|
17 def __init__(self): |
|
18 self.crlfpending = False |
|
19 |
|
20 def write(self, s): |
|
21 if s: |
|
22 if self.crlfpending: |
|
23 sys.stdout.write("\n") |
|
24 sys.stdout.write(s) |
|
25 self.crlfpending = 0 |
|
26 |
|
27 def write_error(self, s): |
|
28 if s: |
|
29 self.write("Error: "+s) |
|
30 |
|
31 def write_warning(self, s): |
|
32 if s: |
|
33 self.write("Warning: "+s) |
|
34 |
|
35 def flush(self): |
|
36 sys.stdout.flush() |
|
37 |
|
38 def isatty(self): |
|
39 return False |
|
40 |
|
41 def progress(self, s): |
|
42 if s: |
|
43 sys.stdout.write(s+"\r") |
|
44 self.crlfpending = True |
|
45 |
|
46 |
|
47 def with_project_loaded(func): |
|
48 @wraps(func) |
|
49 def func_wrapper(self, *args, **kwargs): |
|
50 if not self.HasOpenedProject(): |
|
51 if self.check_and_load_project(): |
|
52 return 1 |
|
53 self.apply_config() |
|
54 return func(self, *args, **kwargs) |
|
55 |
|
56 return func_wrapper |
|
57 |
|
58 def connected(func): |
|
59 @wraps(func) |
|
60 def func_wrapper(self, *args, **kwargs): |
|
61 if self._connector is None: |
|
62 if self.session.uri: |
|
63 self.BeremizRoot.setURI_location(self.session.uri) |
|
64 if not self._Connect(): |
|
65 return 1 |
|
66 return func(self, *args, **kwargs) |
|
67 |
|
68 return func_wrapper |
|
69 |
|
70 class CLIController(LocalRuntimeMixin, ProjectController): |
|
71 def __init__(self, session): |
|
72 self.session = session |
|
73 log = Log() |
|
74 LocalRuntimeMixin.__init__(self, log) |
|
75 ProjectController.__init__(self, None, log) |
|
76 |
|
77 def check_and_load_project(self): |
|
78 if not os.path.isdir(self.session.project_home): |
|
79 self.logger.write_error( |
|
80 _("\"%s\" is not a valid Beremiz project\n") % self.session.project_home) |
|
81 return True |
|
82 |
|
83 errmsg, error = self.LoadProject(self.session.project_home, self.session.buildpath) |
|
84 if error: |
|
85 self.logger.write_error(errmsg) |
|
86 return True |
|
87 |
|
88 def apply_config(self): |
|
89 for k,v in self.session.config: |
|
90 self.SetParamsAttribute("BeremizRoot."+k, v) |
|
91 |
|
92 @with_project_loaded |
|
93 def build_project(self, target): |
|
94 |
|
95 if target: |
|
96 self.SetParamsAttribute("BeremizRoot.TargetType", target) |
|
97 |
|
98 return 0 if self._Build() else 1 |
|
99 |
|
100 @with_project_loaded |
|
101 @connected |
|
102 def transfer_project(self): |
|
103 |
|
104 return 0 if self._Transfer() else 1 |
|
105 |
|
106 @with_project_loaded |
|
107 @connected |
|
108 def run_project(self): |
|
109 |
|
110 return 0 if self._Run() else 1 |
|
111 |
|
112 |
|
113 def finish(self): |
|
114 |
|
115 self._Disconnect() |
|
116 |
|
117 if not self.session.keep: |
|
118 self.KillLocalRuntime() |
|
119 |
|
120 |