##################################################
# SPYCE - Python-based HTML Scripting
# Copyright (c) 2002 Rimon Barr.
#
# Refer to spyce.py
##################################################
__doc__ = '''Spyce modules functionality.'''
##################################################
# Spyce module
#
class spyceModule:
"All Spyce module should subclass this."
def __init__(self, wrapper):
self._api = wrapper
def start(self):
# called by spyce.py to initialize module
pass
def finish(self, theError=None):
# called by spyce.py to clean up
pass
def init(self, *args, **kwargs):
# called from compiled spyceProcess
pass
def __repr__(self):
return 'no information, '+str(self.__class__)
class spyceModulePlus(spyceModule):
def __init__(self, wrapper):
spyceModule.__init__(self, wrapper)
self.wrapper = self._api # deprecated
self.modules = moduleFinder(wrapper)
self.globals = wrapper.getGlobals()
from code import InteractiveConsole
import sys
class BreakpointConsole(InteractiveConsole):
def __init__(self, locals):
InteractiveConsole.__init__(self, locals, 'bpconsole')
from spyceConsole import DummyWriter
sys.stdout = DummyWriter(sys.__stdout__, sys.stdout, 'bpconsole')
sys.stderr = DummyWriter(sys.__stderr__, sys.stderr, 'bpconsole')
def __del__(self):
sys.stdout = sys.stdout.other_stream
sys.stderr = sys.stderr.other_stream
def raw_input(self, prompt=''):
self.write(prompt)
s = raw_input().rstrip()
s = s.rstrip()
if not s or s == 'continue':
raise EOFError()
return s
# this is what gets passed to handlers as "api"
class moduleFinder:
def __init__(self, wrapper):
self._wrapper = wrapper
def db(self):
return self._wrapper._codeenv.db
db = property(db)
def breakpoint(self, locals=None):
# (convenience method for active handlers)
if locals is None:
import sys
locals = sys._getframe(1).f_locals
import threading
th = threading.currentThread()
old_name = th.getName()
try:
th.setName('bpconsole')
bc = BreakpointConsole(locals)
sys.stdout.write('Spyce breakpoint console: type "continue" (without the quotes) to exit\n')
bc.interact()
finally:
th.setName(old_name)
def __repr__(self):
return 'moduleFinder'
def __getattr__(self, name):
return self._wrapper.getModule(name)
##################################################
# Spyce module API
#
spyceModuleAPI = [ 'getFilename', 'getCode',
'getCodeRefs', 'getModRefs',
'getServerObject', 'getServerGlobals', 'getServerID',
'getModules', 'getModule', 'setModule', 'getGlobals',
'registerModuleCallback', 'unregisterModuleCallback',
'getRequest', 'getResponse', 'setResponse',
'registerResponseCallback', 'unregisterResponseCallback',
'spyceString', 'spyceFile', 'spyceModule', 'spyceTaglib',
'setStdout', 'getStdout',
]
|