Skip to content

Commit 5f841c9

Browse files
committed
Moved system property functions out. Use instance proporty for report filter.
1 parent 3b0652e commit 5f841c9

1 file changed

Lines changed: 64 additions & 77 deletions

File tree

src/browsergym/workarena/install.py

Lines changed: 64 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from requests import HTTPError
1111
from time import sleep
1212

13+
from .api.system_properties import get_sys_property, set_sys_property
1314
from .api.ui_themes import get_workarena_theme_variants
1415
from .api.user import create_user
1516
from .api.utils import table_api_call, table_column_info
@@ -38,9 +39,7 @@
3839
EXPECTED_USER_FORM_FIELDS_PATH,
3940
# Patch flag for reports
4041
REPORT_PATCH_FLAG,
41-
REPORT_DATE_FILTER,
42-
REPORT_TIME_FILTER,
43-
REPORT_FILTER_CONFIG_PATH,
42+
REPORT_FILTER_PROPERTY,
4443
# Supported ServiceNow releases
4544
SNOW_SUPPORTED_RELEASES,
4645
# For workflows setup
@@ -71,53 +70,6 @@ def _is_dev_portal_instance() -> bool:
7170
return False
7271

7372

74-
def _set_sys_property(property_name: str, value: str):
75-
"""
76-
Set a sys_property in the instance.
77-
78-
"""
79-
instance = SNowInstance()
80-
81-
property = table_api_call(
82-
instance=instance,
83-
table="sys_properties",
84-
params={"sysparm_query": f"name={property_name}", "sysparm_fields": "sys_id"},
85-
)["result"]
86-
87-
if not property:
88-
property_sysid = ""
89-
method = "POST"
90-
else:
91-
property_sysid = "/" + property[0]["sys_id"]
92-
method = "PUT"
93-
94-
property = table_api_call(
95-
instance=instance,
96-
table=f"sys_properties{property_sysid}",
97-
method=method,
98-
json={"name": property_name, "value": value},
99-
)
100-
101-
# Verify that the property was updated
102-
assert property["result"]["value"] == value, f"Error setting {property_name}."
103-
104-
105-
def _get_sys_property(property_name: str) -> str:
106-
"""
107-
Get a sys_property from the instance.
108-
109-
"""
110-
instance = SNowInstance()
111-
112-
property_value = table_api_call(
113-
instance=instance,
114-
table="sys_properties",
115-
params={"sysparm_query": f"name={property_name}", "sysparm_fields": "value"},
116-
)["result"][0]["value"]
117-
118-
return property_value
119-
120-
12173
def _install_update_set(path: str, name: str):
12274
"""
12375
Install a ServiceNow update set
@@ -817,7 +769,9 @@ def enable_url_login():
817769
Configure the instance to allow login via URL.
818770
819771
"""
820-
_set_sys_property(property_name="glide.security.restrict.get.login", value="false")
772+
set_sys_property(
773+
instance=SNowInstance(), property_name="glide.security.restrict.get.login", value="false"
774+
)
821775
logging.info("URL login enabled.")
822776

823777

@@ -828,12 +782,20 @@ def disable_password_policies():
828782
Notes: this is required to allow the creation of users with weak passwords.
829783
830784
"""
831-
_set_sys_property(property_name="glide.security.password.policy.enabled", value="false")
832-
_set_sys_property(property_name="glide.apply.password_policy.on_login", value="false")
785+
set_sys_property(
786+
instance=SNowInstance(),
787+
property_name="glide.security.password.policy.enabled",
788+
value="false",
789+
)
790+
set_sys_property(
791+
instance=SNowInstance(), property_name="glide.apply.password_policy.on_login", value="false"
792+
)
833793
# The following is not supported on developer portal instances
834794
if not _is_dev_portal_instance():
835-
_set_sys_property(
836-
property_name="glide.authenticate.api.user.reset_password.mandatory", value="false"
795+
set_sys_property(
796+
instance=SNowInstance(),
797+
property_name="glide.authenticate.api.user.reset_password.mandatory",
798+
value="false",
837799
)
838800
logging.info("Password policies disabled.")
839801

@@ -843,8 +805,14 @@ def disable_guided_tours():
843805
Hide guided tour popups
844806
845807
"""
846-
_set_sys_property(property_name="com.snc.guided_tours.sp.enable", value="false")
847-
_set_sys_property(property_name="com.snc.guided_tours.standard_ui.enable", value="false")
808+
set_sys_property(
809+
instance=SNowInstance(), property_name="com.snc.guided_tours.sp.enable", value="false"
810+
)
811+
set_sys_property(
812+
instance=SNowInstance(),
813+
property_name="com.snc.guided_tours.standard_ui.enable",
814+
value="false",
815+
)
848816
logging.info("Guided tours disabled.")
849817

850818

