home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / CMCD0704.ISO / Software / Shareware / Comunicatii / jyte / jyte.exe / interp.py < prev    next >
Text File  |  2002-12-18  |  2KB  |  54 lines

  1. """Python.Interpreter COM Server
  2.  
  3.   This module implements a very very simple COM server which
  4.   exposes the Python interpreter.
  5.  
  6.   This is designed more as a demonstration than a full blown COM server.
  7.   General functionality and Error handling are both limited.
  8.  
  9.   To use this object, ensure it is registered by running this module
  10.   from Python.exe.  Then, from Visual Basic, use "CreateObject('Python.Interpreter')",
  11.   and call its methods!
  12. """
  13.  
  14. from win32com.server.exception import Exception
  15. from pywintypes import UnicodeType
  16. import winerror
  17.  
  18. # Expose the Python interpreter.
  19. class Interpreter:
  20.     """The interpreter object exposed via COM
  21.     """
  22.     _public_methods_ = [ 'Exec', 'Eval' ]
  23.     # All registration stuff to support fully automatic register/unregister
  24.     _reg_verprogid_ = "Python.Interpreter.2"
  25.     _reg_progid_ = "Python.Interpreter"
  26.     _reg_desc_ = "Python Interpreter"
  27.     _reg_clsid_ = "{30BD3490-2632-11cf-AD5B-524153480001}"
  28.     _reg_class_spec_ = "win32com.servers.interp.Interpreter"
  29.  
  30.     def __init__(self):
  31.         self.dict = {}
  32.  
  33.     def Eval(self, exp):
  34.         """Evaluate an expression.
  35.         """
  36.         if type(exp) not in [type(''),UnicodeType]:
  37.             raise Exception(desc="Must be a string",scode=winerror.DISP_E_TYPEMISMATCH)
  38.  
  39.         return eval(str(exp), self.dict)
  40.     def Exec(self, exp):
  41.         """Execute a statement.
  42.         """
  43.         if type(exp) not in [type(''), UnicodeType]:
  44.             raise Exception(desc="Must be a string",scode=winerror.DISP_E_TYPEMISMATCH)
  45.         exec str(exp) in self.dict
  46.  
  47. def Register():
  48.     import win32com.server.register
  49.     return win32com.server.register.UseCommandLine(Interpreter)
  50.  
  51. if __name__=='__main__':
  52.     print "Registering COM server..."
  53.     Register()
  54.