Custom validators
A list of validators that can be overridden in Salesman.
Address validator
During the checkout process, both the shipping and billing addresses can be specified.
The default address validator is set to salesman.checkout.utils.validate_address()
that simply makes both address fields required to be entered by the customer.
This behavior can be overridden by providing a dotted path in SALESMAN_ADDRESS_VALIDATOR
setting that points to your custom validator function.
Tip
To validate a specific address format split the text by \n
character and validate each line.
def validate_address(value: str, context: dict[str, Any] = {}) -> str:
"""
Default address validator function. Can be overriden by providing a
dotted path to a function in ``SALESMAN_ADDRESS_VALIDATOR`` setting.
Args:
value (str): Address text to be validated
context (dict, optional): Validator context data.
Raises:
ValidationError: In case address is not valid
Returns:
str: Validated value
"""
if not value:
raise ValidationError(_("Address is required."))
return value
Your custom validator should accept a text value
and return the validated version.
It also receives a context
dictionary with additional context data like request
,
a basket
object and address
type (set to either shipping or billing).
Basket item validator
Custom basket item validation is possible through a custom validator function. By default no
extra validation is enforced through a placeholder salesman.basket.utils.validate_basket_item()
function.
You can add custom validation by providing a dotted path in SALESMAN_BASKET_ITEM_VALIDATOR
setting that points to your custom validator function.
Tip
You can use this validator to check if an item can be added to the basket.
If basket item instance in context['basket_item']
is None
, a new item beeing added.
def validate_basket_item(
attrs: dict[str, Any],
context: dict[str, Any] = {},
) -> dict[str, Any]:
"""
Default basket item validator function. Can be overrider by providing
a path to a function in ``SALESMAN_BASKET_ITEM_VALIDATOR`` setting.
Args:
attrs (dict): Attributes to be validated.
context (dict, optional): Validator context data. Defaults to {}.
Raises:
ValidationError: In case data is not valid
Returns:
dict: Validated attrs
"""
return attrs
Your custom validator should accept a dictionary attrs
value and return the validated version.
It also receives a context
dictionary with additional context data like request
,
a basket
object and basket_item
instance in case an existing item is validated.
Extra validator
Both the basket and basket item objects have an extra
JSON field to store additional
information that can be changed or updated via the API. By default no validation is enforced
through a placeholder salesman.basket.utils.validate_extra()
function.
You can add custom validation by providing a dotted path in SALESMAN_EXTRA_VALIDATOR
setting that points to your custom validator function.
def validate_extra(
value: dict[str, Any],
context: dict[str, Any] = {},
) -> dict[str, Any]:
"""
Default extra validator function. Can be overriden by providing a
dotted path to a function in ``SALESMAN_EXTRA_VALIDATOR`` setting.
Args:
value (str): Extra dict to be validated
context (dict, optional): Validator context data. Defaults to {}.
Raises:
ValidationError: In case data is not valid
Returns:
dict: Validated value
"""
return value
Your custom validator should accept a dictionary value
and return the validated version.
It also receives a context
dictionary with additional context data like request
,
a basket
object and basket_item
in case validation is happening on the basket item.