Merge branch 'new_lms_dev(critical)' into 'new_lms_dev'

зависимости

See merge request skillbox/go.skillbox.ru!75
feature/fix_generate_pass
Andrey 8 years ago
commit 50ba6bf4af
  1. 20
      access/migrations/0004_auto_20180117_1558.py
  2. 2
      access/models/progress.py
  3. 1
      access/urls.py
  4. 34
      access/views.py
  5. 61
      csv/load_comments.py
  6. 3
      csv/load_perm.py
  7. 2
      storage/serializers.py
  8. 4
      storage/views.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-01-17 15:58
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('access', '0003_auto_20180115_1953'),
]
operations = [
migrations.AlterField(
model_name='progresslesson',
name='date',
field=models.DateTimeField(blank=True, null=True, verbose_name='Дата зачтения задания'),
),
]

@ -28,7 +28,7 @@ class ProgressLesson(models.Model):
progress = models.ForeignKey(to=Progress)
lesson_token = models.UUIDField(verbose_name="Токен урока", editable=False)
teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь",)
date = models.DateTimeField(verbose_name='Дата зачтения задания', auto_now_add=True)
date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True)
STATUSES = Choices('done', 'wait', 'fail')
status = models.CharField(choices=STATUSES, default=STATUSES.wait, max_length=20)
comment_tokens = ArrayField(models.UUIDField(verbose_name="Токен комента", editable=False), default=[])

@ -13,4 +13,5 @@ urlpatterns = [
url(r'logout/$', views.LogoutView.as_view()),
url(r'reset/$', views.ResetPasswordView.as_view()),
url(r'progress/$', views.UpdateProgress.as_view()),
url(r'progress_dynamic/(?P<token>[0-9A-Fa-f-]+)/$', views.CourseProgressDynamicView.as_view()),
]

@ -4,6 +4,7 @@ import string
from django.contrib import auth
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.core.mail import send_mail
from django.db.models import Q
from django.shortcuts import redirect
@ -239,16 +240,16 @@ class UpdateProgress(APIView):
"""
На вход обязательно передаётся параметр id (id узла).
"""
token = request.JSON.get('token', None)
course = request.JSON.get('slug', None)
if token is None or course is None:
lesson_token = request.JSON.get('lesson_token', None)
course_token = request.JSON.get('course_token', None)
if lesson_token is None or course_token is None:
return Response('Не передан слаг курса или токен урока', status=400)
try:
p = Progress.objects.get(user=request.user, course=course)
p = Progress.objects.get(user=request.user, course=course_token)
try:
pv = ProgressLesson.objects.get(
progress=p,
vertex=token,
lesson_token=lesson_token,
)
except ProgressLesson.DoesNotExist:
@ -256,9 +257,9 @@ class UpdateProgress(APIView):
date=datetime.datetime.now(),
teacher=p.teacher,
progress=p,
vertex=token,
lesson_token=lesson_token,
)
pv.status = 2
pv.status = ProgressLesson.STATUSES.done
pv.save()
return Response(ProgressLessonSerializer(pv).data, status=200)
@ -296,3 +297,22 @@ class UserGuardView(APIView):
return res_204
return res_403
class CourseProgressDynamicView(APIView):
renderer_classes = (JSONRenderer,)
@staticmethod
def get(request, token):
if request.user.is_authenticated() and request.user.is_staff:
try:
progresses = Progress.objects.filter(course_token=token)
res = {}
for i in progresses:
key = i.progresslesson_set.filter(status="done").count()
res[key] = 1 if not key in res.keys() else res[key] + 1
return Response(res, status=200)
except ValidationError:
return Response("Bad request", status=400)
return Response(status=403)

@ -15,7 +15,7 @@ django.setup()
from storage.models import Comment, File
from courses.models import Lesson
from access.models.progress import ProgressLesson
from access.models.progress import ProgressLesson, Progress
if __name__ == '__main__':
csv.field_size_limit(500 * 1024 * 1024)
@ -31,28 +31,49 @@ if __name__ == '__main__':
lesson_token=l.token,
progress__user__email=row['student'],
)
files = [File.objects.get(id=file) for file in row['files'].split("[")[1].split("]")[0].split(',')
if not file == '']
comment = Comment.objects.create(
text=row['text'],
email=row['owner__email'],
except ProgressLesson.DoesNotExist:
try:
pr = Progress.objects.create(
course_token=l.topic.course.token,
user=get_user_model().objects.get(email=row['student']),
teacher=get_user_model().objects.get(email=row['teacher']),
)
except IntegrityError:
pr = Progress.objects.get(
course_token=l.topic.course.token,
user=get_user_model().objects.get(email=row['student']),
)
p = ProgressLesson.objects.create(
lesson_token=l.token,
teacher=get_user_model().objects.get(email=row['teacher']),
progress=pr,
)
if row['status'] == 'Одобренно':
p.status = ProgressLesson.STATUSES.done
p.date = row['date']
elif row['status'] == 'Отклонено':
p.status = ProgressLesson.STATUSES.fail
else:
p.status = ProgressLesson.STATUSES.wait
files = [File.objects.get(id=file) for file in row['files'].split("[")[1].split("]")[0].split(',')
if not file == '']
p.save()
comment = Comment.objects.create(
text=row['text'],
email=row['owner__email'],
)
[comment.files.add(file) for file in files]
comment.date = row['date']
comment.save()
if row['status'] == 'Одобренно':
p.status = ProgressLesson.STATUSES.done
p.date = row['date']
p.comment_tokens.append(comment.token)
except ProgressLesson.DoesNotExist:
pass
elif row['status'] == 'Отклонено':
p.status = ProgressLesson.STATUSES.fail
p.comment_tokens.append(comment.token)
p.save()
[comment.files.add(file) for file in files]
comment.date = row['date']
comment.save()
for i in ProgressLesson.objects.filter(comment_tokens__isnull=False):
if len(i.comment_tokens) % 2 == 1:
i.status = ProgressLesson.STATUSES.wait
i.save()

@ -21,6 +21,7 @@ from courses.models import Lesson, Course
if __name__ == '__main__':
Progress.objects.all().delete()
ProgressLesson.objects.all().delete()
with open('./access/progress.csv') as progress_csv:
progress_reader = csv.DictReader(progress_csv)
for row in progress_reader:
@ -54,5 +55,5 @@ if __name__ == '__main__':
if pivot['date'] and not pivot['date'] == 'None':
pv.date = datetime.strptime(pivot['date'].split('.')[0], '%Y-%m-%d %H:%M:%S')
pv.status = 2
pv.status = ProgressLesson.STATUSES.done
pv.save()

@ -21,7 +21,7 @@ class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
exclude = ('id', 'key',)
exclude = ('id', 'token',)
@staticmethod
def get_files(self):

@ -19,7 +19,7 @@ class FileView(APIView):
for token in tokens:
try:
file_list.append(FileSerializer(File.objects.get(key=token)).data)
file_list.append(FileSerializer(File.objects.get(token=token)).data)
except File.DoesNotExist:
file_list.append({'upload': 'error'})
@ -40,7 +40,7 @@ class CommentView(APIView):
for token in tokens:
try:
comment_list.append(CommentSerializer(Comment.objects.get(key=token)).data)
comment_list.append(CommentSerializer(Comment.objects.get(token=token)).data)
except Comment.DoesNotExist:
comment_list.append({'upload': 'error'})

Loading…
Cancel
Save