def fromrequest(cls, request, max_timeout): """ Initialize options from a Twisted Request. """ # 1. GET / POST data data = { key.decode('utf-8'): values[0].decode('utf-8') for key, values in request.args.items() } if request.method == b'POST': content_type = request.getHeader(b'content-type') if content_type: request.content.seek(0) # 2. application/json POST data if b'application/json' in content_type: try: content = request.content.read().decode('utf-8') data.update(json.loads(content, encoding='utf8')) except ValueError as e: raise BadOption({ 'type': 'invalid_json', 'description': "Can't decode JSON", 'message': str(e), }) # 3. js_source from application/javascript POST requests if b'application/javascript' in content_type: data['js_source'] = request.content.read().decode('utf-8') request.content.seek(0) data['uid'] = id(request) return cls(data, max_timeout)
def raise_error(cls, argument, description, type='bad_argument', **kwargs): params = { 'type': type, 'argument': argument, 'description': description } params.update(kwargs) raise BadOption(params)
def _get_render(self, request, options): engine = options.get_engine(self.browser_engines_enabled) if engine != 'webkit': raise BadOption("engine=chromium is not supported yet") params = options.get_common_params(self.js_profiles_path) params['request_body'] = options.get_request_body() params['response_body'] = options.get_response_body() return self.pool.render(HarRender, options, **params)
def _get_render(self, request, options): engine = options.get_engine(self.browser_engines_enabled) if engine != 'webkit': raise BadOption("engine=chromium is not supported yet") params = dict( proxy=options.get_proxy(), lua_source=options.get_lua_source(), sandboxed=self.sandboxed, lua_package_path=self.lua_package_path, lua_sandbox_allowed_modules=self.lua_sandbox_allowed_modules, strict=self.strict, implicit_main=self.implicit_main, ) return self.pool.render(LuaRender, options, **params)
def start(self, url, baseurl=None, wait=None, viewport=None, js_source=None, js_profile=None, images=None, console=False, headers=None, http_method='GET', body=None, render_all=False, resource_timeout=None, request_body=False, response_body=False, html5_media=False, http2=True): self.url = url self.wait_time = defaults.WAIT_TIME if wait is None else wait # self.js_source = js_source # self.js_profile = js_profile # self.console = console self.viewport = defaults.VIEWPORT_SIZE if viewport is None else viewport self.render_all = render_all or viewport == 'full' # FIXME: BadOption errors are logged as unhandled errors if baseurl is not None: raise BadOption("baseurl is not implemented") if js_source is not None: raise BadOption("js_source is not implemented") if js_profile is not None: raise BadOption("js_profile is not implemented") if images is False: raise BadOption("images is not implemented") if console is True: raise BadOption("console is not implemented") if headers is not None: raise BadOption("headers is not implemented") if http_method != 'GET': raise BadOption("http_method is not implemented") if body is not None: raise BadOption("body is not implemented") if resource_timeout is not None and resource_timeout > 0: raise BadOption("resource_timeout is not implemented") if request_body is True: raise BadOption("request_body is not implemented") if response_body is True: raise BadOption("response_body is not implemented") if html5_media is True: raise BadOption("html5_media is not implemented") if render_all is True: raise BadOption("render_all is not implemented") # if resource_timeout: # self.tab.set_resource_timeout(resource_timeout) # if images is not None: # self.tab.set_images_enabled(images) if self.viewport != 'full': self.tab.set_viewport(self.viewport) # self.tab.set_request_body_enabled(request_body) # self.tab.set_response_body_enabled(response_body) # self.tab.set_html5_media_enabled(html5_media) if not http2: raise BadOption("Disabling of http2 is not implemented " "for Chromium") self.tab.go( url=url, callback=self.on_goto_load_finished, errback=self.on_goto_load_error, # baseurl=baseurl, # http_method=http_method, # body=body, # headers=headers, )