Ограничение на журналы (тем, уроков, курсов)

feature/fix_generate_pass
Andrey 8 years ago
parent 8c74f49554
commit d84fc04755
  1. 51
      course_service/courses/serializers.py
  2. 1
      course_service/courses/urls.py
  3. 30
      course_service/courses/views.py
  4. 20
      course_service/maps/serializers.py
  5. 12068
      csv/access/progress.csv
  6. 19
      csv/load_perm.py
  7. 13
      storage/serializers.py
  8. 12
      storage/urls.py
  9. 30
      storage/views.py

@ -1,31 +1,26 @@
from rest_framework import serializers
from course_service.courses.models import Course, Vertex, Topic
from course_service.maps.serializers import CourseRouteSerializer
class TopicSerializer(serializers.ModelSerializer):
children = serializers.SerializerMethodField()
class Meta:
model = Topic
exclude = ['id']
@staticmethod
def get_children(self):
return [MiniVertexSerializer(i).data for i in self.vertex_set.all()]
class MiniVertexSerializer(serializers.ModelSerializer):
object = serializers.SerializerMethodField()
type = serializers.SerializerMethodField()
class Meta:
model = Vertex
fields = ('id', 'title', 'type', 'object', 'free')
@staticmethod
def get_object(self):
if self.content_type.model == 'topic':
return TopicSerializer(self.content_object).data
return False
@staticmethod
def get_type(self):
return self.content_type.model
fields = ('id', 'title', 'free')
class VertexSerializer(MiniVertexSerializer):
@ -41,37 +36,31 @@ class CourseInitSerializer(serializers.ModelSerializer):
fields = ['title', 'slug']
class CourseListSerializer(serializers.ModelSerializer):
statistic = serializers.SerializerMethodField()
level = serializers.SerializerMethodField()
direction = serializers.SerializerMethodField()
class CourseTreeSerializer(serializers.ModelSerializer):
tree = serializers.SerializerMethodField()
route = serializers.SerializerMethodField()
class Meta:
model = Course
fields = ['id', 'title', 'statistic', 'public', 'hidden',
'level', 'direction', 'image', 'slug']
@staticmethod
def get_statistic(self):
return self.get_statistic()
fields = ('tree', 'route', 'slug')
@staticmethod
def get_level(self):
return self.get_level_display()
def get_tree(self):
return [TopicSerializer(i).data for i in self.topic_set.all()]
@staticmethod
def get_direction(self):
return self.get_direction_display()
def get_route(self):
return CourseRouteSerializer(self.route).data
class CourseDetailSerializer(serializers.ModelSerializer):
level = serializers.SerializerMethodField()
direction = serializers.SerializerMethodField()
teachers = serializers.SerializerMethodField()
statistic = serializers.SerializerMethodField()
class Meta:
model = Course
fields = '__all__'
exclude = ('route', 'id')
@staticmethod
def get_level(self):
@ -82,5 +71,5 @@ class CourseDetailSerializer(serializers.ModelSerializer):
return self.get_direction_display()
@staticmethod
def get_teachers(self):
return [teacher.email for teacher in self.teachers.all()]
def get_statistic(self):
return self.get_statistic()