@@ -862,7 +830,9 @@ def disable_analytics_popups():
862830
Disable analytics popups (needs to be done through UI since Vancouver release)
863831
864832
"""
865-
_set_sys_property(property_name="glide.analytics.enabled", value="false")
833+
set_sys_property(
834+
instance=SNowInstance(), property_name="glide.analytics.enabled", value="false"
835+
)
866836
logging.info("Analytics popups disabled.")
867837

868838

@@ -876,7 +846,8 @@ def setup_ui_themes():
876846
check_ui_themes_installed()
877847

878848
logging.info("Setting default UI theme")
879-
_set_sys_property(
849+
set_sys_property(
850+
instance=SNowInstance(),
880851
property_name="glide.ui.polaris.theme.custom",
881852
value=get_workarena_theme_variants(SNowInstance())[0]["theme.sys_id"],
882853
)
@@ -920,7 +891,9 @@ def check_ui_themes_installed():
920891

921892
def set_home_page():
922893
logging.info("Setting default home page")
923-
_set_sys_property(property_name="glide.login.home", value="/now/nav/ui/home")
894+
set_sys_property(
895+
instance=SNowInstance(), property_name="glide.login.home", value="/now/nav/ui/home"
896+
)
924897

925898

926899
def wipe_system_admin_preferences():
@@ -964,24 +937,32 @@ def patch_report_filters():
964937
logging.info("Patching reports with date filter...")
965938

966939
instance = SNowInstance()
940+
filter_config = instance.report_filter_config
967941

968942
# If the report date filter is already set, we use the existing values (would be the case on reinstall)
969-
global REPORT_DATE_FILTER
970-
global REPORT_TIME_FILTER
971-
if REPORT_DATE_FILTER is None or REPORT_TIME_FILTER is None:
943+
if not filter_config:
972944
# Set the report date filter to current date as YYYY-MM-DD and time filter to current time as HH:MM:SS
973945
now = datetime.now()
974-
REPORT_DATE_FILTER = now.strftime("%Y-%m-%d")
975-
REPORT_TIME_FILTER = now.strftime("%H:%M:%S")
946+
report_date_filter = now.strftime("%Y-%m-%d")
947+
report_time_filter = now.strftime("%H:%M:%S")
976948
# ... save the filter config
977-
with open(REPORT_FILTER_CONFIG_PATH, "w") as f:
978-
json.dump(
979-
{
980-
"report_date_filter": REPORT_DATE_FILTER,
981-
"report_time_filter": REPORT_TIME_FILTER,
982-
},
983-
f,
984-
)
949+
logging.info(
950+
f"Setting report date filter to {report_date_filter} and time filter to {report_time_filter} via {REPORT_FILTER_PROPERTY}"
951+
)
952+
set_sys_property(
953+
instance=instance,
954+
property_name=REPORT_FILTER_PROPERTY,
955+
value=json.dumps(
956+
{"report_date_filter": report_date_filter, "report_time_filter": report_time_filter}
957+
),
958+
)
959+
else:
960+
# Use the existing configuration
961+
logging.info(
962+
f"Using existing report date filter {filter_config['report_date_filter']} and time filter {filter_config['report_time_filter']}"
963+
)
964+
report_date_filter = filter_config["report_date_filter"]
965+
report_time_filter = filter_config["report_time_filter"]
985966

986967
# Get all reports that are not already patched
987968
reports = table_api_call(
@@ -1005,8 +986,8 @@ def patch_report_filters():
1005986

1006987
if not is_report_filter_using_relative_time(report["filter"]):
1007988
# That's a report we want to keep (use date cutoff filter)
1008-
filter_date = REPORT_DATE_FILTER
1009-
filter_time = REPORT_TIME_FILTER
989+
filter_date = report_date_filter
990+
filter_time = report_time_filter
1010991
logging.info(
1011992
f"Keeping report {report['title']} {report['sys_id']} (columns: {sys_created_on_cols})..."
1012993
)
@@ -1103,7 +1084,11 @@ def setup():
11031084

11041085
# Save installation date
11051086
logging.info("Saving installation date")
1106-
_set_sys_property(property_name="workarena.installation.date", value=datetime.now().isoformat())
1087+
set_sys_property(
1088+
instance=SNowInstance(),
1089+
property_name="workarena.installation.date",
1090+
value=datetime.now().isoformat(),
1091+
)
11071092

11081093
logging.info("WorkArena setup complete.")
11091094

@@ -1116,7 +1101,9 @@ def main():
11161101
logging.basicConfig(level=logging.INFO)
11171102

11181103
try:
1119-
past_install_date = _get_sys_property("workarena.installation.date")
1104+
past_install_date = get_sys_property(
1105+
instance=SNowInstance(), property_name="workarena.installation.date"
1106+
)
11201107
logging.info(f"Detected previous installation on {past_install_date}. Reinstalling...")
11211108
except:
11221109
past_install_date = "never"

0 commit comments

Comments
 (0)