You've already forked Promocode-API
mirror of
https://github.com/devitq/Promocode-API.git
synced 2026-05-22 22:07:12 +00:00
b7d7334fe5
also bug fixes and improvements
83 lines
2.5 KiB
Python
83 lines
2.5 KiB
Python
from django.core.exceptions import ValidationError
|
|
from django.core.validators import BaseValidator
|
|
from django.utils.deconstruct import deconstructible
|
|
|
|
MAX_CATEGORIES_LIST_LEN = 20
|
|
MIN_CATEGORY_LEN = 2
|
|
MAX_CATEGORY_LEN = 20
|
|
|
|
MIN_UNIQUE_PROMOCODES_LIST_LEN = 1
|
|
MAX_UNIQUE_PROMOCODES_LIST_LEN = 5000
|
|
MIN_UNIQUE_PROMOCODE_LEN = 3
|
|
MAX_UNIQUE_PROMOCODE_LEN = 30
|
|
|
|
|
|
class TargetAgeValidator:
|
|
def __call__(self, instance) -> None: # noqa: ANN001
|
|
if (
|
|
instance.age_from is not None
|
|
and instance.age_until is not None
|
|
and instance.age_from > instance.age_until
|
|
):
|
|
err = "age_from can't be greater than age_until"
|
|
raise ValidationError(err)
|
|
|
|
|
|
class PromocodeDurationValidator:
|
|
def __call__(self, instance) -> None: # noqa: ANN001
|
|
if (
|
|
instance.active_from is not None
|
|
and instance.active_until is not None
|
|
and instance.active_from > instance.active_until
|
|
):
|
|
err = "active_from can't be greater than active_until"
|
|
raise ValidationError(err)
|
|
|
|
|
|
@deconstructible
|
|
class TargetCategoriesValidator(BaseValidator):
|
|
def __init__(self) -> None:
|
|
pass
|
|
|
|
def __call__(self, categories: list) -> None:
|
|
if not isinstance(categories, list):
|
|
err = "categories must be a list"
|
|
raise ValidationError(err)
|
|
|
|
if len(categories) > MAX_CATEGORIES_LIST_LEN:
|
|
err = "max. categories length is 20"
|
|
raise ValidationError(err)
|
|
|
|
for category in categories:
|
|
if not (MIN_CATEGORY_LEN <= len(category) <= MAX_CATEGORY_LEN):
|
|
err = "category name length must be >=2 and <=20"
|
|
raise ValidationError(err)
|
|
|
|
|
|
@deconstructible
|
|
class PromocodeUniqueValidator(BaseValidator):
|
|
def __init__(self) -> None:
|
|
pass
|
|
|
|
def __call__(self, promocodes: list) -> None:
|
|
if not isinstance(promocodes, list):
|
|
err = "unique promocodes must be a list"
|
|
raise ValidationError(err)
|
|
|
|
if not (
|
|
MIN_UNIQUE_PROMOCODES_LIST_LEN
|
|
<= len(promocodes)
|
|
<= MAX_UNIQUE_PROMOCODES_LIST_LEN
|
|
):
|
|
err = "unique promocodes length must be >=1 and <=5000"
|
|
raise ValidationError(err)
|
|
|
|
for promocode in promocodes:
|
|
if not (
|
|
MIN_UNIQUE_PROMOCODE_LEN
|
|
<= len(promocode)
|
|
<= MAX_UNIQUE_PROMOCODE_LEN
|
|
):
|
|
err = "unique promocode length must be >=3 and <=30"
|
|
raise ValidationError(err)
|