==========
Validators
==========

Misago apps implement plenty of validators, some of which are considered public API. Those validators are per convention contained within ``validators`` module of their respective apps.


misago.core.validators
======================


validate_sluggable
------------------

:py:class:`misago.core.validators.validate_sluggable`

Callable class that validates if string can be converted to non-empty slug thats no longer than 255 characters.

To you use it, first instantiate it. If you want to define custom error messages, you can pass them using ``error_short`` and ``error_long`` arguments on initializer. After that you can simply call the class like other validator functions to see if it raises ``ValidationError``::

    from misago.core.validators import validate_sluggable
    validator = validate_sluggable()
    validator(some_value)


misago.users.validators
=======================


validate_email
--------------

:py:class:`misago.users.validators.validate_email`

Function that takes email address and runs content, availability and ban check validation in this order via calling dedicated validators.


validate_email_banned
---------------------

:py:func:`misago.users.validators.validate_email_banned`

Function that accepts email string as its only argument and raises Validation error if it's banned.


validate_email_content
----------------------

:py:class:`misago.users.validators.validate_email_content`

Callable instance of :py:class:`django.core.validators.EmailValidator` that checks if email address has valid structure and contents.


validate_password
-----------------

:py:func:`misago.users.validators.validate_password`

Function that takes plaintext password and runs length and complexity validation in this order via calling dedicated validators.


validate_password_complexity
----------------------------

:py:func:`misago.users.validators.validate_password_complexity`

Validates password complexity against tests specified in ``password_complexity`` setting.


validate_password_length
------------------------

:py:func:`misago.users.validators.validate_password_length`

Validates password length and raises ValidationError if specified plaintext password is shorter than ``password_length_min``.


validate_username
-----------------

:py:func:`misago.users.validators.validate_username`

Function that takes username and runs content, length, availability and ban check validation in this order via calling dedicated validators.


validate_username_available
---------------------------

:py:func:`misago.users.validators.validate_username_available`

Function that accepts username string as its only argument and raises ValidationError if it's already taken.


validate_username_banned
------------------------

:py:func:`misago.users.validators.validate_username_banned`

Function that accepts username string as its only argument and raises Validation error if it's banned.


validate_username_content
-------------------------

:py:func:`misago.users.validators.validate_username_content`

Function that accepts username string as its only argument and raises Validation error if username contains disallowed characters (eg. those that are not matched by ``[0-9a-z]+`` regex).


validate_username_length
------------------------

:py:func:`misago.users.validators.validate_username_length`

Function that accepts username string as its only argument and raises Validation error if it's shorter than ``username_length_min`` setting or longer than ``username_length_max`` setting.