update user api

feature/fix_generate_pass
Andrey 8 years ago
parent fdeed92ab6
commit 7b56bf0d50
  1. 2
      access/urls.py
  2. 28
      access/views.py
  3. 3
      courses/models.py
  4. 0
      progress/management/__init__.py
  5. 114
      progress/management/commands/set_progress.py
  6. 2
      progress/views.py

@ -5,8 +5,8 @@ from access import views
urlpatterns = [
url(r'teachers/$', views.TeacherListView.as_view()),
url(r'detail/(?P<out_key>[0-9A-Fa-f-]+)/$', views.DetailUserView.as_view()),
url(r'detail/$', views.DetailUserView.as_view()),
url(r'detail/([0-9]{1,99})/$', views.DetailUserView.as_view()),
url(r'info/(?P<out_key>[0-9A-Fa-f-]+)/$', views.MinUserView.as_view()),
url(r'guard/(?P<pk>[0-9]{1,99})/(?P<page>.+)/$', progress.views.UserGuardView.as_view()),
url(r'find/$', views.FindUserView.as_view()),

@ -12,8 +12,9 @@ from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from access.models.other import Invite, ResetPassword
from access.models.other import Invite, ResetPassword, Account
from access.serializers import UserSelfSerializer, UserSearchSerializer
from lms.tools import decode_base64
class TeacherListView(APIView):
@ -120,18 +121,35 @@ class DetailUserView(APIView):
renderer_classes = (JSONRenderer,)
@staticmethod
def post(request, pk=None):
if pk is None:
def post(request, out_key=None):
if out_key is None:
return Response("out_key mast be set", status=400)
if not request.user.out_key == pk:
return Response("You can't change this profile", status=403)
# if not request.user.out_key == out_key:
# return Response("You can't change this profile", status=403)
user = request.user
f_n = request.JSON.get('first_name', None)
l_n = request.JSON.get('last_name', None)
if not f_n is None:
user.first_name = f_n
if not l_n is None:
user.first_name = l_n
user.save()
acc = request.JSON.get('account', None)
acc['gender'] = 0 if acc['gender'] == "undefined" else 1 if acc['gender'] == "male" else 2
if acc['photo']:
acc['photo'] = decode_base64(acc['photo'], 'users/%s/ava.png' % user.out_key)
Account.objects.filter(owner=user).update(**acc)
serialized_user = UserSelfSerializer(request.user).data
serialized_user['is_i'] = True

@ -124,6 +124,9 @@ class Course(models.Model):
def __str__(self):
return self.title
def get_teacher(self):
return self.teacher_tokens[0]
def get_statistic(self):
return {
'topic_count': self.topic_set.all().count(),

@ -0,0 +1,114 @@
from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand, CommandError
from progress.models import Progress, ProgressLesson
from courses.models import Course
from django.db.models import Q
import datetime
class Command(BaseCommand):
help = 'Добавляет 1 или нескольких юзеров в указанные группы'
def add_arguments(self, parser):
parser.add_argument(
'--u',
type=str,
dest='user_email',
help='Емейл пользователя'
)
parser.add_argument(
'--c',
type=str,
dest='course_slug',
help='Слаг курса'
)
parser.add_argument(
'--t',
type=int,
dest='topic_idx',
help='Порядковый номер темы'
)
parser.add_argument(
'--l',
type=int,
dest='lesson_idx',
help='Порядковый номер урока'
)
parser.add_argument(
'--f',
type=bool,
dest='force_start',
help='Игнорировать предупреждения'
)
def handle(self, *args, **options):
try:
student = get_user_model().objects.get(email=options['user_email'])
try:
course = Course.objects.get(slug=options['course_slug'])
try:
progress = Progress.objects.get(course_token=course.token, user=student)
except Progress.DoesNotExist:
if not options['force_start']:
raise CommandError(
"Пользователь %s, не проходит курс %s" % (student.get_full_name(), course.title))
teacher = get_user_model().objects.get(out_key=course.get_teacher())
progress = Progress.objects.create(course_token=course.token, user=student, teacher=teacher)
token_list = []
lesson_list = []
for topic_idx, topic in enumerate(course.topic_set.all()):
topic_find = topic_idx == (options['topic_idx'] - 1)
for lesson_idx, lesson in enumerate(topic.lesson_set.all()):
token_list.append(lesson.token)
lesson_list.append(lesson)
if lesson_idx == (options['lesson_idx'] - 1) and topic_find:
break
if topic_find:
break
if progress.progresslesson_set.filter(
~Q(lesson_token__in=token_list)).exists() and not options['force_start']:
raise CommandError(
"Пользователь %s, прошёл дальше по курсу %s" % (student.get_full_name(), course.title))
progress.progresslesson_set.filter(~Q(lesson_token__in=token_list)).delete()
for lesson_idx, lesson_token in enumerate(token_list[:-1]):
try:
pl = ProgressLesson.objects.get(progress__user=student, lesson_token=lesson_token)
if pl.finish_date is None:
pl.finish_date = datetime.datetime.now()
pl.status = 'done'
pl.save()
except ProgressLesson.DoesNotExist:
ProgressLesson.objects.create(
progress=progress,
lesson_token=lesson_token,
checker=progress.teacher if lesson_list[lesson_idx].is_hm else student,
status="done",
finish_date=datetime.datetime.now()
)
try:
pl = ProgressLesson.objects.get(progress=progress, lesson_token=token_list[-1:][0])
if pl.status == "done":
pl.status = "start"
pl.finish_date = None
pl.save()
except ProgressLesson.DoesNotExist:
pl = ProgressLesson.objects.create(
progress=progress,
lesson_token=token_list[-1:][0],
checker=progress.teacher if lesson_list[-1:][0].is_hm else student
)
except Course.DoesNotExist:
print("""Course with slug "%s" doesn't exist""" % options['course_slug'])
except get_user_model().DoesNotExist:
print("""user with email: "%s" not found""" % options['user_email'])

@ -48,7 +48,7 @@ class CourseProgressDynamicView(APIView):
progresses = Progress.objects.filter(course_token=token)
res = {}
for i in progresses:
key = i.progresslesson_set.filter(status="done").count()
key = i.progresslesson_set.filter(status="done").count() + 1
res[key] = 1 if not key in res.keys() else res[key] + 1
return Response(res, status=200)
except ValidationError:

Loading…
Cancel
Save