def run(self): # pragma: no cover if not self.args: self.out('You must give a config file') return 2 app_spec = self.args[0] vars = self.get_options() app_name = self.options.app_name if not self._scheme_re.search(app_spec): app_spec = 'config:' + app_spec server_name = self.options.server_name if self.options.server: server_spec = 'egg:pyramid' assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() # do not open the browser on each reload so check hupper first if self.options.browser and not hupper.is_active(): def open_browser(): context = loadcontext(SERVER, app_spec, name=server_name, relative_to=base, global_conf=vars) url = 'http://127.0.0.1:{port}/'.format(**context.config()) time.sleep(1) webbrowser.open(url) t = threading.Thread(target=open_browser) t.setDaemon(True) t.start() if self.options.reload and not hupper.is_active(): if self.options.verbose > 1: self.out('Running reloading file monitor') hupper.start_reloader( 'pyramid.scripts.pserve.main', reload_interval=int(self.options.reload_interval), verbose=self.options.verbose, ) return 0 if hupper.is_active(): reloader = hupper.get_reloader() if app_spec.startswith('config:'): reloader.watch_files([app_spec[len('config:'):]]) log_fn = app_spec if log_fn.startswith('config:'): log_fn = app_spec[len('config:'):] elif log_fn.startswith('egg:'): log_fn = None if log_fn: log_fn = os.path.join(base, log_fn) setup_logging(log_fn, global_conf=vars) server = self.loadserver(server_spec, name=server_name, relative_to=base, global_conf=vars) app = self.loadapp(app_spec, name=app_name, relative_to=base, global_conf=vars) if self.options.verbose > 0: if hasattr(os, 'getpid'): msg = 'Starting server in PID %i.' % os.getpid() else: msg = 'Starting server.' self.out(msg) def serve(): try: server(app) except (SystemExit, KeyboardInterrupt) as e: if self.options.verbose > 1: raise if str(e): msg = ' ' + str(e) else: msg = '' self.out('Exiting%s (-v to see traceback)' % msg) serve()
def configure_logging(self, app_spec): setup_logging(app_spec)
def run(self, shell=None): if self.options.list: return self.show_shells() if not self.args: self.out('Requires a config file argument') return 2 config_uri = self.args[0] config_file = config_uri.split('#', 1)[0] setup_logging(config_file) self.pshell_file_config(config_file) # bootstrap the environ env = self.bootstrap[0](config_uri, options=parse_vars(self.args[1:])) # remove the closer from the env self.closer = env.pop('closer') # setup help text for default environment env_help = dict(env) env_help['app'] = 'The WSGI application.' env_help['root'] = 'Root of the default resource tree.' env_help['registry'] = 'Active Pyramid registry.' env_help['request'] = 'Active request object.' env_help['root_factory'] = ( 'Default root factory used to create `root`.') # override use_script with command-line options if self.options.setup: self.setup = self.options.setup if self.setup: # store the env before muddling it with the script orig_env = env.copy() # call the setup callable resolver = DottedNameResolver(None) setup = resolver.maybe_resolve(self.setup) setup(env) # remove any objects from default help that were overidden for k, v in env.items(): if k not in orig_env or env[k] != orig_env[k]: if getattr(v, '__doc__', False): env_help[k] = v.__doc__.replace("\n", " ") else: env_help[k] = v # load the pshell section of the ini file env.update(self.loaded_objects) # eliminate duplicates from env, allowing custom vars to override for k in self.loaded_objects: if k in env_help: del env_help[k] # generate help text help = '' if env_help: help += 'Environment:' for var in sorted(env_help.keys()): help += '\n %-12s %s' % (var, env_help[var]) if self.object_help: help += '\n\nCustom Variables:' for var in sorted(self.object_help.keys()): help += '\n %-12s %s' % (var, self.object_help[var]) if shell is None: try: shell = self.make_shell() except ValueError as e: self.out(str(e)) self.closer() return 1 if self.pystartup and os.path.isfile(self.pystartup): with open(self.pystartup, 'rb') as fp: exec_(fp.read().decode('utf-8'), env) if '__builtins__' in env: del env['__builtins__'] try: shell(env, help) finally: self.closer()
def run(self, shell=None): if self.args.list: return self.show_shells() if not self.args.config_uri: self.out('Requires a config file argument') return 2 config_uri = self.args.config_uri config_file = config_uri.split('#', 1)[0] setup_logging(config_file) self.pshell_file_config(config_file) # bootstrap the environ env = self.bootstrap[0](config_uri, options=parse_vars(self.args.config_vars)) # remove the closer from the env self.closer = env.pop('closer') # setup help text for default environment env_help = dict(env) env_help['app'] = 'The WSGI application.' env_help['root'] = 'Root of the default resource tree.' env_help['registry'] = 'Active Pyramid registry.' env_help['request'] = 'Active request object.' env_help['root_factory'] = ( 'Default root factory used to create `root`.') # override use_script with command-line options if self.args.setup: self.setup = self.args.setup if self.setup: # store the env before muddling it with the script orig_env = env.copy() # call the setup callable resolver = DottedNameResolver(None) setup = resolver.maybe_resolve(self.setup) setup(env) # remove any objects from default help that were overidden for k, v in env.items(): if k not in orig_env or env[k] != orig_env[k]: if getattr(v, '__doc__', False): env_help[k] = v.__doc__.replace("\n", " ") else: env_help[k] = v # load the pshell section of the ini file env.update(self.loaded_objects) # eliminate duplicates from env, allowing custom vars to override for k in self.loaded_objects: if k in env_help: del env_help[k] # generate help text help = '' if env_help: help += 'Environment:' for var in sorted(env_help.keys()): help += '\n %-12s %s' % (var, env_help[var]) if self.object_help: help += '\n\nCustom Variables:' for var in sorted(self.object_help.keys()): help += '\n %-12s %s' % (var, self.object_help[var]) if shell is None: try: shell = self.make_shell() except ValueError as e: self.out(str(e)) self.closer() return 1 if self.pystartup and os.path.isfile(self.pystartup): with open(self.pystartup, 'rb') as fp: exec_(fp.read().decode('utf-8'), env) if '__builtins__' in env: del env['__builtins__'] try: shell(env, help) finally: self.closer()
def run(self): # pragma: no cover if not self.args.config_uri: self.out('You must give a config file') return 2 app_spec = self.args.config_uri vars = self.get_config_vars() app_name = self.args.app_name base = os.getcwd() if not self._scheme_re.search(app_spec): config_path = os.path.join(base, app_spec) app_spec = 'config:' + app_spec else: config_path = None server_name = self.args.server_name if self.args.server: server_spec = 'egg:pyramid' assert server_name is None server_name = self.args.server else: server_spec = app_spec # do not open the browser on each reload so check hupper first if self.args.browser and not hupper.is_active(): def open_browser(): context = loadcontext( SERVER, app_spec, name=server_name, relative_to=base, global_conf=vars) url = 'http://127.0.0.1:{port}/'.format(**context.config()) time.sleep(1) webbrowser.open(url) t = threading.Thread(target=open_browser) t.setDaemon(True) t.start() if self.args.reload and not hupper.is_active(): if self.args.verbose > 1: self.out('Running reloading file monitor') hupper.start_reloader( 'pyramid.scripts.pserve.main', reload_interval=int(self.args.reload_interval), verbose=self.args.verbose, ) return 0 if config_path: setup_logging(config_path, global_conf=vars) self.pserve_file_config(config_path, global_conf=vars) self.watch_files.append(config_path) if hupper.is_active(): reloader = hupper.get_reloader() reloader.watch_files(self.watch_files) server = self.loadserver( server_spec, name=server_name, relative_to=base, global_conf=vars) app = self.loadapp( app_spec, name=app_name, relative_to=base, global_conf=vars) if self.args.verbose > 0: if hasattr(os, 'getpid'): msg = 'Starting server in PID %i.' % os.getpid() else: msg = 'Starting server.' self.out(msg) try: server(app) except (SystemExit, KeyboardInterrupt) as e: if self.args.verbose > 1: raise if str(e): msg = ' ' + str(e) else: msg = '' self.out('Exiting%s (-v to see traceback)' % msg)
def resetupLogging(config_uri, global_config): setup_logging(config_uri, global_config)
def run(self): # pragma: no cover if not self.args: self.out('You must give a config file') return 2 app_spec = self.args[0] if self.options.reload: if os.environ.get(self._reloader_environ_key): if self.options.verbose > 1: self.out('Running reloading file monitor') install_reloader(int(self.options.reload_interval), [app_spec]) # if self.requires_config_file: # watch_file(self.args[0]) else: return self.restart_with_reloader() app_name = self.options.app_name vars = self.get_options() if not self._scheme_re.search(app_spec): app_spec = 'config:' + app_spec server_name = self.options.server_name if self.options.server: server_spec = 'egg:pyramid' assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() log_fn = app_spec if log_fn.startswith('config:'): log_fn = app_spec[len('config:'):] elif log_fn.startswith('egg:'): log_fn = None if log_fn: log_fn = os.path.join(base, log_fn) setup_logging(log_fn, global_conf=vars) server = self.loadserver(server_spec, name=server_name, relative_to=base, global_conf=vars) app = self.loadapp(app_spec, name=app_name, relative_to=base, global_conf=vars) if self.options.verbose > 0: if hasattr(os, 'getpid'): msg = 'Starting server in PID %i.' % os.getpid() else: msg = 'Starting server.' self.out(msg) def serve(): try: server(app) except (SystemExit, KeyboardInterrupt) as e: if self.options.verbose > 1: raise if str(e): msg = ' ' + str(e) else: msg = '' self.out('Exiting%s (-v to see traceback)' % msg) if self.options.browser: def open_browser(): context = loadcontext(SERVER, app_spec, name=server_name, relative_to=base, global_conf=vars) url = 'http://127.0.0.1:{port}/'.format(**context.config()) time.sleep(1) webbrowser.open(url) t = threading.Thread(target=open_browser) t.setDaemon(True) t.start() serve()
def run(self): # pragma: no cover if not self.args.config_uri: self.out('You must give a config file') return 2 app_spec = self.args.config_uri vars = self.get_config_vars() app_name = self.args.app_name base = os.getcwd() if not self._scheme_re.search(app_spec): config_path = os.path.join(base, app_spec) app_spec = 'config:' + app_spec else: config_path = None server_name = self.args.server_name if self.args.server: server_spec = 'egg:pyramid' assert server_name is None server_name = self.args.server else: server_spec = app_spec # do not open the browser on each reload so check hupper first if self.args.browser and not hupper.is_active(): self.pserve_file_config(config_path, global_conf=vars) url = self.open_url # do not guess the url if the server is sourced from a different # location than the config_path if not url and server_spec == app_spec: url = self._guess_server_url(config_path, server_name, vars) if not url: self.out('WARNING: could not determine the server\'s url to ' 'open the browser. To fix this set the "open_url" ' 'setting in the [pserve] section of the ' 'configuration file.') else: def open_browser(): time.sleep(1) webbrowser.open(url) t = threading.Thread(target=open_browser) t.setDaemon(True) t.start() if self.args.reload and not hupper.is_active(): if self.args.verbose > 1: self.out('Running reloading file monitor') hupper.start_reloader('pyramid.scripts.pserve.main', reload_interval=int( self.args.reload_interval), verbose=self.args.verbose, worker_kwargs=self.worker_kwargs) return 0 if config_path: setup_logging(config_path, global_conf=vars) self.pserve_file_config(config_path, global_conf=vars) self.watch_files.add(config_path) if hupper.is_active(): reloader = hupper.get_reloader() reloader.watch_files(list(self.watch_files)) server = self.loadserver(server_spec, name=server_name, relative_to=base, global_conf=vars) app = self.loadapp(app_spec, name=app_name, relative_to=base, global_conf=vars) if self.args.verbose > 0: if hasattr(os, 'getpid'): msg = 'Starting server in PID %i.' % os.getpid() else: msg = 'Starting server.' self.out(msg) try: server(app) except (SystemExit, KeyboardInterrupt) as e: if self.args.verbose > 1: raise if str(e): msg = ' ' + str(e) else: msg = '' self.out('Exiting%s (-v to see traceback)' % msg)