Merge branch 'feature/documentation' into 'develop'

Feature/documentation

See merge request 2020-2021/online/s101/group-02/access_controller!27
This commit is contained in:
Кравченко Артем 2021-03-04 13:06:14 +00:00
commit dbe49d1c34
3 changed files with 40 additions and 16 deletions

View File

@ -8,9 +8,14 @@ from main.models import UserProfile
class CustomRegistrationForm(RegistrationFormUniqueEmail): class CustomRegistrationForm(RegistrationFormUniqueEmail):
""" """
Форма для регистрации :class:`django_registration.forms.RegistrationFormUniqueEmail` Форма для регистрации :class:`django_registration.forms.RegistrationFormUniqueEmail`
с добавлением bootstrap-класса 'form-control'
с добавлением bootstrap-класса "form-control"
:param visible_fields.email: Поле для ввода email, зарегистирированного на Zendesk
:type visible_fields.email: :class:`django_registration.forms.RegistrationFormUniqueEmail`
""" """
def __init__(self, *args, **kwargs):
def __init__(self, *args, **kwargs) -> RegistrationFormUniqueEmail:
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
for visible in self.visible_fields(): for visible in self.visible_fields():
if visible.field.widget.attrs.get('class', False): if visible.field.widget.attrs.get('class', False):
@ -27,7 +32,10 @@ class CustomRegistrationForm(RegistrationFormUniqueEmail):
class AdminPageUsers(forms.Form): class AdminPageUsers(forms.Form):
""" """
Форма для установки статуса Форма для установки статусов engineer или light_agent пользователям
:param users: Поле для установки статуса
:type users: :class:`ModelMultipleChoiceField`
""" """
users = forms.ModelMultipleChoiceField( users = forms.ModelMultipleChoiceField(

View File

@ -26,13 +26,17 @@ from .models import UserProfile
class CustomRegistrationView(RegistrationView): class CustomRegistrationView(RegistrationView):
""" """
Отображение и логика работы страницы регистрации пользователя Отображение и логика работы страницы регистрации пользователя
1. Ввод email пользователя, указанный на Zendesk
2. В случае если пользователь с данным паролем зарегистрирован на Zendesk и относится к определенной организации, происходит сброс ссылки с установлением пароля на указанный email
3. Создается пользователь class User, а также его профиль
""" """
form_class = CustomRegistrationForm form_class = CustomRegistrationForm
template_name = 'django_registration/registration_form.html' template_name = 'django_registration/registration_form.html'
success_url = reverse_lazy('django_registration_complete') success_url = reverse_lazy('django_registration_complete')
is_allowed = True is_allowed = True
def register(self, form): def register(self, form: CustomRegistrationForm) -> User:
self.is_allowed = True self.is_allowed = True
if check_user_exist(form.data['email']) and get_user_organization(form.data['email']) == 'SYSTEM': if check_user_exist(form.data['email']) and get_user_organization(form.data['email']) == 'SYSTEM':
forms = PasswordResetForm(self.request.POST) forms = PasswordResetForm(self.request.POST)
@ -60,7 +64,7 @@ class CustomRegistrationView(RegistrationView):
else: else:
self.is_allowed = False self.is_allowed = False
def get_success_url(self, user=None): def get_success_url(self, user: User = None) -> success_url:
""" """
Возвращает url-адрес страницы, куда нужно перейти после успешной/неуспешной регистрации Возвращает url-адрес страницы, куда нужно перейти после успешной/неуспешной регистрации
Используется самой django-registration Используется самой django-registration
@ -72,13 +76,9 @@ class CustomRegistrationView(RegistrationView):
@login_required() @login_required()
def profile_page(request): def profile_page(request: UserProfile) -> UserProfile:
""" """
Отображение страницы профиля Отображение страницы профиля
:param request: объект с деталями запроса
:type request: :class:`django.http.HttpResponse`
:return: объект ответа сервера с HTML-кодом внутри
""" """
user_profile = request.user.userprofile user_profile = request.user.userprofile
update_profile(user_profile) update_profile(user_profile)
@ -140,17 +140,26 @@ def work_become_engineer(request):
def main_page(request): def main_page(request):
"""
Отображение логгирования на главной странице
"""
logger = logging.getLogger('main.index') logger = logging.getLogger('main.index')
logger.info('Index page opened') logger.info('Index page opened')
return render(request, 'pages/index.html') return render(request, 'pages/index.html')
class AdminPageView(FormView, LoginRequiredMixin): class AdminPageView(FormView, LoginRequiredMixin):
"""
Class AdminPageView - логика работы страницы администратора
"""
template_name = 'pages/adm_ruleset.html' template_name = 'pages/adm_ruleset.html'
form_class = AdminPageUsers form_class = AdminPageUsers
success_url = '/control/' success_url = '/control/'
def form_valid(self, form): def form_valid(self, form: AdminPageUsers) -> AdminPageUsers:
"""
Функция установки ролей пользователям
"""
if 'engineer' in self.request.POST: if 'engineer' in self.request.POST:
self.make_engineers(form.cleaned_data['users']) self.make_engineers(form.cleaned_data['users'])
elif 'light_agent' in self.request.POST: elif 'light_agent' in self.request.POST:
@ -166,7 +175,10 @@ class AdminPageView(FormView, LoginRequiredMixin):
[make_light_agent(user) for user in users] [make_light_agent(user) for user in users]
@staticmethod @staticmethod
def count_users(users): # TODO: this func counts users from all zendesk instead of just from a model def count_users(users: User) -> int: #.. todolist:: :this func counts users from all zendesk instead of just from a model:
"""
Функция подсчета количества сотрудников с ролями engineer и light_a
"""
engineers, light_agents = 0, 0 engineers, light_agents = 0, 0
for user in users: for user in users:
if user.custom_role_id == ZENDESK_ROLES['engineer']: if user.custom_role_id == ZENDESK_ROLES['engineer']:
@ -175,7 +187,10 @@ class AdminPageView(FormView, LoginRequiredMixin):
light_agents += 1 light_agents += 1
return engineers, light_agents return engineers, light_agents
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs) -> list:
"""
Функция формирования контента страницы администратора (с проверкой прав доступа)
"""
if self.request.user.userprofile.role != 'admin': if self.request.user.userprofile.role != 'admin':
raise PermissionDenied raise PermissionDenied
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)

View File

@ -9,3 +9,4 @@ django_registration==3.1.1
Sphinx==3.4.3 Sphinx==3.4.3
sphinx-rtd-theme==0.5.1 sphinx-rtd-theme==0.5.1
sphinx-autodoc-typehints==1.11.1 sphinx-autodoc-typehints==1.11.1