Source code for sisense.data.datasource
from sisense.resource import Resource
import json
[docs]class Datasource(Resource):
[docs] def to_csv(self, datasource, metadata: list) -> str:
"""
Execute JAQL and return the result as CSV.
:param datasource: (str or dict) Elasticube name or datasource representation as JSON.
:param metadata: (list) A list of JAQL representations as dict. See https://sisense.dev/reference/jaql/ for details.
:return: (pandas.DataFrame) Data as CSV represent by a pandas.DataFrame.
"""
data = [('data', json.dumps({'datasource': datasource, 'metadata': metadata}))]
headers = {'Accept': '*/*'}
response = self._api.post('datasources/x/jaql/csv', data=data, headers=headers)
data = response['message']
return data
[docs] def jaql(self, datasource: [dict, str], metadata: list) -> dict:
"""
Execute JAQL on datasource.
:param datasource: (str or dict) Elasticube name or datasource representation as JSON.
:param metadata: (list) A list of JAQL representations as dict. See https://sisense.dev/reference/jaql/ for details.
:return: returns a dictionary with the structure of a widget expected in headers, metadata, datasource, values.
"""
data = {'datasource': datasource, 'metadata': metadata}
headers = {'Accept': '*/*'}
response = self._api.post('datasources/x/jaql', data=data, headers=headers)
return response
[docs] def from_sql(self, datasource, query: str) -> dict:
"""
Execute a SQL statement in the specified datasource.
:param datasource: (str or dict) Elasticube name or datasource representation as JSON.
:param query: (str) A SQL statement.
:return: (dict) {"headers": list, "values": list of lists}
"""
datasource_title = datasource['title'] if type(datasource) is dict else datasource
response = self._api.get(f'datasources/{datasource_title}/sql', query={'query': query})
return response