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

# 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/skillbox/")
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)))