Esempio n. 1
0
def test_getTableauData(httpserver, mocker: MockerFixture):
    ts = TS()
    ts.session = requests.Session()
    httpserver.serve_content(tableauDataResponse)
    ts.host = httpserver.url + "/"
    ts.tableauData = {"vizql_root": "", "sessionid": "", "sheetId": ""}
    result = api.getTableauData(ts)
    assert result == tableauDataResponse
    def loads(self, url, params={}):
        api.setSession(self)
        r = api.getTableauViz(self, self.session, url, params)
        soup = BeautifulSoup(r, "html.parser")

        tableauPlaceHolder = soup.find("div", {"class": "tableauPlaceholder"})

        if tableauPlaceHolder is not None:
            params = dict([(t.get("name", ""), unquote(t.get("value", "")))
                           for t in tableauPlaceHolder.findAll("param")])
            if ("host_url" not in params) or ("site_root" not in params) or (
                    "name" not in params):
                self.logger.info("no params found in placeholder")
                return

            if "ticket" in params:
                # get xsrf cookie
                sessionUrl = f'{params["host_url"]}trusted/{params["ticket"]}{params["site_root"]}/views/{params["name"]}'
                api.getSessionUrl(self, self.session, sessionUrl)

            url = f'{params["host_url"][:-1]}{params["site_root"]}/views/{params["name"]}'
            r = api.getTableauVizForSession(self, self.session, url)
            soup = BeautifulSoup(r, "html.parser")

        self.tableauData = json.loads(
            soup.find("textarea", {
                "id": "tsConfigContainer"
            }).text)

        uri = urlparse(url)
        self.host = "{uri.scheme}://{uri.netloc}".format(uri=uri)

        r = api.getTableauData(self)

        try:
            dataReg = re.search(r"\d+;({.*})\d+;({.*})", r, re.MULTILINE)
            self.info = json.loads(dataReg.group(1))
            self.data = json.loads(dataReg.group(2))

            if "presModelMap" in self.data["secondaryInfo"]:
                presModelMap = self.data["secondaryInfo"]["presModelMap"]
                self.dataSegments = presModelMap["dataDictionary"][
                    "presModelHolder"]["genDataDictionaryPresModel"][
                        "dataSegments"]
            self.dashboard = self.info["sheetName"]
        except (AttributeError):
            raise TableauException(message=r)
Esempio n. 3
0
    def loads(self, url):
        api.setSession(self)
        r = api.getTableauViz(self.session, url)
        soup = BeautifulSoup(r, "html.parser")

        tableauPlaceHolder = soup.find("div", {"class": "tableauPlaceholder"})
        if tableauPlaceHolder is not None:
            params = dict([(t.get("name", ""), unquote(t.get("value", "")))
                           for t in tableauPlaceHolder.findAll("param")])
            if ("host_url" not in params) or ("site_root" not in params) or (
                    "name" not in params):
                self.logger.info("no params found in placeholder")
                return

            if "ticket" in params:
                # get xsrf cookie
                sessionUrl = f'{params["host_url"]}trusted/{params["ticket"]}{params["site_root"]}/views/{params["name"]}'
                api.getSessionUrl(self.session, sessionUrl)

            url = f'{params["host_url"][:-1]}{params["site_root"]}/views/{params["name"]}'
            r = api.getTableauVizForSession(self.session, url)
            soup = BeautifulSoup(r, "html.parser")

        self.tableauData = json.loads(
            soup.find("textarea", {
                "id": "tsConfigContainer"
            }).text)

        uri = urlparse(url)
        self.host = "{uri.scheme}://{uri.netloc}/".format(uri=uri)

        r = api.getTableauData(self)

        dataReg = re.search(r"\d+;({.*})\d+;({.*})", r, re.MULTILINE)
        self.info = json.loads(dataReg.group(1))
        self.data = json.loads(dataReg.group(2))
        self.dashboard = self.info["sheetName"]