def __enter__(cls): def handler(signum, frame): # We raise an exception **and** schedule a call to exit the # process hard. This is because we cannot rely on the exception # being raised during useful code. Sometimes, it will be raised # while the reactor is looping, which means that it will be # ignored. # # If the exception is raised during the actual job, then we'll get # a nice traceback indicating what timed out, and that will be # logged as an OOPS. # # Regardless of where the exception is raised, we'll hard exit the # process and have a TimeoutError OOPS logged, although that will # have a crappy traceback. See the job_raised callback in # TwistedJobRunner.runJobInSubprocess for the other half of that. reactor.callFromThread(reactor.callLater, 0, os._exit, TwistedJobRunner.TIMEOUT_CODE) raise TimeoutError scripts.execute_zcml_for_scripts(use_web_security=False) signal(SIGHUP, handler) dbconfig.override(dbuser=cls.dbuser, isolation_level='read_committed') # XXX wgrant 2011-09-24 bug=29744: initZopeless used to do this. # Should be removed from callsites verified to not need it. set_immediate_mail_delivery(True)
def __enter__(cls): def handler(signum, frame): # We raise an exception **and** schedule a call to exit the # process hard. This is because we cannot rely on the exception # being raised during useful code. Sometimes, it will be raised # while the reactor is looping, which means that it will be # ignored. # # If the exception is raised during the actual job, then we'll get # a nice traceback indicating what timed out, and that will be # logged as an OOPS. # # Regardless of where the exception is raised, we'll hard exit the # process and have a TimeoutError OOPS logged, although that will # have a crappy traceback. See the job_raised callback in # TwistedJobRunner.runJobInSubprocess for the other half of that. reactor.callFromThread( reactor.callLater, 0, os._exit, TwistedJobRunner.TIMEOUT_CODE) raise TimeoutError scripts.execute_zcml_for_scripts(use_web_security=False) signal(SIGHUP, handler) dbconfig.override(dbuser=cls.dbuser, isolation_level='read_committed') # XXX wgrant 2011-09-24 bug=29744: initZopeless used to do this. # Should be removed from callsites verified to not need it. set_immediate_mail_delivery(True)
def ensure_zcml(): """Ensure the zcml has been executed for the current process.""" global needs_zcml if not needs_zcml: return transaction.abort() scripts.execute_zcml_for_scripts(use_web_security=False) set_immediate_mail_delivery(True) needs_zcml = False
def run(self, use_web_security=False, isolation=None): """Actually run the script, executing zcml and initZopeless.""" if isolation is None: isolation = 'read_committed' self._init_zca(use_web_security=use_web_security) self._init_db(isolation=isolation) # XXX wgrant 2011-09-24 bug=29744: initZopeless used to do this. # Should be called directly by scripts that actually need it. set_immediate_mail_delivery(True) date_started = datetime.datetime.now(UTC) profiler = None if self.options.profile: profiler = Profile() original_feature_controller = get_relevant_feature_controller() install_feature_controller(make_script_feature_controller(self.name)) try: if profiler: profiler.runcall(self.main) else: self.main() except LaunchpadScriptFailure as e: self.logger.error(str(e)) sys.exit(e.exit_status) except SilentLaunchpadScriptFailure as e: sys.exit(e.exit_status) else: date_completed = datetime.datetime.now(UTC) self.record_activity(date_started, date_completed) finally: install_feature_controller(original_feature_controller) if profiler: profiler.dump_stats(self.options.profile)