Temporary vertion with non-working enchant
This commit is contained in:
parent
10e341fcbb
commit
0a7b4fb1a7
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user