from django.contrib.auth.tokens import default_token_generator
from django.contrib.sites.models import Site
from django.core.mail import send_mail
from django.template import loader
from django.template.context import Context
from django.utils.http import int_to_base36
from django.utils.translation import ugettext_lazy as _

def reset(user, domain_override=None, email_template_name='registration/password_reset_email.html',
             use_https=False, token_generator=default_token_generator):
    """Reset users password"""
    if not user.email:
        raise ValueError('Email address is required to send an email')

    if not domain_override:
        current_site = Site.objects.get_current()
        site_name = current_site.name
        domain = current_site.domain
    else:
        site_name = domain = domain_override
    t = loader.get_template(email_template_name)
    c = {
        'email': user.email,
        'domain': domain,
        'site_name': site_name,
        'uid': int_to_base36(user.id),
        'user': user,
        'token': token_generator.make_token(user),
        'protocol': use_https and 'https' or 'http',
    }
    send_mail(_("Your account for %s") % site_name,
              t.render(Context(c)), None, [user.email])