Source code for aiida.orm.implementation.general.user

# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################
import logging
from abc import abstractmethod, abstractproperty, ABCMeta
from aiida.common.hashing import is_password_usable
from aiida.common.utils import abstractclassmethod


[docs]class AbstractUser(object): """ An AiiDA ORM implementation of a user. """ __metaclass__ = ABCMeta _logger = logging.getLogger(__name__) REQUIRED_FIELDS = ['first_name', 'last_name', 'institution']
[docs] @abstractmethod def __init__(self, **kwargs): pass
@abstractproperty def pk(self): pass @abstractproperty def id(self): pass
[docs] @abstractmethod def save(self): pass
[docs] @abstractmethod def force_save(self): pass
@abstractproperty def email(self): pass @abstractmethod @email.setter def email(self, val): pass @property def password(self): return self._get_password() @password.setter def password(self, val): from aiida.common.hashing import create_unusable_pass, pwd_context if val is None: pass_hash = create_unusable_pass() else: pass_hash = pwd_context.encrypt(val) self._set_password(pass_hash)
[docs] @abstractmethod def _get_password(self): pass
[docs] @abstractmethod def _set_password(self): pass
@abstractproperty def is_superuser(self): pass @abstractmethod @is_superuser.setter def is_superuser(self, val): pass @abstractproperty def first_name(self): pass @abstractmethod @first_name.setter def first_name(self, val): pass @abstractproperty def last_name(self): pass @abstractmethod @last_name.setter def last_name(self, val): pass @abstractproperty def institution(self): pass @abstractmethod @institution.setter def institution(self, val): pass @abstractproperty def is_staff(self): pass @abstractmethod @is_staff.setter def is_staff(self, val): pass @abstractproperty def is_active(self): pass @abstractmethod @is_active.setter def is_active(self, val): pass @abstractproperty def last_login(self): pass @abstractmethod @last_login.setter def last_login(self, val): pass @abstractproperty def date_joined(self): pass @abstractmethod @date_joined.setter def date_joined(self, val): pass
[docs] def has_usable_password(self): return is_password_usable(self._get_password())
[docs] @classmethod def get_all_users(cls): return cls.search_for_users()
[docs] @abstractclassmethod def search_for_users(cls, **kwargs): """ Search for a user the passed keys. :param kwargs: The keys to search for the user with. :return: A list of users matching the search criteria. """ pass
[docs] @staticmethod def get_schema(): """ Every node property contains: - display_name: display name of the property - help text: short help text of the property - is_foreign_key: is the property foreign key to other type of the node - type: type of the property. e.g. str, dict, int :return: get schema of the user """ return { "date_joined": { "display_name": "User since", "help_text": "Date and time of registration", "is_foreign_key": False, "type": "datetime.datetime" }, "email": { "display_name": "email", "help_text": "e-mail of the user", "is_foreign_key": False, "type": "str" }, "first_name": { "display_name": "First name", "help_text": "First name of the user", "is_foreign_key": False, "type": "str" }, "id": { "display_name": "Id", "help_text": "Id of the object", "is_foreign_key": False, "type": "int" }, "institution": { "display_name": "Institution", "help_text": "Affiliation of the user", "is_foreign_key": False, "type": "str" }, "is_active": { "display_name": "Active", "help_text": "True(False) if the user is active(not)", "is_foreign_key": False, "type": "bool" }, "last_login": { "display_name": "Last login", "help_text": "Date and time of the last login", "is_foreign_key": False, "type": "datetime.datetime" }, "last_name": { "display_name": "Last name", "help_text": "Last name of the user", "is_foreign_key": False, "type": "str" } }
[docs]class Util(object): __metaclass__ = ABCMeta
[docs] @abstractmethod def delete_user(self, pk): """ Delete the user with the given pk. :param pk: The user pk. """ pass