add popup See merge request !4remotes/origin/pm_task_31703
commit
a4fdc5d93e
7 changed files with 534 additions and 1 deletions
@ -0,0 +1,62 @@ |
||||
#! coding: utf-8 |
||||
|
||||
import os |
||||
import django |
||||
import sys |
||||
import os |
||||
|
||||
from datetime import datetime |
||||
|
||||
sys.path.append("/var/www/skillbox") |
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") |
||||
django.setup() |
||||
|
||||
from lms.settings import BASE_DIR |
||||
from courses.models import Course |
||||
from finance.models import Price |
||||
from journals.models import TeacherJ, check_journal |
||||
|
||||
def check_course_journal(course_id): |
||||
print('===========\nКурс: %s\n==============\n' % Course.objects.get(id=course_id).title) |
||||
|
||||
print('Начало проверки журнала курса') |
||||
global_start = start = datetime.now() |
||||
course = Course.objects.get(id=course_id) |
||||
course.build_map() |
||||
finish = datetime.now() |
||||
print('Конец проверки журнала курса. Длительность: %s мсек\n' % (finish-start).microseconds) |
||||
|
||||
print('Начало проверки услуг') |
||||
start = datetime.now() |
||||
all = Price.objects.filter(by_time=0, post_fire=0, course__id=course_id).count() |
||||
print('Количество услуг на проверку: %s' % all) |
||||
for i in Price.objects.filter(by_time=0, post_fire=0, course__id=course_id): |
||||
i.check_points() |
||||
finish = datetime.now() |
||||
print('Конец проверки услуг. Длительность: %s мсек\n' % (finish-start).microseconds) |
||||
|
||||
print('Начало очистки двойных журналов') |
||||
start = datetime.now() |
||||
os.system('python clean_twice_course_journals.py %s' % course_id) |
||||
finish = datetime.now() |
||||
print('Конец очистки двойных журналов. Длительность: %s\n' % (finish-start).microseconds) |
||||
|
||||
print('Начало проверки журналов') |
||||
all = TeacherJ.objects.filter(progress__gt=0, course__id=course_id).count() |
||||
print('Количество журналов на проверку: %s' % all) |
||||
for i in TeacherJ.objects.filter(progress__gt=0, course__id=course_id).order_by('-id'): |
||||
check_journal(i, from_console=True) |
||||
print('Конец проверки журналов. Длительность: %s сек\n' % (finish-start).microseconds) |
||||
|
||||
print('Начало открытия уроков курса') |
||||
start = datetime.now() |
||||
os.system('python open_course_lesson.py %s' % course_id) |
||||
finish = datetime.now() |
||||
print('Конец открытия уроков курса. Длительность: %s\n' % (finish-start).microseconds) |
||||
|
||||
global_finish = datetime.now() |
||||
print('==============================\nДлительность: %s сек' % (global_finish - global_start).seconds) |
||||
|
||||
if __name__ == "__main__": |
||||
course_id = sys.argv[1] |
||||
check_course_journal(course_id) |
||||
@ -0,0 +1,74 @@ |
||||
# coding=utf-8 |
||||
import os |
||||
import django |
||||
import sys |
||||
import datetime |
||||
|
||||
start = datetime.datetime.now() |
||||
sys.path.append("/var/www/skillbox/") |
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") |
||||
django.setup() |
||||
|
||||
from courses.models import Course, CourseTheme, Exam, Homework, Lesson |
||||
from journals.models import TeacherJ, CourseThemeJ, LessonJ, HomeworkJ, ExamJ |
||||
from access.models import User |
||||
from lms.tools import show_progress |
||||
|
||||
|
||||
def check_this(obj, collection): |
||||
if not collection.get(obj.material.id): |
||||
collection[obj.material.id] = True |
||||
else: |
||||
obj.delete() |
||||
|
||||
|
||||
def check_TJ(_course, _user): |
||||
try: |
||||
_tj = TeacherJ.objects.get(course=_course, student=_user) |
||||
except TeacherJ.DoesNotExist: |
||||
return None |
||||
except TeacherJ.MultipleObjectsReturned: |
||||
_tmp = TeacherJ.objects.filter(course=_course, student=_user).order_by('start_date') |
||||
_tj = _tmp[0] |
||||
for i in _tmp: |
||||
if i != _tj: |
||||
i.delete() |
||||
|
||||
return _tj |
||||
|
||||
course_id = sys.argv[1] |
||||
|
||||
_all = User.objects.all().count() |
||||
_n = 0 |
||||
_about_time = [] |
||||
for _user in User.objects.all(): # todo only course users |
||||
_st = datetime.datetime.now() |
||||
_course = Course.objects.filter(id=course_id) |
||||
_l = dict({i.id: False for i in Lesson.objects.filter(course=_course)}) |
||||
_h = dict({i.id: False for i in Homework.objects.filter(course=_course)}) |
||||
_e = dict({i.id: False for i in Exam.objects.filter(course=_course)}) |
||||
_t = dict({i.id: False for i in CourseTheme.objects.filter(course=_course)}) |
||||
|
||||
_tj = check_TJ(_course, _user) |
||||
|
||||
if _tj: |
||||
for _cj in CourseThemeJ.objects.filter(parent=_tj): |
||||
check_this(_cj, _t) |
||||
|
||||
for _lj in LessonJ.objects.filter(parent__parent=_tj): |
||||
check_this(_lj, _l) |
||||
|
||||
for _hj in HomeworkJ.objects.filter(parent__parent=_tj): |
||||
check_this(_hj, _h) |
||||
|
||||
for _ej in ExamJ.objects.filter(parent__parent=_tj): |
||||
check_this(_ej, _e) |
||||
|
||||
_ft = datetime.datetime.now() |
||||
_about_time.append((_ft - _st).microseconds) |
||||
_average = (((_all - _n) * (sum(_about_time) / len(_about_time)))/1000000)/60 |
||||
show_progress(_all, _n, post=' // "Удаление дуближей журналов" // Расчетное оставщееся время Этапа: {0:6.4} мин '.format(_average)) |
||||
_n += 1 |
||||
|
||||
finish = datetime.datetime.now() |
||||
print('\nTIME: %s seconds' % (finish - start).seconds) |
||||
@ -0,0 +1,199 @@ |
||||
# coding=utf-8 |
||||
import os |
||||
import django |
||||
import sys |
||||
import datetime |
||||
|
||||
sys.path.append("/var/www/skillbox") |
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") |
||||
django.setup() |
||||
|
||||
from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry |
||||
from lms.tools import show_progress |
||||
|
||||
_NEED_OPEN = LessonJ.objects.get(material__id='1154', student__email='parabellum07@gmail.com') |
||||
|
||||
_TEACHERJ_FILTER = {'progress__gte': 0} |
||||
_TEACHERJ_EXCLUDE = {'teacher': None} |
||||
|
||||
_READL_FILTER = {'f_date': None} |
||||
_READL_EXCLUDE = {'date': None} |
||||
|
||||
_SUCCESSL_FILTER = {'success': True} |
||||
_SUCCESSL_EXCLUDE = {'date': None} |
||||
|
||||
|
||||
def get_all_journals(course_id): |
||||
return TeacherJ.objects.filter(**_TEACHERJ_FILTER, course__id=course__id).exclude(**_TEACHERJ_EXCLUDE).order_by('id') |
||||
|
||||
|
||||
def get_all_journals_count(): |
||||
return TeacherJ.objects.filter(**_TEACHERJ_FILTER).exclude(**_TEACHERJ_EXCLUDE).count() |
||||
|
||||
|
||||
def get_last_lessons(__journal): |
||||
# Получить последний читаемый уроки и выполненный |
||||
_READL_FILTER['student'] = __journal.student |
||||
_READL_FILTER['material__course'] = __journal.course |
||||
_SUCCESSL_FILTER['student'] = __journal.student |
||||
_SUCCESSL_FILTER['material__course'] = __journal.course |
||||
return (LessonJ.objects.filter(**_READL_FILTER).exclude(**_READL_EXCLUDE).order_by('id').last(), |
||||
LessonJ.objects.filter(**_SUCCESSL_FILTER).exclude(**_SUCCESSL_EXCLUDE).order_by('id').last()) |
||||
|
||||
|
||||
def open_lesson_befor_this(_lessonJ): |
||||
# Погружается объект последнего журнала урока |
||||
# Получаем все уроки этого журнала |
||||
_map = CourseMap.objects.get(lesson=_lessonJ.material) |
||||
for i in CourseMap.objects.filter(course=_map.course).exclude(lesson=None): |
||||
if i.sort < _map.sort: |
||||
try: |
||||
_j = LessonJ.objects.get( |
||||
material__token=i.token, |
||||
student=_lessonJ.student, |
||||
material__course=i.course |
||||
) |
||||
except LessonJ.DoesNotExist as e: |
||||
print(e) |
||||
else: |
||||
check_to_success(_j) |
||||
|
||||
|
||||
def check_to_access(_journal): |
||||
# Проверка материала на доступ в прохождению |
||||
_journal.open_material() |
||||
|
||||
|
||||
def check_to_success(_journal): |
||||
# Проверка материала на завершенность |
||||
_journal.saw_this() |
||||
|
||||
|
||||
def check_lesson_after_hw(__journal, _target): |
||||
# Проверить - доступны ли уроки до ДЗ со статусом success |
||||
# Проверить - доступны ли видео до ДЗ не блокированного или пройденного |
||||
_last = HomeworkTry.objects.filter( |
||||
student=__journal.student, |
||||
material__course=__journal.course |
||||
).order_by('id').last() |
||||
# Если стутс - success |
||||
_candidate = None |
||||
if _last: |
||||
try: |
||||
_candidate = CourseMap.objects.get( |
||||
sort=int(CourseMap.objects.get(token=_last.material.token).sort)+1, |
||||
course=__journal.course |
||||
) |
||||
except CourseMap.DoesNotExist: |
||||
print('Ошибка получения карты журнала') |
||||
|
||||
else: |
||||
# Проверить - доступен ли журнал для чтения |
||||
if _candidate.lesson: |
||||
__candidate = LessonJ.objects.get( |
||||
material__token=_candidate.token, |
||||
student=_target.student, |
||||
material__course=__journal.course |
||||
) |
||||
check_to_access(__candidate) |
||||
|
||||
if _candidate and _candidate.lesson and \ |
||||
int(CourseMap.objects.get( |
||||
token=_target.material.token, |
||||
course=__journal.course).sort) \ |
||||
< int(_candidate.sort): |
||||
|
||||
_target = LessonJ.objects.get( |
||||
material__token=_candidate.token, |
||||
student=_target.student, |
||||
material__course=__journal.course) |
||||
print('Цель изменена: %s' % _target.material.title) |
||||
|
||||
return _target |
||||
|
||||
|
||||
def main(course_id): |
||||
start = datetime.datetime.now() |
||||
_ERRORS = set() |
||||
_WARNING = set() |
||||
#for i in open('error.log'): |
||||
# _ERRORS.add(i.strip()) |
||||
_GOOD = 0 |
||||
_now = 0 |
||||
big = [] |
||||
if _NEED_OPEN: |
||||
open_lesson_befor_this(_NEED_OPEN) |
||||
|
||||
else: |
||||
if not _ERRORS: |
||||
_journals = get_all_journals(course_id) |
||||
_jcount = get_all_journals_count() |
||||
print('Количество журналов на проверку: %s' % _jcount) |
||||
else: |
||||
_journals = list([i for i in TeacherJ.objects.filter(student__email__in=_ERRORS)]) |
||||
_jcount = len(_journals) |
||||
print('Журналы с ошибками: %s' % _jcount) |
||||
|
||||
for __journal in _journals: |
||||
_start = datetime.datetime.now() |
||||
show_progress(_jcount, _now) |
||||
print('\nЖурнал: %s' % __journal.student.email) |
||||
try: |
||||
read, success = get_last_lessons(__journal) |
||||
|
||||
except Exception as e: |
||||
print('!!! Ошибка обработки') |
||||
print(e) |
||||
if __journal.course.id == 20: |
||||
_WARNING.add(__journal.student.email) |
||||
_ERROR_MAILS = open('error.log', 'a+') |
||||
_ERROR_MAILS.write('%s\n' % __journal.student.email) |
||||
_ERROR_MAILS.close() |
||||
|
||||
else: |
||||
print('%s // %s' % (read.material.title if read else ' - ', success.material.title if success else ' - ')) |
||||
|
||||
if not success and read: |
||||
_target = read |
||||
|
||||
elif read and (int(CourseMap.objects.get(lesson=read.material).sort) > int(CourseMap.objects.get(lesson=success.material).sort)): |
||||
_target = read |
||||
|
||||
elif success: |
||||
_target = success |
||||
|
||||
else: |
||||
_target = None |
||||
|
||||
if _target: |
||||
open_lesson_befor_this(check_lesson_after_hw(__journal, _target)) |
||||
|
||||
_GOOD += 1 |
||||
|
||||
_now += 1 |
||||
_finish = datetime.datetime.now() |
||||
_time_result = (_finish - _start).seconds |
||||
print('\nTIME: %s seconds' % _time_result) |
||||
if int(_time_result) > 1: |
||||
big.append(__journal.student.email) |
||||
print('Добавлено на проверку') |
||||
|
||||
print('===========\n') |
||||
|
||||
finish = datetime.datetime.now() |
||||
print('\nTIME: %s seconds' % (finish - start).seconds) |
||||
print('Нужно обратить внимание:') |
||||
for i in _WARNING: |
||||
print(i) |
||||
#print('Самые длительные записи:') |
||||
#print(big) |
||||
if _ERRORS: |
||||
if _GOOD == _now: |
||||
print('Все ошибки исправлены') |
||||
else: |
||||
print('Количество ошибок: %s' % int(_now - _GOOD)) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
course_id = sys.argv[1] |
||||
main(course_id) |
||||
@ -0,0 +1,127 @@ |
||||
Жиров Олег, niozuki@mail.ru, 5016 |
||||
Лавриненко Светлана, svelavs@gmail.com, 4648 |
||||
Санжар Суршанов, sanzharsurshanov@gmail.com, 4749 |
||||
Моторина Екатерина, katepainter@yandex.ru, 4424 |
||||
Белонович Гаянэ, gb.gayane@gmail.com, 4747 |
||||
Злобин Иван, baho9208@mail.ru, 4569 |
||||
Киселев Сергей, kiselev_s_l@mail.ru, 5307 |
||||
Мокичев Дмитрий, dmokichev@gmail.com, 5941 |
||||
Якухина Кира, kira.yakuhina@gmail.com, 4917 |
||||
Кулаев Виктор, geiz@yandex.ru, 4795 |
||||
Зайидова Aнна, annazayidova@gmail.com, 5039 |
||||
Демосюк Екатерина, ekde@wide-web.spb.ru, 5593 |
||||
Анастасова Светлана, zvetaan@gmail.com, 4751 |
||||
Киосов Георгий, goha@kiosov.com, 5240 |
||||
Мирзаева Кира, jalalovna@yandex.ru, 5687 |
||||
Донцов Александр, alex.dntv@gmail.com, 4659 |
||||
Попов Александр, ap@ds-p.ru, 5362 |
||||
Жоламанов Айдар, pobiz@inbox.ru, 4632 |
||||
Ковальская Станислава, skovalska@mail.ru, 5597 |
||||
Исаев Дмитрий, wrusha@yandex.ru, 4634 |
||||
Павлов Иван, pavlov@complexsys.ru, 5069 |
||||
Жарков Александр, alexzarkov@gmail.com, 5657 |
||||
Тихонов Александр, 9330733@mail.ru, 4865 |
||||
Залисский Артем, artemzig@gmail.com, 6030 |
||||
Тмур Антон, anton.tmur@gmail.com, 5877 |
||||
Масленников Михаил, mmaslennikov@mail.ru, 5510 |
||||
Пешинский Евгений, jack@creo.od.ua, 5930 |
||||
Тухачевский Дмитрий, tuhachevski@gmail.com, 5911 |
||||
Копачинский Константин, fazeful@gmail.com, 6115 |
||||
Рыжков Антон, tonyavec@gmail.com, 6029 |
||||
Сипатов Андрей, madjaw@mail.ru, 296 |
||||
Литвин Максим, corpas@gmail.com, 4730 |
||||
Шульга Игорь, ishulga86@gmail.com, 5600 |
||||
Макаров Алексей, avmakarov@asuproject.ru, 6122 |
||||
Фадеева Елена, alpha5@yandex.ru, 5926 |
||||
Палий Нина, slavinanm@gmail.com, 6117 |
||||
Портнова Оксана, portnova.ok@yandex.ru, 5947 |
||||
Копылова Христиана, blood4085@inbox.ru, 6037 |
||||
Галин Олег, ogalin@aevrika.ru, 5932 |
||||
Богданова Евгения, egysakova@gmail.com, 5945 |
||||
Дёмушкин Виктор, dinozavrix@gmail.com, 5610 |
||||
Бодров Илья, feyorz@gmail.com, 4652 |
||||
Махаева Василиса, kornblumchen@yandex.ru, 5756 |
||||
Трунова Ольга , trunovaon@gmail.com, 5759 |
||||
Аплемах Антон, a@cdnvideo.ru, 6034 |
||||
Павлов Алексей, kronos2k4@gmail.com, 4514 |
||||
Манасян Георгий, gsm_elst@rambler.ru, 5939 |
||||
Umnikov Aleksandr Сергеевич, strife88@mail.ru, 5919 |
||||
Самородова Анастасия, polgolovy@gmail.com, 4736 |
||||
Лемтюгова Катерина, lemma.ka@gmail.com, 4900 |
||||
Свинин Александр Александрович, alexandersvinin@gmail.com, 4541 |
||||
Поздняков Александр Сергеевич, alexpozdnyakof@gmail.com, 5459 |
||||
Климов Василий, vklimovs@mail.ru, 6047 |
||||
Воротникова Алена, alvo_05@mail.ru, 4742 |
||||
Аникьев Ян, yanchus@mail.ru, 6041 |
||||
Энч Андрей, captainanch@ya.ru, 5936 |
||||
Вусс Ольга, lesiawuss@gmail.com, 6619 |
||||
Крюков Денис, denis.kryukov@cyberiada.com, 5976 |
||||
Пастухова Екатерина, k-pastukhova@yandex.ru, 6832 |
||||
Кубасова Екатерина, cat.kubasova@yandex.ru, 6136 |
||||
Сутырина Евгения, jeneva7@gmail.com, 6965 |
||||
Вычик Павел, pavelvch@gmail.com, 7033 |
||||
Семашко Эдуард, info@darneo.ru, 5584 |
||||
Брюханов Денис, denisbryuhanov@gmail.com, 6962 |
||||
Плахов Павел, pplahov@gmail.com, 6775 |
||||
Подгорный Евгений, sonicmails@yandex.ru, 6977 |
||||
Пионтковская Наталья, pnz_08@mail.ru, 5977 |
||||
Ганина Ольга, onimfa@mail.ru, 6867 |
||||
Коробицин Иван, korobajr@ya.ru, 5504 |
||||
Денисов Владимир, dv@ilab.kz, 6208 |
||||
Pavlovska Anastasiia, 702752@gmail.com, 5363 |
||||
Карпов Александр Юрьевич, ikarp84@gmail.com, 6646 |
||||
Афанасьев Ярослав, ya@rl.ru, 6633 |
||||
Скробот Алексей, alekseyskrobot@gmail.com, 6942 |
||||
K Sergey, 1ngeneer@mail.ru, 6032 |
||||
Мельбурн Саша, sasha.melbourne@gmail.com, 5540 |
||||
Гулин Евгений, gulin@labizum.ru, 4759 |
||||
Литвин Артем, artemich92@mail.ru, 6779 |
||||
Киреичев Игорь, wm5soft@gmail.com, 6061 |
||||
Степанов Александр, alexsteptlt@mail.ru, 6616 |
||||
Кропанев Женя, kropev@rarus.ru, 4757 |
||||
Курылев Константин, cooryliof@gmail.com, 6241 |
||||
Казарова Елена, strekozka_l@mail.ru, 8207 |
||||
Епифанов Павел, pae1@europlan.ru, 6471 |
||||
Долженков Роман, tooob52@gmail.com, 6976 |
||||
Антоневич Алексей, atree2010@gmail.com, 7169 |
||||
Burchilina Maria, merabella00@yandex.ru, 7770 |
||||
Агарзаева Марина, agarzaeva@yandex.ru, 6939 |
||||
Сидоренко Илья , ilya@iskros.com, 7564 |
||||
Китов Владислав, vlkitov@gmail.com, 6038 |
||||
Репкин Антон, tingmann@gmail.com, 5943 |
||||
Протасевич Андрей, torus.andrey@gmail.com, 6062 |
||||
Велькин Андрей, wellkin@gmail.com, 5974 |
||||
Савченко Игорь, neo-quake@yandex.ru, 6752 |
||||
Ромаметьева Евгения, zhenyusya14@gmail.com, 6063 |
||||
Щербакова Ольга, olga@adt.ru, 7769 |
||||
Пашкевич Алексей , aplusp@yandex.ru, 6328 |
||||
Бурунин Игорь, burunin@gmail.com, 7974 |
||||
Боев Максим, skp_15@mail.ru, 6966 |
||||
Сухоставская Алла, alla.sukhostavskaya@gmail.com, 6739 |
||||
Шашкова Ольга, shashnia@gmail.com, 7007 |
||||
Малахова Екатерина, kononenko.e.p@gmail.com, 6312 |
||||
Саросек Михаил, sarosekml@yandex.ru, 7026 |
||||
Царенко Илья, itsarenko@gmail.com, 6724 |
||||
Соловьева Анна, miragann@gmail.com, 7656 |
||||
Дементьев Сергей, ldvmake@gmail.com, 8219 |
||||
Борисова Ирина, i.k.borisova@gmail.com, 8362 |
||||
Макеев Сергей , makini@ya.ru, 8313 |
||||
Гук Антон, anton.m.gook@gmail.com, 8031 |
||||
Колмогоров Дмитрий, kitt.diz@gmail.com, 7217 |
||||
Фомина Елена, efomina@msk.vtb.ru, 6120 |
||||
Назарова Евгения, nazarova-evg@yandex.ru, 7666 |
||||
Сергиенко Ольга Александровна , jayalila108@mail.ru, 7275 |
||||
Зарипов Алмаз, almazzar@gmail.com, 9381 |
||||
Ахкямова Эльвира, juniperland@gmail.com, 4929 |
||||
Рубцова Ирина, beruchie@yandex.ru, 6968 |
||||
Багаммаева Мадина, galadriel2007@mail.ru, 6951 |
||||
Четвериков Юрий, yuriy.chetverikov@gmail.com, 7168 |
||||
Маклакова Мария, tuna1706@yandex.ru, 6580 |
||||
Монаков Евгений, fridays365@gmail.com, 8637 |
||||
Прохоров Алексей, alex@space-o.ru, 6436 |
||||
Зайцев Никита, nickzaytzev@gmail.com, 6635 |
||||
Кожевников Андрей, helloandrei@mail.ru, 9536 |
||||
Лисивец Юрий Станиславович, lisivets@ya.ru, 7318 |
||||
Келемзина Софья, sofiakelemzina@gmail.com, 6204 |
||||
Зорина Алина, alinazoryna@gmail.com, 5973 |
||||
Кунакулов Ахнаф, axnaf@list.ru, 7733 |
||||
Loading…
Reference in new issue