CLIController.py
branchwxPython4
changeset 3501 fa291393aac7
child 3539 c2eec6aae07e
equal deleted inserted replaced
3491:88c4b18453d5 3501:fa291393aac7
       
     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