# 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)))