Feature/routine tags (#5154)

* no guest if installer

* prevent guest if logout from account

* this not true

* rename reloop var

* ask for email again if no email

* add tags to routines upload

* Update constants.py

* Update terminal_controller.py

* Update terminal_controller.py

* black

* ruff

* black

* Update constants.py

* point at .co

* mypy

* sneak in askobb timeout

* fix test

---------

Co-authored-by: James Maslek <jmaslek11@gmail.com>
This commit is contained in:
montezdesousa
2023-06-21 13:31:00 +01:00
committed by GitHub
parent 2fffa59b8b
commit 105557e898
6 changed files with 88 additions and 34 deletions

View File

@@ -9,6 +9,7 @@ from openbb_terminal.account.account_view import (
)
from openbb_terminal.account.show_prompt import set_show_prompt
from openbb_terminal.core.session import hub_model as Hub
from openbb_terminal.core.session.constants import SCRIPT_TAGS
from openbb_terminal.core.session.current_user import (
get_current_user,
is_local,
@@ -63,6 +64,7 @@ class AccountController(BaseController):
if session and get_current_user().preferences.USE_PROMPT_TOOLKIT:
self.choices: dict = self.choices_default
self.choices["upload"]["--tags"] = {c: None for c in SCRIPT_TAGS}
self.completer = NestedCompleter.from_nested_dict(self.choices)
def update_runtime_choices(self):
@@ -303,6 +305,15 @@ class AccountController(BaseController):
help="The name of the routine.",
nargs="+",
)
parser.add_argument(
"-t",
"--tags",
type=str,
dest="tags",
help="The tags of the routine",
default="",
nargs="+",
)
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if is_local() and "-h" not in other_args and "--help" not in other_args:
print_guest_block_msg()
@@ -320,14 +331,19 @@ class AccountController(BaseController):
]
)
tags = " ".join(ns_parser.tags) if ns_parser.tags else ""
current_user = get_current_user()
response = Hub.upload_routine(
auth_header=current_user.profile.get_auth_header(),
name=name,
description=description,
routine=routine,
)
kwargs = {
"auth_header": current_user.profile.get_auth_header(),
"name": name,
"description": description,
"routine": routine,
"tags": tags,
}
response = Hub.upload_routine(**kwargs) # type: ignore
if response is not None and response.status_code == 409:
i = console.input(
"A routine with the same name already exists, "
@@ -335,13 +351,8 @@ class AccountController(BaseController):
)
console.print("")
if i.lower() in ["y", "yes"]:
response = Hub.upload_routine(
auth_header=current_user.profile.get_auth_header(),
name=name,
description=description,
routine=routine,
override=True,
)
kwargs["override"] = True # type: ignore
response = Hub.upload_routine(**kwargs) # type: ignore
else:
console.print("[info]Aborted.[/info]")

View File

@@ -14,3 +14,12 @@ DEFAULT_ROUTINES_URL = "https://openbb-cms.directus.app/items/Routines"
TIMEOUT = 30
CONNECTION_ERROR_MSG = "[red]Connection error.[/red]"
CONNECTION_TIMEOUT_MSG = "[red]Connection timeout.[/red]"
SCRIPT_TAGS = [
"stocks",
"due diligence",
"price targets",
"crypto",
"earnings",
"economy",
]

View File

