def open(self, *args, **kwargs): if self.context_preserved: _request_ctx_stack.pop() self.context_preserved = False kwargs.setdefault('environ_overrides', {}) \ ['flask._preserve_context'] = self.preserve_context as_tuple = kwargs.pop('as_tuple', False) buffered = kwargs.pop('buffered', False) follow_redirects = kwargs.pop('follow_redirects', False) builder = EnvironBuilder(*args, **kwargs) if self.application.config.get('SERVER_NAME'): server_name = self.application.config.get('SERVER_NAME') if ':' not in server_name: http_host, http_port = server_name, None else: http_host, http_port = server_name.split(':', 1) if builder.base_url == 'http://localhost/': # Default Generated Base URL if http_port != None: builder.host = http_host + ':' + http_port else: builder.host = http_host old = _request_ctx_stack.top try: return Client.open(self, builder, as_tuple=as_tuple, buffered=buffered, follow_redirects=follow_redirects) finally: self.context_preserved = _request_ctx_stack.top is not old
def run(self, args): from IPython.Shell import IPShellEmbed from werkzeug import Client, EnvironBuilder from dextrose.context import Context from dextrose.http import Response app = load_application(args.package, args.environment) environ_builder = EnvironBuilder() environ = environ_builder.get_environ() request = environ_builder.get_request() client = Client(app, Response) with Context(app, environ, request, {}) as context: banner = "Dextrose IPython shell\n%s" % args.package shell = IPShellEmbed( banner=banner, argv=[ '-prompt_in1', '%s> ' % args.package, '-prompt_in2', '%s... ' % (' ' * (len(args.package) - 3)), '-prompt_out', '=> ' ]) shell(global_ns={}, local_ns={ 'app': app, 'environ': environ, 'client': client, 'context': context })
def __init__(self, application, response_wrapper=None, use_cookies=True): super(Client, self).__init__(application, response_wrapper=response_wrapper, use_cookies=True) builder = EnvironBuilder() try: env = builder.get_environ() finally: builder.close() self.application.app._prepare(env) for key, submount_app in self.application.mounts.iteritems(): if not hasattr(submount_app, 'app_settings') or key == "/_kay": continue submount_app._prepare(env)