# 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;