@@ -402,6 +402,7 @@ def upload_routine(
description: str = "",
routine: str = "",
override: bool = False,
tags: str = "",
base_url: str = BASE_URL,
timeout: int = TIMEOUT,
) -> Optional[requests.Response]:
@@ -417,6 +418,8 @@ def upload_routine(
The routine.
override : bool
Whether to override the routine if it already exists.
tags : str
The tags of the routine.
base_url : str
The base url, by default BASE_URL
timeout : int
@@ -427,11 +430,13 @@ def upload_routine(
Optional[requests.Response]
The response from the post request.
"""
data = {
"name": name,
"description": description,
"script": routine,
"override": override,
"tags": tags,
"version": get_current_system().VERSION,
"public": False,
}

View File

@@ -2265,7 +2265,7 @@ def query_LLM_remote(query_text: str):
data = {"prompt": query_text, "accessToken": get_current_user().profile.token}
ask_obbrequest_data = request(url, method="POST", json=data).json()
ask_obbrequest_data = request(url, method="POST", json=data, timeout=10).json()
if "error" in ask_obbrequest_data:
console.print(f"[red]{ask_obbrequest_data['error']}[/red]")

View File

@@ -81,6 +81,8 @@ SUPPORT_TYPE = ["bug", "suggestion", "question", "generic"]
RECORD_SESSION = False
SESSION_RECORDED = list()
SESSION_RECORDED_NAME = ""
SESSION_RECORDED_DESCRIPTION = ""
SESSION_RECORDED_TAGS = ""
class BaseController(metaclass=ABCMeta):
@@ -762,25 +764,50 @@ class BaseController(metaclass=ABCMeta):
description="Start recording session into .openbb routine file",
)
parser.add_argument(
"-r",
"--routine",
"-n",
"--name",
action="store",
dest="routine_name",
dest="name",
type=str,
default=datetime.now().strftime("%Y%m%d_%H%M%S_routine.openbb"),
help="Routine file name to be saved.",
)
parser.add_argument(
"-d",
"--description",
type=str,
dest="description",
help="The description of the routine",
default="",
nargs="+",
)
parser.add_argument(
"-t",
"--tags",
type=str,
dest="tags",
help="The tags of the routine",
default="",
nargs="+",
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "-r")
other_args.insert(0, "-n")
ns_parser = self.parse_simple_args(parser, other_args)
if ns_parser:
global SESSION_RECORDED_NAME
global RECORD_SESSION
if ".openbb" in ns_parser.routine_name:
SESSION_RECORDED_NAME = ns_parser.routine_name
else:
SESSION_RECORDED_NAME = ns_parser.routine_name + ".openbb"
global SESSION_RECORDED_NAME
global SESSION_RECORDED_DESCRIPTION
global SESSION_RECORDED_TAGS
SESSION_RECORDED_NAME = (
ns_parser.name
if ".openbb" in ns_parser.name
else ns_parser.name + ".openbb"
)
SESSION_RECORDED_DESCRIPTION = " ".join(ns_parser.description)
SESSION_RECORDED_TAGS = " ".join(ns_parser.tags) if ns_parser.tags else ""
console.print(
"[green]The session is successfully being recorded."
@@ -827,11 +854,14 @@ class BaseController(metaclass=ABCMeta):
routine = read_routine(file_name=routine_file)
if routine is not None:
name = SESSION_RECORDED_NAME.split(sep=".openbb", maxsplit=-1)[0]
response = Hub.upload_routine(
auth_header=current_user.profile.get_auth_header(),
name=name,
routine=routine,
)
kwargs = {
"auth_header": current_user.profile.get_auth_header(),
"name": name,
"description": SESSION_RECORDED_DESCRIPTION,
"routine": routine,
"tags": SESSION_RECORDED_TAGS,
}
response = Hub.upload_routine(**kwargs) # type: ignore
if response is not None and response.status_code == 409:
i = console.input(
"A routine with the same name already exists, "
@@ -839,12 +869,8 @@ class BaseController(metaclass=ABCMeta):
)
console.print("")
if i.lower() in ["y", "yes"]:
response = Hub.upload_routine(
auth_header=current_user.profile.get_auth_header(),
name=name,
routine=routine,
override=True,
)
kwargs["override"] = True # type: ignore
response = Hub.upload_routine(**kwargs) # type: ignore
else:
console.print("[info]Aborted.[/info]")

View File

@@ -430,6 +430,8 @@ def test_call_upload(mocker, test_user):
"abc",
"--name",
"script1",
"--tags",
"stocks",
]
)
@@ -439,6 +441,7 @@ def test_call_upload(mocker, test_user):
name="script1",
description="abc",
routine="do something",
tags="stocks",
)