exceptions: Add new error class to be used for invalid parameter values.

This would help us in avoiding adding translation everytime we use
this error for a new pair of parameters.
This commit is contained in:
Sahil Batra
2024-07-19 00:59:40 +05:30
committed by Tim Abbott
parent 92e0ad5c9e
commit c6e9173297
4 changed files with 29 additions and 15 deletions

View File

@@ -702,3 +702,16 @@ class SystemGroupRequiredError(JsonableError):
@override
def msg_format() -> str:
return _("'{setting_name}' must be a system user group.")
class IncompatibleParameterValuesError(JsonableError):
data_fields = ["first_parameter", "second_parameter"]
def __init__(self, first_parameter: str, second_parameter: str) -> None:
self.first_parameter = first_parameter
self.second_parameter = second_parameter
@staticmethod
@override
def msg_format() -> str:
return _("Incompatible values for '{first_parameter}' and '{second_parameter}'.")

View File

@@ -2010,7 +2010,7 @@ class RealmAPITest(ZulipTestCase):
result = self.client_patch("/json/realm/user_settings_defaults", data)
self.assert_json_error(
result,
"Incompatible values for 'dense_mode' and 'web_font_size_px' settings.",
"Incompatible values for 'dense_mode' and 'web_font_size_px'.",
)
data = {"web_font_size_px": 16, "dense_mode": orjson.dumps(False).decode()}
@@ -2048,7 +2048,7 @@ class RealmAPITest(ZulipTestCase):
result = self.client_patch("/json/realm/user_settings_defaults", data)
self.assert_json_error(
result,
"Incompatible values for 'dense_mode' and 'web_line_height_percent' settings.",
"Incompatible values for 'dense_mode' and 'web_line_height_percent'.",
)
data = {"web_line_height_percent": 140, "dense_mode": orjson.dumps(False).decode()}
@@ -2079,14 +2079,14 @@ class RealmAPITest(ZulipTestCase):
result = self.client_patch("/json/realm/user_settings_defaults", data)
self.assert_json_error(
result,
"Incompatible values for 'dense_mode' and 'web_font_size_px' settings.",
"Incompatible values for 'dense_mode' and 'web_font_size_px'.",
)
data = {"dense_mode": orjson.dumps(True).decode(), "web_line_height_percent": 140}
result = self.client_patch("/json/realm/user_settings_defaults", data)
self.assert_json_error(
result,
"Incompatible values for 'dense_mode' and 'web_line_height_percent' settings.",
"Incompatible values for 'dense_mode' and 'web_line_height_percent'.",
)
data = {

View File

@@ -518,7 +518,7 @@ class ChangeSettingsTest(ZulipTestCase):
result = self.client_patch("/json/settings", data)
self.assert_json_error(
result,
"Incompatible values for 'dense_mode' and 'web_font_size_px' settings.",
"Incompatible values for 'dense_mode' and 'web_font_size_px'.",
)
data = {"web_font_size_px": 16, "dense_mode": orjson.dumps(False).decode()}
@@ -556,7 +556,7 @@ class ChangeSettingsTest(ZulipTestCase):
result = self.client_patch("/json/settings", data)
self.assert_json_error(
result,
"Incompatible values for 'dense_mode' and 'web_line_height_percent' settings.",
"Incompatible values for 'dense_mode' and 'web_line_height_percent'.",
)
data = {"web_line_height_percent": 140, "dense_mode": orjson.dumps(False).decode()}
@@ -587,14 +587,14 @@ class ChangeSettingsTest(ZulipTestCase):
result = self.client_patch("/json/settings", data)
self.assert_json_error(
result,
"Incompatible values for 'dense_mode' and 'web_font_size_px' settings.",
"Incompatible values for 'dense_mode' and 'web_font_size_px'.",
)
data = {"dense_mode": orjson.dumps(True).decode(), "web_line_height_percent": 140}
result = self.client_patch("/json/settings", data)
self.assert_json_error(
result,
"Incompatible values for 'dense_mode' and 'web_line_height_percent' settings.",
"Incompatible values for 'dense_mode' and 'web_line_height_percent'.",
)
data = {

View File

@@ -37,7 +37,12 @@ from zerver.lib.email_validation import (
validate_email_is_valid,
validate_email_not_already_in_realm,
)
from zerver.lib.exceptions import JsonableError, RateLimitedError, UserDeactivatedError
from zerver.lib.exceptions import (
IncompatibleParameterValuesError,
JsonableError,
RateLimitedError,
UserDeactivatedError,
)
from zerver.lib.i18n import get_available_language_codes
from zerver.lib.rate_limiter import RateLimitedUser
from zerver.lib.request import REQ, has_request_variables
@@ -210,14 +215,10 @@ def check_information_density_setting_values(
if dense_mode:
if web_font_size_px != UserBaseSettings.WEB_FONT_SIZE_PX_COMPACT:
raise JsonableError(
_("Incompatible values for 'dense_mode' and 'web_font_size_px' settings.")
)
raise IncompatibleParameterValuesError("dense_mode", "web_font_size_px")
if web_line_height_percent != UserBaseSettings.WEB_LINE_HEIGHT_PERCENT_COMPACT:
raise JsonableError(
_("Incompatible values for 'dense_mode' and 'web_line_height_percent' settings.")
)
raise IncompatibleParameterValuesError("dense_mode", "web_line_height_percent")
@human_users_only