--- a/Allura/allura/command/script.py
+++ b/Allura/allura/command/script.py
@@ -1,8 +1,15 @@
import sys
+import os.path
+import cProfile
+
+from pylons import c
+import pylons
+import webob
+
from ming.orm import session
-from pylons import c
+from allura.lib import helpers as h
+from allura.lib import utils
from . import base
-from allura.lib import helpers as h
class ScriptCommand(base.Command):
min_args=2
@@ -10,13 +17,26 @@
usage = '<ini file> <script> ...'
summary = 'Run a script as if it were being run at the paster shell prompt'
parser = base.Command.standard_parser(verbose=True)
+ parser.add_option('--profile', action='store_true', dest='profile',
+ help='Dump profiling data to <script>.profile')
+ parser.add_option('--pdb', action='store_true', dest='pdb',
+ help='Drop to a debugger on error')
def command(self):
self.basic_setup()
+ request = webob.Request.blank('--script--', environ={
+ 'paste.registry':self.registry})
+ self.registry.register(pylons.request, request)
+ if self.options.pdb:
+ base.log.info('Installing exception hook')
+ sys.excepthook = utils.postmortem_hook
with open(self.args[1]) as fp:
ns = dict(__name__='__main__')
sys.argv = self.args[1:]
- exec fp in ns
+ if self.options.profile:
+ cProfile.run(fp, '%s.profile' % os.path.basename(self.args[1]))
+ else:
+ exec fp in ns
class SetToolAccessCommand(base.Command):
min_args=3