"""Show the source of an Seamstress Exchange module."""
#Created: Fri Jul 23 20:00:14 PDT 2004
#Author: Shannon -jj Behrens
#Email: jjinux@users.sourceforge.net
#
#Copyright (c) Shannon -jj Behrens. All rights reserved.
import sys
from aquarium.util.AquariumTemplate import AquariumTemplate
from BaseController import BaseController
class view_source(BaseController):
def __call__(self):
"""Show the source of an Seamstress Exchange module.
This module accepts the form parameter "moduleName" for the name of the
Aquarium module to display.
For templates, show the source of the template itself. Finding the
source is no small feat. We'll have to figure out the path relative to
this module's location.
Don't show AquariumProperties since it has my database password.
"""
ctx = self._ctx
moduleName = ctx.form.get("moduleName")
if not moduleName or not ctx.iLib.validModuleName(moduleName):
self.fail("Invalid module name.")
if moduleName == "conf.AquariumProperties":
self.fail("""\
Hmm, I can't show you that since it has my database password.""")
instance = ctx.iLib.aquariumFactory(moduleName)
if not isinstance(instance, AquariumTemplate):
fileName = sys.modules[instance.__module__].__file__
if fileName.endswith(".pyc"):
fileName = fileName[:-1]
else:
fileName = sys.modules[instance.__module__].__CHEETAH_src__
self._ctx.iLib.forward("echo", file(fileName).read(),
contentType="text/plain")
def fail(self, why):
"""Set actionResults and forward to the default screen."""
ctx = self._ctx
ctx.actionResults = why
self._ctx.iLib.forward(ctx.properties.DEFAULT_SCREEN)
|