Subversion Repositories HomeAutomation

Rev

Blame | Last modification | View Log | SVN | RSS feed

  1. #!/usr/bin/python
  2.  
  3. import uncen
  4. import terminal
  5. import sys
  6.  
  7. import macro
  8.  
  9. def handleterm( core, term, fd, event ):
  10.     lines = term.lines()
  11.     for line in lines:
  12.         doline( core, term, line )
  13.     term.prompt("> ")
  14.  
  15. def doline( core, term, line ):
  16.     args = line.split(" ")
  17.     cmd = args.pop(0)
  18.     if cmd == "":
  19.         pass
  20.     elif cmd[0] == ".":
  21.         try:
  22.             jid = cmd[1:]
  23.             job = core.job_get( jid )
  24.             job.termcmd( args )
  25.         except:
  26.             term.write( "Error" )
  27.     elif cmd == "run":
  28.         try:
  29.             jobname = args.pop(0)
  30.             if jobname[0] == '.':
  31.                 name = jobname[1:]
  32.                 jobname = args.pop(0)
  33.             else:
  34.                 name = None
  35.             jobclass = getajob( jobname )
  36.             if jobclass == None:
  37.                 term.write( "Error loading \"%s\"" % (jobname,) )
  38.             else:
  39.                 try:
  40.                     job = jobclass( core, args )
  41.                     if name != None:
  42.                         core.job_setname( job.jid, name )
  43.                     term.write( "Started job #%s" % (core.job_name(job.jid),) )
  44.                 except:
  45.                     term.write( "Error starting \"%s\"" % (jobname,) )
  46.         except:
  47.             term.write( "Error loading" )
  48.     elif cmd == "kill":
  49.         core.job_close( args[0] )
  50.     elif cmd == "list":
  51.         jids = core.job_list()
  52.         term.write( "Active Jobs:" )
  53.         for jid in jids:
  54.             job = core.job_get( jid )
  55.             term.write( "%s%8s - %s (v. %s) - %s" % ({True:"L", False:" "}[job.listen], core.job_name(job.jid), job.name, job.version, job.getstatus()) )
  56.     elif cmd == "lastjob":
  57.         core.set_lastjob( args[0] )
  58.     else:
  59.         term.write( "Illegal command: " + cmd )
  60.  
  61. def getajob( name ):
  62.     filename = (apppath + "jobs/%s.py") % (name,)
  63.     g = {}
  64.     try:
  65.         execfile( filename, g )
  66.         return g['Job']
  67.     except IOError:
  68.         return None
  69.  
  70. def getmacro( name, cmdpars ):
  71.     filename = (apppath + "macros/%s.macro") % (name,)
  72.     return macro.parse( filename, cmdpars )
  73.  
  74. apppath = "/home/pengi/devel/can/Uncen/" #FIXME!!!
  75.  
  76. args = sys.argv[1:]
  77.  
  78. cmdpars = {}
  79. try:
  80.     while len(args):
  81.         arg = args.pop(0)
  82.         if arg[0] == "-":
  83.             name = arg[1:]
  84.             val = args.pop(0)
  85.             cmdpars[name] = val
  86. except IndexError:
  87.     pass
  88.  
  89. if cmdpars.has_key('m'):
  90.     macrofile = cmdpars.pop('m')
  91.     init = getmacro( macrofile, cmdpars )
  92. else:
  93.     init = []
  94.  
  95. core = uncen.UncenCore()
  96.  
  97. term = terminal.TerminalStd()
  98. core.trigger_register( term.fileno_in(), lambda fd, event: handleterm( core, term, fd, event ) )
  99. core.term=term
  100.  
  101. for line in init:
  102.     term.write( "> "+line )
  103.     doline( core, term, line )
  104.  
  105. term.prompt("> ")
  106.  
  107. running = True
  108. while running:
  109.     try:
  110.         core.do_poll(100)
  111.     except KeyboardInterrupt:
  112.         term.write( "Keyboard interrupt, exit" )
  113.         running = False
  114.     except SystemExit:
  115.         term.write( "System exit" )
  116.         running = False
  117.  
  118. core.close()
  119. term.close()
  120.