class IApplicationLoader(components.Interface):
def getParameter(self):
"""Return a description of the command-line invocation of this loader.
@return: A 4-tuple suitable for use as an element of a
C{twisted.python.usage.Options.optParameters} list.
"""
def getApplication(self, argument, passphrase):
"""Load and return an application.
@type argument: C{str}
@param argument: The argument specified on the command line.
@rtype: C{Componentized}
@return: An object suitable for use as an application.
"""
class _BasicLoader:
__implements__ = IApplicationLoader
def getParameter(self):
return [self.long, self.short, None, self.desc]
def getApplication(self, argument, passphrase):
try:
log.msg("Loading %s..." % argument)
application = service.loadApplication(argument, self.type, passphrase)
log.msg("Loaded.")
except Exception, e:
s = "Failed to load application: %s" % e
if isinstance(e, KeyError) and e.args[0] == "application":
s += """
Could not find 'application' in the file. To use 'twistd -y', your .tac
file must create a suitable object (e.g., by calling service.Application())
and store it in a variable named 'application'. twistd loads your .tac file
and scans the global variables for one of this name.
Please read the 'Using Application' HOWTO for details.
"""
traceback.print_exc(file=log.logfile)
log.msg(s)
log.err()
raise SystemError('\n' + s + '\n')
else:
return application
class TAPLoader(_BasicLoader):
long = 'file'
short = 'f'
desc = "read the given .tap file"
type = 'pickle'
class TAXLoader(_BasicLoader):
type = long = 'xml'
short = 'x'
desc = "read the given .tax file"
class TASLoader(_BasicLoader):
type = long = 'source'
short = 's'
desc = 'read the given .tas file'
syntax highlighted by Code2HTML, v. 0.9.1