|
|
"""Routines handler module.""" |
|
|
|
|
|
from typing import Optional |
|
|
|
|
|
import requests |
|
|
from openbb_cli.config.constants import ( |
|
|
CONNECTION_ERROR_MSG, |
|
|
CONNECTION_TIMEOUT_MSG, |
|
|
TIMEOUT, |
|
|
) |
|
|
from openbb_cli.session import Session |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
session = Session() |
|
|
|
|
|
|
|
|
|
|
|
def upload_routine( |
|
|
auth_header: str, |
|
|
name: str = "", |
|
|
description: str = "", |
|
|
routine: str = "", |
|
|
override: bool = False, |
|
|
tags: str = "", |
|
|
public: bool = False, |
|
|
timeout: int = TIMEOUT, |
|
|
) -> Optional[requests.Response]: |
|
|
"""Send a routine to the server. |
|
|
|
|
|
Parameters |
|
|
---------- |
|
|
auth_header : str |
|
|
The authorization header, e.g. "Bearer <token>". |
|
|
name : str |
|
|
The name of the routine. |
|
|
routine : str |
|
|
The routine. |
|
|
override : bool |
|
|
Whether to override the routine if it already exists. |
|
|
tags : str |
|
|
The tags of the routine. |
|
|
public : bool |
|
|
Whether to make the routine public or not. |
|
|
timeout : int |
|
|
The timeout, by default TIMEOUT |
|
|
|
|
|
Returns |
|
|
------- |
|
|
Optional[requests.Response] |
|
|
The response from the post request. |
|
|
""" |
|
|
data = { |
|
|
"name": name, |
|
|
"description": description, |
|
|
"script": routine, |
|
|
"override": override, |
|
|
"tags": tags, |
|
|
"version": session.settings.VERSION, |
|
|
"public": public, |
|
|
} |
|
|
_console = session.console |
|
|
try: |
|
|
response = requests.post( |
|
|
headers={"Authorization": auth_header}, |
|
|
url=session.settings.BASE_URL + "/terminal/script", |
|
|
json=data, |
|
|
timeout=timeout, |
|
|
) |
|
|
if response.status_code == 200: |
|
|
username = getattr(session.user.profile.hub_session, "username", None) |
|
|
if not username: |
|
|
_console.print("[red]No username found.[/red]") |
|
|
_console.print("[red]Failed to upload your routine.[/red]") |
|
|
return None |
|
|
_console.print("[green]Successfully uploaded your routine.[/]") |
|
|
|
|
|
hub_url = session.settings.HUB_URL |
|
|
|
|
|
if public: |
|
|
_console.print( |
|
|
f"\n[yellow]Share or edit it at {hub_url}/u/{username}/routine/{name.replace(' ', '-')}[/]" |
|
|
) |
|
|
else: |
|
|
_console.print(f"\n[yellow]Go to {hub_url} to edit this script,[/]") |
|
|
_console.print( |
|
|
f"[yellow]or even make it public so you can access it at " |
|
|
f"{hub_url}/u/{username}/routine/{name.replace(' ', '-')}[/]" |
|
|
) |
|
|
elif response.status_code != 409: |
|
|
_console.print( |
|
|
"[red]" + response.json().get("detail", "Unknown error.") + "[/red]" |
|
|
) |
|
|
return response |
|
|
except requests.exceptions.ConnectionError: |
|
|
_console.print(f"\n{CONNECTION_ERROR_MSG}") |
|
|
return None |
|
|
except requests.exceptions.Timeout: |
|
|
_console.print(f"\n{CONNECTION_TIMEOUT_MSG}") |
|
|
return None |
|
|
except Exception: |
|
|
_console.print("[red]Failed to upload your routine.[/red]") |
|
|
return None |
|
|
|