summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/contrib/auth/models.py
diff options
context:
space:
mode:
authorttt2017-05-13 00:29:47 +0530
committerttt2017-05-13 00:29:47 +0530
commitabf599be33b383a6a5baf9493093b2126a622ac8 (patch)
tree4c5ab6e0d935d5e65fabcf0258e4a00dd20a5afa /lib/python2.7/site-packages/django/contrib/auth/models.py
downloadSBHS-2018-Rpi-abf599be33b383a6a5baf9493093b2126a622ac8.tar.gz
SBHS-2018-Rpi-abf599be33b383a6a5baf9493093b2126a622ac8.tar.bz2
SBHS-2018-Rpi-abf599be33b383a6a5baf9493093b2126a622ac8.zip
added all server files
Diffstat (limited to 'lib/python2.7/site-packages/django/contrib/auth/models.py')
-rw-r--r--lib/python2.7/site-packages/django/contrib/auth/models.py527
1 files changed, 527 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/django/contrib/auth/models.py b/lib/python2.7/site-packages/django/contrib/auth/models.py
new file mode 100644
index 0000000..5153753
--- /dev/null
+++ b/lib/python2.7/site-packages/django/contrib/auth/models.py
@@ -0,0 +1,527 @@
+from __future__ import unicode_literals
+import re
+import warnings
+
+from django.core.exceptions import ImproperlyConfigured
+from django.core.mail import send_mail
+from django.core import validators
+from django.db import models
+from django.db.models.manager import EmptyManager
+from django.utils.crypto import get_random_string
+from django.utils.http import urlquote
+from django.utils import six
+from django.utils.translation import ugettext_lazy as _
+from django.utils import timezone
+
+from django.contrib import auth
+from django.contrib.auth.hashers import (
+ check_password, make_password, is_password_usable)
+from django.contrib.auth.signals import user_logged_in
+from django.contrib.contenttypes.models import ContentType
+from django.utils.encoding import python_2_unicode_compatible
+
+
+def update_last_login(sender, user, **kwargs):
+ """
+ A signal receiver which updates the last_login date for
+ the user logging in.
+ """
+ user.last_login = timezone.now()
+ user.save(update_fields=['last_login'])
+user_logged_in.connect(update_last_login)
+
+
+class SiteProfileNotAvailable(Exception):
+ pass
+
+
+class PermissionManager(models.Manager):
+ def get_by_natural_key(self, codename, app_label, model):
+ return self.get(
+ codename=codename,
+ content_type=ContentType.objects.get_by_natural_key(app_label,
+ model),
+ )
+
+
+@python_2_unicode_compatible
+class Permission(models.Model):
+ """
+ The permissions system provides a way to assign permissions to specific
+ users and groups of users.
+
+ The permission system is used by the Django admin site, but may also be
+ useful in your own code. The Django admin site uses permissions as follows:
+
+ - The "add" permission limits the user's ability to view the "add" form
+ and add an object.
+ - The "change" permission limits a user's ability to view the change
+ list, view the "change" form and change an object.
+ - The "delete" permission limits the ability to delete an object.
+
+ Permissions are set globally per type of object, not per specific object
+ instance. It is possible to say "Mary may change news stories," but it's
+ not currently possible to say "Mary may change news stories, but only the
+ ones she created herself" or "Mary may only change news stories that have a
+ certain status or publication date."
+
+ Three basic permissions -- add, change and delete -- are automatically
+ created for each Django model.
+ """
+ name = models.CharField(_('name'), max_length=50)
+ content_type = models.ForeignKey(ContentType)
+ codename = models.CharField(_('codename'), max_length=100)
+ objects = PermissionManager()
+
+ class Meta:
+ verbose_name = _('permission')
+ verbose_name_plural = _('permissions')
+ unique_together = (('content_type', 'codename'),)
+ ordering = ('content_type__app_label', 'content_type__model',
+ 'codename')
+
+ def __str__(self):
+ return "%s | %s | %s" % (
+ six.text_type(self.content_type.app_label),
+ six.text_type(self.content_type),
+ six.text_type(self.name))
+
+ def natural_key(self):
+ return (self.codename,) + self.content_type.natural_key()
+ natural_key.dependencies = ['contenttypes.contenttype']
+
+
+class GroupManager(models.Manager):
+ """
+ The manager for the auth's Group model.
+ """
+ def get_by_natural_key(self, name):
+ return self.get(name=name)
+
+
+@python_2_unicode_compatible
+class Group(models.Model):
+ """
+ Groups are a generic way of categorizing users to apply permissions, or
+ some other label, to those users. A user can belong to any number of
+ groups.
+
+ A user in a group automatically has all the permissions granted to that
+ group. For example, if the group Site editors has the permission
+ can_edit_home_page, any user in that group will have that permission.
+
+ Beyond permissions, groups are a convenient way to categorize users to
+ apply some label, or extended functionality, to them. For example, you
+ could create a group 'Special users', and you could write code that would
+ do special things to those users -- such as giving them access to a
+ members-only portion of your site, or sending them members-only email
+ messages.
+ """
+ name = models.CharField(_('name'), max_length=80, unique=True)
+ permissions = models.ManyToManyField(Permission,
+ verbose_name=_('permissions'), blank=True)
+
+ objects = GroupManager()
+
+ class Meta:
+ verbose_name = _('group')
+ verbose_name_plural = _('groups')
+
+ def __str__(self):
+ return self.name
+
+ def natural_key(self):
+ return (self.name,)
+
+
+class BaseUserManager(models.Manager):
+
+ @classmethod
+ def normalize_email(cls, email):
+ """
+ Normalize the address by lowercasing the domain part of the email
+ address.
+ """
+ email = email or ''
+ try:
+ email_name, domain_part = email.strip().rsplit('@', 1)
+ except ValueError:
+ pass
+ else:
+ email = '@'.join([email_name, domain_part.lower()])
+ return email
+
+ def make_random_password(self, length=10,
+ allowed_chars='abcdefghjkmnpqrstuvwxyz'
+ 'ABCDEFGHJKLMNPQRSTUVWXYZ'
+ '23456789'):
+ """
+ Generates a random password with the given length and given
+ allowed_chars. Note that the default value of allowed_chars does not
+ have "I" or "O" or letters and digits that look similar -- just to
+ avoid confusion.
+ """
+ return get_random_string(length, allowed_chars)
+
+ def get_by_natural_key(self, username):
+ return self.get(**{self.model.USERNAME_FIELD: username})
+
+
+class UserManager(BaseUserManager):
+
+ def _create_user(self, username, email, password,
+ is_staff, is_superuser, **extra_fields):
+ """
+ Creates and saves a User with the given username, email and password.
+ """
+ now = timezone.now()
+ if not username:
+ raise ValueError('The given username must be set')
+ email = self.normalize_email(email)
+ user = self.model(username=username, email=email,
+ is_staff=is_staff, is_active=True,
+ is_superuser=is_superuser, last_login=now,
+ date_joined=now, **extra_fields)
+ user.set_password(password)
+ user.save(using=self._db)
+ return user
+
+ def create_user(self, username, email=None, password=None, **extra_fields):
+ return self._create_user(username, email, password, False, False,
+ **extra_fields)
+
+ def create_superuser(self, username, email, password, **extra_fields):
+ return self._create_user(username, email, password, True, True,
+ **extra_fields)
+
+
+@python_2_unicode_compatible
+class AbstractBaseUser(models.Model):
+ password = models.CharField(_('password'), max_length=128)
+ last_login = models.DateTimeField(_('last login'), default=timezone.now)
+
+ is_active = True
+
+ REQUIRED_FIELDS = []
+
+ class Meta:
+ abstract = True
+
+ def get_username(self):
+ "Return the identifying username for this User"
+ return getattr(self, self.USERNAME_FIELD)
+
+ def __str__(self):
+ return self.get_username()
+
+ def natural_key(self):
+ return (self.get_username(),)
+
+ def is_anonymous(self):
+ """
+ Always returns False. This is a way of comparing User objects to
+ anonymous users.
+ """
+ return False
+
+ def is_authenticated(self):
+ """
+ Always return True. This is a way to tell if the user has been
+ authenticated in templates.
+ """
+ return True
+
+ def set_password(self, raw_password):
+ self.password = make_password(raw_password)
+
+ def check_password(self, raw_password):
+ """
+ Returns a boolean of whether the raw_password was correct. Handles
+ hashing formats behind the scenes.
+ """
+ def setter(raw_password):
+ self.set_password(raw_password)
+ self.save(update_fields=["password"])
+ return check_password(raw_password, self.password, setter)
+
+ def set_unusable_password(self):
+ # Sets a value that will never be a valid hash
+ self.password = make_password(None)
+
+ def has_usable_password(self):
+ return is_password_usable(self.password)
+
+ def get_full_name(self):
+ raise NotImplementedError()
+
+ def get_short_name(self):
+ raise NotImplementedError()
+
+
+# A few helper functions for common logic between User and AnonymousUser.
+def _user_get_all_permissions(user, obj):
+ permissions = set()
+ for backend in auth.get_backends():
+ if hasattr(backend, "get_all_permissions"):
+ permissions.update(backend.get_all_permissions(user, obj))
+ return permissions
+
+
+def _user_has_perm(user, perm, obj):
+ for backend in auth.get_backends():
+ if hasattr(backend, "has_perm"):
+ if backend.has_perm(user, perm, obj):
+ return True
+ return False
+
+
+def _user_has_module_perms(user, app_label):
+ for backend in auth.get_backends():
+ if hasattr(backend, "has_module_perms"):
+ if backend.has_module_perms(user, app_label):
+ return True
+ return False
+
+
+class PermissionsMixin(models.Model):
+ """
+ A mixin class that adds the fields and methods necessary to support
+ Django's Group and Permission model using the ModelBackend.
+ """
+ is_superuser = models.BooleanField(_('superuser status'), default=False,
+ help_text=_('Designates that this user has all permissions without '
+ 'explicitly assigning them.'))
+ groups = models.ManyToManyField(Group, verbose_name=_('groups'),
+ blank=True, help_text=_('The groups this user belongs to. A user will '
+ 'get all permissions granted to each of '
+ 'his/her group.'),
+ related_name="user_set", related_query_name="user")
+ user_permissions = models.ManyToManyField(Permission,
+ verbose_name=_('user permissions'), blank=True,
+ help_text=_('Specific permissions for this user.'),
+ related_name="user_set", related_query_name="user")
+
+ class Meta:
+ abstract = True
+
+ def get_group_permissions(self, obj=None):
+ """
+ Returns a list of permission strings that this user has through his/her
+ groups. This method queries all available auth backends. If an object
+ is passed in, only permissions matching this object are returned.
+ """
+ permissions = set()
+ for backend in auth.get_backends():
+ if hasattr(backend, "get_group_permissions"):
+ permissions.update(backend.get_group_permissions(self, obj))
+ return permissions
+
+ def get_all_permissions(self, obj=None):
+ return _user_get_all_permissions(self, obj)
+
+ def has_perm(self, perm, obj=None):
+ """
+ Returns True if the user has the specified permission. This method
+ queries all available auth backends, but returns immediately if any
+ backend returns True. Thus, a user who has permission from a single
+ auth backend is assumed to have permission in general. If an object is
+ provided, permissions for this specific object are checked.
+ """
+
+ # Active superusers have all permissions.
+ if self.is_active and self.is_superuser:
+ return True
+
+ # Otherwise we need to check the backends.
+ return _user_has_perm(self, perm, obj)
+
+ def has_perms(self, perm_list, obj=None):
+ """
+ Returns True if the user has each of the specified permissions. If
+ object is passed, it checks if the user has all required perms for this
+ object.
+ """
+ for perm in perm_list:
+ if not self.has_perm(perm, obj):
+ return False
+ return True
+
+ def has_module_perms(self, app_label):
+ """
+ Returns True if the user has any permissions in the given app label.
+ Uses pretty much the same logic as has_perm, above.
+ """
+ # Active superusers have all permissions.
+ if self.is_active and self.is_superuser:
+ return True
+
+ return _user_has_module_perms(self, app_label)
+
+
+class AbstractUser(AbstractBaseUser, PermissionsMixin):
+ """
+ An abstract base class implementing a fully featured User model with
+ admin-compliant permissions.
+
+ Username, password and email are required. Other fields are optional.
+ """
+ username = models.CharField(_('username'), max_length=30, unique=True,
+ help_text=_('Required. 30 characters or fewer. Letters, numbers and '
+ '@/./+/-/_ characters'),
+ validators=[
+ validators.RegexValidator(re.compile('^[\w.@+-]+$'), _('Enter a valid username.'), 'invalid')
+ ])
+ first_name = models.CharField(_('first name'), max_length=30, blank=True)
+ last_name = models.CharField(_('last name'), max_length=30, blank=True)
+ email = models.EmailField(_('email address'), blank=True)
+ is_staff = models.BooleanField(_('staff status'), default=False,
+ help_text=_('Designates whether the user can log into this admin '
+ 'site.'))
+ is_active = models.BooleanField(_('active'), default=True,
+ help_text=_('Designates whether this user should be treated as '
+ 'active. Unselect this instead of deleting accounts.'))
+ date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
+
+ objects = UserManager()
+
+ USERNAME_FIELD = 'username'
+ REQUIRED_FIELDS = ['email']
+
+ class Meta:
+ verbose_name = _('user')
+ verbose_name_plural = _('users')
+ abstract = True
+
+ def get_absolute_url(self):
+ return "/users/%s/" % urlquote(self.username)
+
+ def get_full_name(self):
+ """
+ Returns the first_name plus the last_name, with a space in between.
+ """
+ full_name = '%s %s' % (self.first_name, self.last_name)
+ return full_name.strip()
+
+ def get_short_name(self):
+ "Returns the short name for the user."
+ return self.first_name
+
+ def email_user(self, subject, message, from_email=None):
+ """
+ Sends an email to this User.
+ """
+ send_mail(subject, message, from_email, [self.email])
+
+ def get_profile(self):
+ """
+ Returns site-specific profile for this user. Raises
+ SiteProfileNotAvailable if this site does not allow profiles.
+ """
+ warnings.warn("The use of AUTH_PROFILE_MODULE to define user profiles has been deprecated.",
+ DeprecationWarning, stacklevel=2)
+ if not hasattr(self, '_profile_cache'):
+ from django.conf import settings
+ if not getattr(settings, 'AUTH_PROFILE_MODULE', False):
+ raise SiteProfileNotAvailable(
+ 'You need to set AUTH_PROFILE_MODULE in your project '
+ 'settings')
+ try:
+ app_label, model_name = settings.AUTH_PROFILE_MODULE.split('.')
+ except ValueError:
+ raise SiteProfileNotAvailable(
+ 'app_label and model_name should be separated by a dot in '
+ 'the AUTH_PROFILE_MODULE setting')
+ try:
+ model = models.get_model(app_label, model_name)
+ if model is None:
+ raise SiteProfileNotAvailable(
+ 'Unable to load the profile model, check '
+ 'AUTH_PROFILE_MODULE in your project settings')
+ self._profile_cache = model._default_manager.using(
+ self._state.db).get(user__id__exact=self.id)
+ self._profile_cache.user = self
+ except (ImportError, ImproperlyConfigured):
+ raise SiteProfileNotAvailable
+ return self._profile_cache
+
+
+class User(AbstractUser):
+ """
+ Users within the Django authentication system are represented by this
+ model.
+
+ Username, password and email are required. Other fields are optional.
+ """
+ class Meta(AbstractUser.Meta):
+ swappable = 'AUTH_USER_MODEL'
+
+
+@python_2_unicode_compatible
+class AnonymousUser(object):
+ id = None
+ pk = None
+ username = ''
+ is_staff = False
+ is_active = False
+ is_superuser = False
+ _groups = EmptyManager(Group)
+ _user_permissions = EmptyManager(Permission)
+
+ def __init__(self):
+ pass
+
+ def __str__(self):
+ return 'AnonymousUser'
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__)
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __hash__(self):
+ return 1 # instances always return the same hash value
+
+ def save(self):
+ raise NotImplementedError
+
+ def delete(self):
+ raise NotImplementedError
+
+ def set_password(self, raw_password):
+ raise NotImplementedError
+
+ def check_password(self, raw_password):
+ raise NotImplementedError
+
+ def _get_groups(self):
+ return self._groups
+ groups = property(_get_groups)
+
+ def _get_user_permissions(self):
+ return self._user_permissions
+ user_permissions = property(_get_user_permissions)
+
+ def get_group_permissions(self, obj=None):
+ return set()
+
+ def get_all_permissions(self, obj=None):
+ return _user_get_all_permissions(self, obj=obj)
+
+ def has_perm(self, perm, obj=None):
+ return _user_has_perm(self, perm, obj=obj)
+
+ def has_perms(self, perm_list, obj=None):
+ for perm in perm_list:
+ if not self.has_perm(perm, obj):
+ return False
+ return True
+
+ def has_module_perms(self, module):
+ return _user_has_module_perms(self, module)
+
+ def is_anonymous(self):
+ return True
+
+ def is_authenticated(self):
+ return False