# pydumper.py
#
# This is being worked on - it does not yet work at all, in ay way
# shape or form :-)
#
# A new script engine, derived from the standard scripting engine,
# which dumps information.

# This generally can be used to grab all sorts of useful details about
# an engine - expose bugs in it or Python, dump the object model, etc.

# As it is derived from the standard engine, it fully supports Python
# as a scripting language - meaning the dumps produced can be quite dynamic,
# and based on the script code you execute.

import pyscript
from win32com.axscript import axscript

from pyscript import RaiseAssert, trace, Exception, SCRIPTTEXT_FORCEEXECUTION

PyDump_CLSID = '{ac527e60-c693-11d0-9c25-00aa00125a98}'

class AXScriptAttribute(pyscript.AXScriptAttribute):
	pass

class NamedScriptAttribute(pyscript.NamedScriptAttribute):
	pass


class PyScript(pyscript.PyScript):
	pass


def Register():
	import sys
	if '-d' in sys.argv:
		dispatcher = "DispatcherWin32trace"
		debug_desc = " ("+dispatcher+")"
		debug_option = "Yes"
	else:
		dispatcher = None
		debug_desc = ""
		debug_option = ""

	categories = [axscript.CATID_ActiveScript,axscript.CATID_ActiveScriptParse]
	clsid = PyDump_CLSID
	lcid = 0x0409 # // english
	policy = None # "win32com.axscript.client.axspolicy.AXScriptPolicy"

	print "Registering COM server%s..." % debug_desc
	from win32com.server.register import RegisterServer

	languageName = "PyDump"
	verProgId = "Python.Dumper.1"
	RegisterServer(clsid = clsid, pythonInstString = "win32com.axscript.client.pyscript.PyDumper", 
                       className = "Python Debugging/Dumping ActiveX Scripting Engine",
	                   progID = languageName, verProgID = verProgId,
                       catids = categories, 
                       policy=policy, dispatcher = dispatcher)

	CreateRegKey(languageName + "\\OLEScript")
	# Basic Registration for wsh.
	win32com.server.register._set_string(".pysDump", "pysDumpFile")
	win32com.server.register._set_string("pysDumpFile\\ScriptEngine", languageName)
	print "Dumping Server registered."
	
if __name__=='__main__':
	Register()


