# about:python, originally by Alex Badea
from xpcom import components, verbose
import sys, os
import platform
def getAbout():
# Generate it each time so its always up-to-date.
# Sort to keep things purdy
mod_names = sys.modules.keys()
mod_names.sort()
env = os.environ.items()
env.sort()
return """
about:python
about:python
Python %(version)s on %(platform)s
resources
Visit the pyxpcom wiki.
sys.path
%(path)s
environment
%(environment)s
modules
%(modules)s
""" % {
'version': sys.version,
'platform': platform.platform(),
'path': "
".join(sys.path),
'environment': "
".join(["%s=%s" % (n,v) for n, v in env]),
'modules': ", ".join(mod_names),
}
class AboutPython:
_com_interfaces_ = components.interfaces.nsIAboutModule
_reg_contractid_ = '@mozilla.org/network/protocol/about;1?what=python'
_reg_clsid_ = '{6d5d462e-6de7-4bca-bbc6-c488d481351b}'
_reg_desc_ = "about:python handler"
def __init__(self):
pass
def newChannel(self, aURI):
ioService = components.classes["@mozilla.org/network/io-service;1"] \
.getService();
istream = components.classes["@mozilla.org/io/string-input-stream;1"] \
.createInstance()
about = getAbout()
istream.setData(about, len(about))
channel = components.classes["@mozilla.org/network/input-stream-channel;1"] \
.createInstance(components.interfaces.nsIInputStreamChannel)
channel.setURI(aURI)
#channel.contentType = "text/html"
channel.contentStream = istream
return channel
def getURIFlags(self, aURI):
return 0;