После преобразования команды CURL в REST API у меня есть код ниже:
Код: Выделить всё
import requests
import time
HUE_BASE_URL = "http://xyzserver.com:8888/notebook/api"
LOGIN_URL = f"http://xyzserver.com:8888/hue/accounts/login/?fromModal=true"
HIVE_DATABASE = "default"
session = requests.Session()
def get_csrf_and_cookies():
# Step 1: Perform a GET request to get the initial csrf token and session cookies
response = session.get(LOGIN_URL)
csrf_token = session.cookies.get('csrftoken')
session_id = session.cookies.get('sessionid')
if csrf_token and session_id:
print(f"CSRF Token: {csrf_token}")
print(f"Session ID: {session_id}")
return csrf_token, session_id
else:
raise Exception("Failed to retrieve CSRF token or session ID.")
def login(csrf_token, session_id, username='demo', password='demo123'):
# Step 2: Perform login POST request with the csrf token and session ID
login_data = {
'username': username,
'password': password
}
headers = {
'X-CSRFToken': csrf_token
}
cookies = {
'csrftoken': csrf_token,
'sessionid': session_id
}
response = session.post(LOGIN_URL, data=login_data, headers=headers, cookies=cookies)
if response.status_code == 200:
print("Login successful.")
return session.cookies.get('csrftoken'), session.cookies.get('sessionid') # Get fresh csrf and session cookies
else:
raise Exception(f"Login failed with status code {response.status_code}.")
def create_notebook(csrf_token, session_id):
url = f"{HUE_BASE_URL}/create_notebook"
data = {
"type": "impala",
"directory_uuid": ""
}
headers = {
'X-CSRFToken': csrf_token
}
cookies = {
'csrftoken': csrf_token,
'sessionid': session_id
}
response = session.post(url, json=data, headers=headers, cookies=cookies)
print('in create notebook')
if response.status_code == 200:
try:
notebook_info = response.json()
notebook_id = notebook_info.get('notebook_id')
print(f"Notebook created, notebook_id: {notebook_id}")
return notebook_id
except requests.exceptions.JSONDecodeError:
print("Failed to parse JSON. Raw response:")
print(response.text)
return None
else:
print(f"Error creating notebook. Status code: {response.status_code}")
return None
def execute_hive_query(query, notebook_id, csrf_token, session_id):
url = f"{HUE_BASE_URL}/execute/impala"
data = {
"executable": f'{{"statement":"{query}","database":"{HIVE_DATABASE}"}}',
"notebook": f'{{"id":"{notebook_id}", "type":"query-impala", "initialType":"impala", "database":"default","isHistory":true,"snippets":[{{"id":null,"statement_raw":"{query}","type":"impala","variables":[]}}],"name":"","isSaved":false,"sessions":[]}}',
"snippet": f'{{"id":1,"type":"impala","result":"","statement":"{query}","properties":{{}}}}'
}
headers = {
'X-CSRFToken': csrf_token
}
cookies = {
'csrftoken': csrf_token,
'sessionid': session_id
}
response = session.post(url, data=data, headers=headers, cookies=cookies)
print('Response in execute query')
print(response)
if response.status_code == 200:
result = response.json()
print(result)
history_id = result.get('history_id')
print(f"Query executed, history_id: {history_id}")
return history_id
else:
print(f"Error executing query: {response.status_code}")
return None
def run_hive_query(query):
# Step 1: Get CSRF token and cookies
csrf_token, session_id = get_csrf_and_cookies()
# Step 2: Login and get fresh tokens and cookies
csrf_token, session_id = login(csrf_token, session_id)
# Step 3: Create a notebook and get its ID
notebook_id = create_notebook(csrf_token, session_id)
if not notebook_id:
return
if __name__ == "__main__":
query = "SHOW TABLES"
run_hive_query(query)
Код: Выделить всё
response = session.post(url, json=data, headers=headers, cookies=cookies)
print('in create notebook')
if response.status_code == 200:
try:
notebook_info = response.json() #This line throws error because i am getting html, DON'T KNOW WHY!!!!!!
Код: Выделить всё
Hue
- Welcome to Hue
...
...
...
// We collect only 2 path levels: not hostname, no IDs, no anchors...
var _pathName = location.pathname;
var _splits = _pathName.substr(1).split("/");
_pathName = _splits[0] + (_splits.length > 1 && $.trim(_splits[1]) != "" ? "/" + _splits[1] : "");
ga('send', 'pageview', {
'page': '/remote/3.9.0-cdh5.16.2/' + (IS_HUE_4 ? '4/' : '3/') + _pathName
});
function trackOnGA(path) {
if (typeof ga != "undefined" && ga != null) {
ga('set', 'referrer', 'http://gethue.com'); // we force the referrer to prevent leaking sensitive information
ga('send', 'pageview', {
'page': '/remote/3.9.0-cdh5.16.2/' + (IS_HUE_4 ? '4/' : '3/') + path
});
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... pala-query