diff --git a/src/browsergym/workarena/api/utils.py b/src/browsergym/workarena/api/utils.py index 47a6b2a..85aa40a 100644 --- a/src/browsergym/workarena/api/utils.py +++ b/src/browsergym/workarena/api/utils.py @@ -172,3 +172,16 @@ def db_delete_from_table(instance: SNowInstance, sys_id: str, table: str) -> Non # Check for HTTP code 200 (fail otherwise) response.raise_for_status() + + +def get_instance_sys_property(instance: SNowInstance, property_name: str) -> str: + """ + Get a sys_property from the instance. + """ + property_value = table_api_call( + instance=instance, + table="sys_properties", + params={"sysparm_query": f"name={property_name}", "sysparm_fields": "value"}, + )["result"][0]["value"] + + return property_value diff --git a/src/browsergym/workarena/install.py b/src/browsergym/workarena/install.py index 9d82493..fdb43b5 100644 --- a/src/browsergym/workarena/install.py +++ b/src/browsergym/workarena/install.py @@ -12,7 +12,7 @@ from .api.ui_themes import get_workarena_theme_variants from .api.user import create_user -from .api.utils import table_api_call, table_column_info +from .api.utils import table_api_call, table_column_info, get_instance_sys_property from .config import ( # for knowledge base setup KB_FILEPATH, @@ -82,22 +82,6 @@ def _set_sys_property(property_name: str, value: str): assert property["result"]["value"] == value, f"Error setting {property_name}." -def _get_sys_property(property_name: str) -> str: - """ - Get a sys_property from the instance. - - """ - instance = SNowInstance() - - property_value = table_api_call( - instance=instance, - table="sys_properties", - params={"sysparm_query": f"name={property_name}", "sysparm_fields": "value"}, - )["result"][0]["value"] - - return property_value - - def _install_update_set(path: str, name: str): """ Install a ServiceNow update set @@ -1054,7 +1038,10 @@ def main(): logging.basicConfig(level=logging.INFO) try: - past_install_date = _get_sys_property("workarena.installation.date") + instance = SNowInstance() + past_install_date = get_instance_sys_property( + instance=instance, property_name="workarena.installation.date" + ) logging.info(f"Detected previous installation on {past_install_date}. Reinstalling...") except: past_install_date = "never" diff --git a/src/browsergym/workarena/tasks/base.py b/src/browsergym/workarena/tasks/base.py index 34a8c1e..5b8d5ff 100644 --- a/src/browsergym/workarena/tasks/base.py +++ b/src/browsergym/workarena/tasks/base.py @@ -16,7 +16,7 @@ from browsergym.core.task import AbstractBrowserTask from ..api.user import create_user -from ..api.utils import table_api_call +from ..api.utils import table_api_call, get_instance_sys_property from ..config import SNOW_BROWSER_TIMEOUT, SNOW_JS_UTILS_FILEPATH from ..utils import url_login from ..instance import SNowInstance @@ -64,6 +64,15 @@ def __init__( self.timeout = 10000 # ms self.instance = instance if instance is not None else SNowInstance() + + # Check if workarena-install is done correctly + try: + _ = get_instance_sys_property(self.instance, "workarena.installation.date") + except Exception: + raise RuntimeError( + f"WorkArena installation has not been detected in your instance. Please install WorkArena by running workarena-install" + ) + self.start_url = self.instance.snow_url + start_rel_url if final_rel_url is not None: