You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.5 KiB
74 lines
2.5 KiB
# coding=utf-8
|
|
# Получить количество попыток сдачи ДЗ и статус ДЗ по студентам из файла
|
|
import os
|
|
import django
|
|
import sys
|
|
BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
sys.path.append("/var/www/projects/codemy/")
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
|
|
django.setup()
|
|
from access.models import User
|
|
from courses.models import Course, CourseTheme
|
|
from journals.models import HomeworkTry, HomeworkJ
|
|
|
|
print('## Отчет по теме курса')
|
|
|
|
_mails = [i.strip().lower() for i in open(os.path.join(BASEDIR, 'reports/get_theme_try_len')).readlines()]
|
|
_users = []
|
|
_no_exist = []
|
|
_result = {} # Пользователь: Попыток, статус
|
|
result_file = open('get_theme_try_len_result', 'w')
|
|
|
|
|
|
_courses = Course.objects.filter(public=True).order_by('id')
|
|
|
|
for _c in _courses:
|
|
print('{0}: {1}'.format(_c.id, _c.get_title()))
|
|
|
|
_c = input('Выберите курс: ')
|
|
_course = Course.objects.get(id=int(_c))
|
|
|
|
_themes = CourseTheme.objects.filter(course=_course).order_by('sort')
|
|
for _t in _themes:
|
|
print('{0}: {2}/{1}'.format(_t.id, _t.get_title(), _t.sort))
|
|
|
|
_t = input('Выберите тему: ')
|
|
_theme = CourseTheme.objects.get(id=int(_t))
|
|
|
|
for i in _mails:
|
|
try:
|
|
u = User.objects.get(email=i)
|
|
except User.DoesNotExist:
|
|
_no_exist.append(i)
|
|
else:
|
|
_users.append(u)
|
|
|
|
print('Не найденные пользователи:')
|
|
print(_no_exist)
|
|
|
|
print('======')
|
|
print('# Курс: {0}'.format(_course.get_title()))
|
|
print('# Тема: {0}'.format(_theme.get_title()))
|
|
print('# Пользователей в отчете: {0}'.format(len(_users)))
|
|
|
|
_average = []
|
|
for _u in _users:
|
|
_count = HomeworkTry.objects.filter(material__theme=_theme, student=_u).count()
|
|
_result[_u.email] = _count
|
|
if _count > 0:
|
|
_average.append(_count)
|
|
|
|
|
|
_result = sorted(_result.items(), key=lambda x: x[1], reverse=True)
|
|
|
|
_n = 0
|
|
for key, value in _result:
|
|
if value > 0:
|
|
_n += 1
|
|
result_file.write('{0} / {1} {2} \n'.format(key, value, HomeworkJ.objects.filter(material__theme=_theme, student__email=key).last().get_status()['title'] if HomeworkJ.objects.filter(material__theme=_theme, student__email=key).exists() else 'Не преступил'))
|
|
|
|
result_file.close()
|
|
|
|
print('Пользователей в отчете: {0}'.format(_n))
|
|
print('Среднее количество попыток, исключая нулевые: {0:4.2}'.format(sum(_average) / len(_average)))
|
|
|