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)
Exemple #3
0
    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)
Exemple #4
0
    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,
        )