@ -3,7 +3,6 @@ from django.conf.urls import url
from course_service.courses import views as views
urlpatterns = [
url(r'detail/([0-9]{1,99})/$', views.CourseDetailView.as_view()),
url(r'vertex/([0-9]{1,99})/$', views.VertexDetail.as_view()),
url(r'tree/(?P<slug>.+)/$', views.TreeView.as_view()),
url(r'^$', views.CourseListView.as_view()),

@ -3,9 +3,7 @@ from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from access.models import Progress
from course_service.courses.serializers import CourseDetailSerializer, CourseListSerializer, VertexSerializer
from course_service.maps.serializers import CourseMapSerializer
from course_service.courses.serializers import CourseDetailSerializer, CourseTreeSerializer, VertexSerializer
class TreeView(APIView):
@ -16,29 +14,7 @@ class TreeView(APIView):
try:
course = Course.objects.get(slug=slug)
except Course.DoesNotExist:
return Response("Course doesn't exist", status=404)
if request.user.is_authenticated():
try:
route = course.progress_set.get(user=request.user).get_template()
return Response(CourseMapSerializer(route.get_first()).data, self.status_code)
except Progress.DoesNotExist:
pass
return Response(CourseMapSerializer(course.route.get_first()).data, self.status_code)
class CourseDetailView(APIView):
renderer_classes = (JSONRenderer,)
status_code = 200
def get(self, request, pk):
if not request.user.is_authenticated() and request.user.in_role in ['A']:
return Response("Course detail access only for admin users", status=403)
try:
return Response(CourseDetailSerializer(Course.objects.get(id=pk)).data, self.status_code)
return Response(CourseTreeSerializer(course).data, self.status_code)
except Course.DoesNotExist:
return Response("Course doesn't exist", status=404)
@ -52,7 +28,7 @@ class CourseListView(APIView):
return Response(CourseDetailSerializer(course).data, status=self.status_code)
def get(self, request):
res = [CourseListSerializer(course).data for course in Course.objects.all()]
res = [CourseDetailSerializer(course).data for course in Course.objects.all()]
return Response(res, self.status_code)

@ -12,26 +12,16 @@ class CourseRouteSerializer(serializers.ModelSerializer):
@staticmethod
def get_maps(self):
return [CourseMapSerializer(i).data for i in self.get_maps()][0]
return [CourseMapSerializer(i.map_course).data for i in self.pivotcoursemap_set.all()]
class CourseMapSerializer(serializers.ModelSerializer):
tree = serializers.SerializerMethodField()
course_slug = serializers.SerializerMethodField()
map_name = serializers.SerializerMethodField()
vertexes = serializers.SerializerMethodField()
class Meta:
model = CourseMap
fields = ('tree', 'course_slug', 'map_name')
fields = ('name', 'vertexes')
@staticmethod
def get_tree(self):
return self.get_tree()
@staticmethod
def get_course_slug(self):
return self.course.slug
@staticmethod
def get_map_name(self):
return self.name
def get_vertexes(self):
return [i.vertex.token for i in self.pivotvertex_set.all()]

File diff suppressed because one or more lines are too long

@ -29,13 +29,20 @@ if __name__ == '__main__':
user = get_user_model().objects.get(id=row['user'])
except get_user_model().DoesNotExist:
print(row['user'])
break
continue
p = Progress.objects.create(
user=user,
route=route,
teacher=get_user_model().objects.get(id=row['teacher']),
)
try:
p = Progress.objects.get(
user=user,
route=route,
teacher=get_user_model().objects.get(id=row['teacher']),
)
except Progress.DoesNotExist:
p = Progress.objects.create(
user=user,
route=route,
teacher=get_user_model().objects.get(id=row['teacher']),
)
pivots = json.loads(row['success'])
for pivot in pivots:

@ -1,10 +1,17 @@
from rest_framework import serializers
from storage.models import File
from storage.models import File, Comment
class StorageSerializer(serializers.ModelSerializer):
class FileSerializer(serializers.ModelSerializer):
class Meta:
model = File
exclude = ('id',)
fields = ('original', 'name',)
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
exclude = ('id', 'key',)

@ -1,13 +1,7 @@
from storage import files_api
from django.conf.urls import url
from storage import views
urlpatterns = [
url(r'upload_file/$', files_api.upload_files),
url(r'check_file_load/$', files_api.check_file_load),
url(r'send_crop_data/$', files_api.crop_image),
url(r'get_image_url/$', files_api.get_image_url),
url(r'get_current_image_clip_id/$', files_api.get_current_image_clip_id),
url(r'check_file_error/$', files_api.check_file_error),
url(r'del_image/$', files_api.del_image),
url(r'get_file_sketch/$', files_api.get_file_sketch)
url(r'bills/(?P<pk>.+)/$', views.FileDetailView.as_view()),
url(r'bills/(?P<pk>.+)/$', views.CommentDetailView.as_view()),
]

@ -0,0 +1,30 @@
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from storage.models import File, Comment
from storage.serializers import FileSerializer, CommentSerializer
class FileDetailView(APIView):
renderer_classes = (JSONRenderer,)
status_code = 200
@staticmethod
def get(request, pk):
try:
return Response(FileSerializer(File.objects.get(key=pk)).data, status=200)
except File.DoesNotExist:
return Response("File not found", status=404)
class CommentDetailView(APIView):
renderer_classes = (JSONRenderer,)
status_code = 200
@staticmethod
def get(request, pk):
try:
return Response(CommentSerializer(Comment.objects.get(key=pk)).data, status=200)
except Comment.DoesNotExist:
return Response("Comment not found", status=404)
Loading…
Cancel
Save