Temporary vertion with non-working enchant

This commit is contained in:
Степаненко Ольга 2021-03-18 17:03:30 +03:00
parent 10e341fcbb
commit 0a7b4fb1a7
3 changed files with 70 additions and 42 deletions

View File

@ -37,10 +37,7 @@ ManagerDescriptor.__get__ = lambda self, *args, **kwargs: self.manager
from django.db.models.query import QuerySet from django.db.models.query import QuerySet
QuerySet.__repr__ = lambda self: self.__class__.__name__ QuerySet.__repr__ = lambda self: self.__class__.__name__
# try:
# import enchant # NoQA
# except ImportError:
# enchant = None
django.setup() django.setup()
@ -117,17 +114,12 @@ def skip_queryset(app, what, name, obj, skip, options):
return True return True
return skip return skip
def process_signature(app, what, name, obj, options, signature, return_annotation):
return None
def setup(app): def setup(app):
# Register the docstring processor with sphinx # Register the docstring processor with sphinx
app.connect('autodoc-process-docstring', process_django_models) app.connect('autodoc-process-docstring', process_django_models)
app.connect('autodoc-skip-member', skip_queryset) app.connect('autodoc-skip-member', skip_queryset)
if enchant is not None: app.connect('autodoc-process-docstring', process_modules)
app.connect('autodoc-process-docstring', process_modules)
app.connect('autodoc-process-signature', process_signature)
@ -191,6 +183,7 @@ intersphinx_mapping = {
autodoc_default_flags = ['members'] autodoc_default_flags = ['members']
# spell checking # spell checking
print(enchant.list_languages())
spelling_lang = 'ru_RU' spelling_lang = 'ru_RU'
tokenizer_lang = 'ru_RU' tokenizer_lang = 'ru_RU'
spelling_word_list_filename = ['spelling_wordlist.txt', 'another_list.txt'] spelling_word_list_filename = ['spelling_wordlist.txt', 'another_list.txt']
@ -209,7 +202,6 @@ spelling_ignore_contributor_names=True
# If true, `todo` and `todoList` produce output, else they produce nothing. # If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True todo_include_todos = True
set_type_checking_flag = True set_type_checking_flag = True
typehints_fully_qualified = True typehints_fully_qualified = True
always_document_param_types = True always_document_param_types = True

View File

@ -242,13 +242,10 @@ def get_timedelta(log: RoleChangeLogs, time=None) -> timedelta:
return time return time
def last_day_of_month(day): def last_day_of_month(day: int) -> int:
""" """
Функция возвращает последний день текущего месяца. Функция возвращает последний день текущего месяца.
.. todo::
Дописать документацию по данной функции (не поняла типы и суть)
:param day: Текущий день :param day: Текущий день
:return: Последний день месяца :return: Последний день месяца
""" """
@ -259,10 +256,26 @@ def last_day_of_month(day):
class StatisticData: class StatisticData:
""" """
Класс для учета статистики интервалов работы пользователей. Класс для учета статистики интервалов работы пользователей.
Передаваемые параметры: start_date, end_date, user_email. Передаваемые параметры: start_date, end_date, user_email, stat.
.. todo:: :param display: Формат отображения времени (часы, минуты)
Дописать описание данного класса :type display: :class:`list`
:param interval: Инетрвал времени в часах и минутах
:type interval: :class:`list`
:param start_date: Дата начала работы
:type start_date: :class:`date`
:param end_date: Дата окончания работы
:type end_date: :class:`date`
:param email: Email пользователя
:type email: :class:`str`
:param errors: Список ошибок
:type errors: :class:`list`
:param warnings: Список предупрежденй
:type warnings: :class:`list`
:param data: Ретроспектива смены ролей пользователя
:type data: :class:`dict`
:param statistic: Интервалы работы пользователя
:type statistic: :class:`dict`
""" """
def __init__(self, start_date, end_date, user_email, stat=None): def __init__(self, start_date, end_date, user_email, stat=None):
self.display = None self.display = None
@ -362,12 +375,12 @@ class StatisticData:
new_stat[key] = item / (ONE_DAY * 3600) new_stat[key] = item / (ONE_DAY * 3600)
return new_stat return new_stat
def _use_interval(self, stat): def _use_interval(self, stat: dict) -> dict:
""" """
Функция объединяет ключи и значения в соответствии с интервалом работы. Функция объединяет ключи и значения в соответствии с интервалом работы.
:param stat: :param stat: Статистика работы пользователя
:return: :return: Обновленная статистика
""" """
if not self.is_valid_statistic() or not self.interval: if not self.is_valid_statistic() or not self.interval:
return stat return stat
@ -386,19 +399,21 @@ class StatisticData:
new_stat = stat # статистика изначально в днях new_stat = stat # статистика изначально в днях
return new_stat return new_stat
def check_time(self): def check_time(self) -> bool:
""" """
Проверка на правильность введенного времени Функция проверяет корректность введенного времени.
:return: True, если время указано корректно. Иначе, False
""" """
if self.end_date < self.start_date or self.end_date > datetime.now().date(): if self.end_date < self.start_date or self.end_date > datetime.now().date():
return False return False
return True return True
def _set_data(self): def _set_data(self) -> dict:
""" """
Функция возвращает логи в диапазоне дат start_date-end_date для пользователя с указанным email. Функция возвращает логи в диапазоне дат start_date-end_date для пользователя с указанным email.
:return: :return: Данные о смене статусов пользователя. Если пользователь не найден или интервал времени некорректен - ошибку.
""" """
if not self.check_time(): if not self.check_time():
self.errors += ['Конец диапазона должен быть позже начала диапазона и раньше текущего времени'] self.errors += ['Конец диапазона должен быть позже начала диапазона и раньше текущего времени']
@ -411,11 +426,11 @@ class StatisticData:
except User.DoesNotExist: except User.DoesNotExist:
self.errors += ['Пользователь не найден'] self.errors += ['Пользователь не найден']
def _set_statistic(self): def _set_statistic(self) -> dict:
""" """
Функция заполняет словарь, в котором ключ - дата, значение - кол-во проработанных в этот день секунд. Функция заполняет словарь, в котором ключ - дата, значение - кол-во проработанных в этот день секунд.
:return: :return: Статистика работы пользователя (statistic)
""" """
self.clear_statistic() self.clear_statistic()
if not self.get_data(): if not self.get_data():
@ -445,22 +460,23 @@ class StatisticData:
elapsed_time = next_log.change_time - current_log.change_time elapsed_time = next_log.change_time - current_log.change_time
self.statistic[current_log.change_time.date()] += elapsed_time.total_seconds() self.statistic[current_log.change_time.date()] += elapsed_time.total_seconds()
def fill_daterange(self, first, last, val=24 * 3600): def fill_daterange(self, first: date, last: date, val: int = 24 * 3600) -> dict:
""" """
Функция заполеняет диапазон дат значением val (по умолчанию val = кол-во секунд в 1 дне). Функция заполеняет диапазон дат значением val (по умолчанию val = кол-во секунд в 1 дне).
:param first: :param first: Начальная дата интервала
:param last: :param last: Последняя дата интервала
:param val: :param val: Количество секунд в одном дне
:return: :return: Статистику пользоваиеля с указанным количеством секунд в заданных днях
""" """
for day in daterange(first, last): for day in daterange(first, last):
self.statistic[day] = val self.statistic[day] = val
def clear_statistic(self): def clear_statistic(self) -> dict:
""" """
Функция осуществляет обновление всех дней Функция осуществляет обновление всех дней.
:return:
:return: Статистику пользователя с количеством рабочих секунд = 0
""" """
self.statistic.clear() self.statistic.clear()
self.fill_daterange(self.start_date, self.end_date + timedelta(days=1), 0) self.fill_daterange(self.start_date, self.end_date + timedelta(days=1), 0)

View File

@ -229,9 +229,14 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView):
""" """
Класс отображения страницы администратора. Класс отображения страницы администратора.
.. todo:: :param permission_required: Права доступа к странице администратора
Документация для данного класса: :type permission_required: :class:`str`
:param template_name: HTML-шаблон страницы администратора
:type template_name: :class:`str`
:param form_class: Форма страницы администратора
:type form_class: :class:`forms.AdminPageUsersForm`
:param success_url: Адрес страницы администратора
:type success_url: :class:`HttpResponseRedirect`
""" """
permission_required = 'main.has_control_access' permission_required = 'main.has_control_access'
template_name = 'pages/adm_ruleset.html' template_name = 'pages/adm_ruleset.html'
@ -240,7 +245,10 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView):
def form_valid(self, form: AdminPageUsers) -> AdminPageUsers: def form_valid(self, form: AdminPageUsers) -> AdminPageUsers:
""" """
Функция установки ролей пользователям Функция обновления страницы AdminPageUsers.
:param form: Форма страницы администратора
:return: Обновленная страница (пользователям проставлены новые статусы)
""" """
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'])
@ -250,19 +258,31 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView):
@staticmethod @staticmethod
def make_engineers(users): def make_engineers(users):
"""
Функция проходит по списку пользователей, проставляя статус "engineer".
:param users: Список пользователей
:return: Обновленный список пользователей
"""
[make_engineer(user) for user in users] [make_engineer(user) for user in users]
@staticmethod @staticmethod
def make_light_agents(users): def make_light_agents(users):
"""
Функция проходит по списку пользователей, проставляя статус "light_agent".
:param users: Список пользователей
:return: Обновленный список пользователей
"""
[make_light_agent(user) for user in users] [make_light_agent(user) for user in users]
@staticmethod @staticmethod
def count_users(users) -> tuple: def count_users(users) -> tuple:
""" """
Функция подсчета количества сотрудников с ролями "engineer" и "light_agent". Функция подсчета количества сотрудников с ролями "engineer" и "light_agent".
.. todo:: .. todo::
this func counts users from all zendesk instead of just from a model: this func counts users from all zendesk instead of just from a model:
""" """
engineers, light_agents = 0, 0 engineers, light_agents = 0, 0
for user in users: for user in users: