diff --git a/file_link/serializers.py b/file_link/serializers.py index 099899f..417f33c 100644 --- a/file_link/serializers.py +++ b/file_link/serializers.py @@ -2,7 +2,9 @@ import os import zipfile import time from django.conf import settings +from django.core.files import File from rest_framework import serializers +from django.shortcuts import get_object_or_404 from subjects.serializers import TagSerializer from topics.serializers import TopicSerializer @@ -10,6 +12,10 @@ from pendencies.serializers import PendenciesSerializer from students_group.serializers import StudentsGroupSerializer from users.serializers import UserBackupSerializer +from subjects.models import Tag +from topics.models import Topic, Resource +from pendencies.models import Pendencies + from .models import FileLink class SimpleFileLinkSerializer(serializers.ModelSerializer): @@ -55,6 +61,67 @@ class SimpleFileLinkSerializer(serializers.ModelSerializer): exclude = ('students', 'groups',) validators = [] + def create(self, data): + topic = data['topic'] + + file_link = None + + if not topic["id"] is None: + if topic['id'] == "": + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"]) + + if topic_exist.exists(): + topic = topic_exist[0] + else: + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order']) + + data["topic"] = topic + else: + data["topic"] = get_object_or_404(Topic, id = topic["id"]) + + + f = open(os.path.join(settings.MEDIA_ROOT, data["file_content"]), encoding="latin-1") + file = File(f) + + data["file_content"] = file + + file_link_data = data + + pendencies = file_link_data["pendencies_resource"] + del file_link_data["pendencies_resource"] + + file_link = FileLink() + file_link.name = file_link_data["name"] + file_link.brief_description = file_link_data["brief_description"] + file_link.show_window = file_link_data["show_window"] + file_link.all_students = file_link_data["all_students"] + file_link.visible = file_link_data["visible"] + file_link.order = file_link_data["order"] + file_link.topic = file_link_data["topic"] + file_link.file_content = file_link_data["file_content"] + + file_link.save() + + tags = data["tags"] + + for tag in tags: + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) + + file_link.tags.add(tag) + + resource = get_object_or_404(Resource, id = file_link.id) + + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) + + return file_link + + def update(self, instance, data): + return instance + class CompleteFileLinkSerializer(serializers.ModelSerializer): file_content = serializers.CharField(required = False, allow_blank = True) topic = TopicSerializer() diff --git a/goals/serializers.py b/goals/serializers.py index 529f8a2..abe232f 100644 --- a/goals/serializers.py +++ b/goals/serializers.py @@ -1,4 +1,5 @@ from rest_framework import serializers +from django.shortcuts import get_object_or_404 from subjects.serializers import TagSerializer from topics.serializers import TopicSerializer @@ -6,6 +7,10 @@ from pendencies.serializers import PendenciesSerializer from students_group.serializers import StudentsGroupSerializer from users.serializers import UserBackupSerializer +from subjects.models import Tag +from topics.models import Topic, Resource +from pendencies.models import Pendencies + from .models import Goals, GoalItem class GoalItemSerializer(serializers.ModelSerializer): @@ -28,6 +33,68 @@ class SimpleGoalSerializer(serializers.ModelSerializer): model = Goals exclude = ('students', 'groups',) + def create(self, data): + topic = data['topic'] + + goals = None + + if not topic["id"] is None: + if topic['id'] == "": + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"]) + + if topic_exist.exists(): + topic = topic_exist[0] + else: + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order']) + + data["topic"] = topic + else: + data["topic"] = get_object_or_404(Topic, id = topic["id"]) + + goals_data = data + + pendencies = goals_data["pendencies_resource"] + del goals_data["pendencies_resource"] + + goal_items = goals_data["item_goal"] + del goals_data["item_goal"] + + goals = Goals() + goals.name = goals_data["name"] + goals.brief_description = goals_data["brief_description"] + goals.show_window = goals_data["show_window"] + goals.all_students = goals_data["all_students"] + goals.visible = goals_data["visible"] + goals.order = goals_data["order"] + goals.topic = goals_data["topic"] + goals.presentation = goals_data["presentation"] + goals.limit_submission_date = goals_data["limit_submission_date"] + + goals.save() + + tags = data["tags"] + + for tag in tags: + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) + + goals.tags.add(tag) + + resource = get_object_or_404(Resource, id = goals.id) + + for item in goal_items: + GoalItem.objects.create(goal = goals, **item) + + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) + + return goals + + def update(self, instance, data): + return instance + class CompleteGoalSerializer(serializers.ModelSerializer): topic = TopicSerializer() tags = TagSerializer(many = True) diff --git a/links/serializers.py b/links/serializers.py index 23deacc..0d52954 100644 --- a/links/serializers.py +++ b/links/serializers.py @@ -1,4 +1,5 @@ from rest_framework import serializers +from django.shortcuts import get_object_or_404 from subjects.serializers import TagSerializer from topics.serializers import TopicSerializer @@ -6,6 +7,10 @@ from pendencies.serializers import PendenciesSerializer from students_group.serializers import StudentsGroupSerializer from users.serializers import UserBackupSerializer +from subjects.models import Tag +from topics.models import Topic, Resource +from pendencies.models import Pendencies + from .models import Link class SimpleLinkSerializer(serializers.ModelSerializer): @@ -22,6 +27,61 @@ class SimpleLinkSerializer(serializers.ModelSerializer): model = Link exclude = ('students', 'groups',) + def create(self, data): + topic = data['topic'] + + link = None + + if not topic["id"] is None: + if topic['id'] == "": + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"]) + + if topic_exist.exists(): + topic = topic_exist[0] + else: + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order']) + + data["topic"] = topic + else: + data["topic"] = get_object_or_404(Topic, id = topic["id"]) + + link_data = data + + pendencies = link_data["pendencies_resource"] + del link_data["pendencies_resource"] + + link = Link() + link.name = link_data["name"] + link.brief_description = link_data["brief_description"] + link.show_window = link_data["show_window"] + link.all_students = link_data["all_students"] + link.visible = link_data["visible"] + link.order = link_data["order"] + link.topic = link_data["topic"] + link.link_url = link_data["link_url"] + + link.save() + + tags = data["tags"] + + for tag in tags: + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) + + link.tags.add(tag) + + resource = get_object_or_404(Resource, id = link.id) + + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) + + return link + + def update(self, instance, data): + return instance + class CompleteLinkSerializer(serializers.ModelSerializer): topic = TopicSerializer() tags = TagSerializer(many = True) diff --git a/pdf_file/serializers.py b/pdf_file/serializers.py index 52b7363..2010200 100644 --- a/pdf_file/serializers.py +++ b/pdf_file/serializers.py @@ -1,4 +1,10 @@ +import os +import zipfile +import time +from django.conf import settings +from django.core.files import File from rest_framework import serializers +from django.shortcuts import get_object_or_404 from subjects.serializers import TagSerializer from topics.serializers import TopicSerializer @@ -6,6 +12,10 @@ from pendencies.serializers import PendenciesSerializer from students_group.serializers import StudentsGroupSerializer from users.serializers import UserBackupSerializer +from subjects.models import Tag +from topics.models import Topic, Resource +from pendencies.models import Pendencies + from .models import PDFFile class SimplePDFFileSerializer(serializers.ModelSerializer): @@ -23,20 +33,20 @@ class SimplePDFFileSerializer(serializers.ModelSerializer): files = self.context.get('files', None) if files: - file_path = os.path.join(settings.MEDIA_ROOT, data["file_content"]) + file_path = os.path.join(settings.MEDIA_ROOT, data["file"]) if os.path.isfile(file_path): dst_path = os.path.join(settings.MEDIA_ROOT, "tmp") - path = files.extract(data["file_content"], dst_path) + path = files.extract(data["file"], dst_path) - new_name = "files/file_" + str(time.time()) + os.path.splitext(data["file_content"])[1] + new_name = "files/file_" + str(time.time()) + os.path.splitext(data["file"])[1] os.rename(os.path.join(dst_path, path), os.path.join(settings.MEDIA_ROOT, new_name)) - data["file_content"] = new_name + data["file"] = new_name else: - path = files.extract(data["file_content"], settings.MEDIA_ROOT) + path = files.extract(data["file"], settings.MEDIA_ROOT) return data @@ -44,6 +54,67 @@ class SimplePDFFileSerializer(serializers.ModelSerializer): model = PDFFile exclude = ('students', 'groups',) + def create(self, data): + topic = data['topic'] + + pdf = None + + if not topic["id"] is None: + if topic['id'] == "": + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"]) + + if topic_exist.exists(): + topic = topic_exist[0] + else: + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order']) + + data["topic"] = topic + else: + data["topic"] = get_object_or_404(Topic, id = topic["id"]) + + + f = open(os.path.join(settings.MEDIA_ROOT, data["file"]), encoding="latin-1") + file = File(f) + + data["file"] = file + + pdf_data = data + + pendencies = pdf_data["pendencies_resource"] + del pdf_data["pendencies_resource"] + + pdf = PDFFile() + pdf.name = pdf_data["name"] + pdf.brief_description = pdf_data["brief_description"] + pdf.show_window = pdf_data["show_window"] + pdf.all_students = pdf_data["all_students"] + pdf.visible = pdf_data["visible"] + pdf.order = pdf_data["order"] + pdf.topic = pdf_data["topic"] + pdf.file = pdf_data["file"] + + pdf.save() + + tags = data["tags"] + + for tag in tags: + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) + + pdf.tags.add(tag) + + resource = get_object_or_404(Resource, id = pdf.id) + + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) + + return pdf + + def update(self, instance, data): + return instance + class CompletePDFFileSerializer(serializers.ModelSerializer): file = serializers.CharField(required = False, allow_blank = True) topic = TopicSerializer() diff --git a/subjects/views.py b/subjects/views.py index 4ffc051..e456666 100644 --- a/subjects/views.py +++ b/subjects/views.py @@ -907,9 +907,6 @@ def realize_restore(request, subject): serial = SimpleYTVideoSerializer(data = line, many = True, context = {'subject': subject}) serial.is_valid() - print(serial.errors) - print("\n") - print(serial.validated_data) - print("\n\n\n") + serial.save() return JsonResponse({'message': 'ok'}) \ No newline at end of file diff --git a/topics/serializers.py b/topics/serializers.py index e4f018f..5d04f03 100644 --- a/topics/serializers.py +++ b/topics/serializers.py @@ -14,14 +14,16 @@ class TopicSerializer(serializers.ModelSerializer): topic = Topic.objects.filter(subject = subject, name__unaccent__iexact = data["name"]) if topic.exists(): - data = topic[0] + data = topic[0].__dict__ else: topic = Topic.objects.filter(subject = subject, repository = True) if topic.exists(): - data = topic[0] + data = topic[0].__dict__ else: data["id"] = "" + data["subject"] = subject + data["order"] = Topic.objects.filter(subject = subject).count() + 1 return data diff --git a/webpage/serializers.py b/webpage/serializers.py index c44f30f..b9f5387 100644 --- a/webpage/serializers.py +++ b/webpage/serializers.py @@ -1,4 +1,5 @@ from rest_framework import serializers +from django.shortcuts import get_object_or_404 from subjects.serializers import TagSerializer from topics.serializers import TopicSerializer @@ -6,6 +7,10 @@ from pendencies.serializers import PendenciesSerializer from students_group.serializers import StudentsGroupSerializer from users.serializers import UserBackupSerializer +from subjects.models import Tag +from topics.models import Topic, Resource +from pendencies.models import Pendencies + from .models import Webpage class SimpleWebpageSerializer(serializers.ModelSerializer): @@ -22,6 +27,61 @@ class SimpleWebpageSerializer(serializers.ModelSerializer): model = Webpage exclude = ('students', 'groups',) + def create(self, data): + topic = data['topic'] + + webpage = None + + if not topic["id"] is None: + if topic['id'] == "": + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"]) + + if topic_exist.exists(): + topic = topic_exist[0] + else: + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order']) + + data["topic"] = topic + else: + data["topic"] = get_object_or_404(Topic, id = topic["id"]) + + webpage_data = data + + pendencies = webpage_data["pendencies_resource"] + del webpage_data["pendencies_resource"] + + webpage = Webpage() + webpage.name = webpage_data["name"] + webpage.brief_description = webpage_data["brief_description"] + webpage.show_window = webpage_data["show_window"] + webpage.all_students = webpage_data["all_students"] + webpage.visible = webpage_data["visible"] + webpage.order = webpage_data["order"] + webpage.topic = webpage_data["topic"] + webpage.content = webpage_data["content"] + + webpage.save() + + tags = data["tags"] + + for tag in tags: + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) + + webpage.tags.add(tag) + + resource = get_object_or_404(Resource, id = webpage.id) + + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) + + return webpage + + def update(self, instance, data): + return instance + class CompleteWebpageSerializer(serializers.ModelSerializer): topic = TopicSerializer() tags = TagSerializer(many = True) diff --git a/youtube_video/serializers.py b/youtube_video/serializers.py index ad02287..5d728a3 100644 --- a/youtube_video/serializers.py +++ b/youtube_video/serializers.py @@ -1,4 +1,5 @@ from rest_framework import serializers +from django.shortcuts import get_object_or_404 from subjects.serializers import TagSerializer from topics.serializers import TopicSerializer @@ -6,6 +7,10 @@ from pendencies.serializers import PendenciesSerializer from students_group.serializers import StudentsGroupSerializer from users.serializers import UserBackupSerializer +from subjects.models import Tag +from topics.models import Topic, Resource +from pendencies.models import Pendencies + from .models import YTVideo class SimpleYTVideoSerializer(serializers.ModelSerializer): @@ -22,6 +27,62 @@ class SimpleYTVideoSerializer(serializers.ModelSerializer): model = YTVideo exclude = ('students', 'groups',) + def create(self, data): + topic = data['topic'] + + ytvideo = None + + if not topic["id"] is None: + if topic['id'] == "": + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"]) + + if topic_exist.exists(): + topic = topic_exist[0] + else: + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order']) + + data["topic"] = topic + else: + data["topic"] = get_object_or_404(Topic, id = topic["id"]) + + + ytvideo_data = data + + pendencies = ytvideo_data["pendencies_resource"] + del ytvideo_data["pendencies_resource"] + + ytvideo = YTVideo() + ytvideo.name = ytvideo_data["name"] + ytvideo.brief_description = ytvideo_data["brief_description"] + ytvideo.show_window = ytvideo_data["show_window"] + ytvideo.all_students = ytvideo_data["all_students"] + ytvideo.visible = ytvideo_data["visible"] + ytvideo.order = ytvideo_data["order"] + ytvideo.topic = ytvideo_data["topic"] + ytvideo.url = ytvideo_data["url"] + + ytvideo.save() + + tags = data["tags"] + + for tag in tags: + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) + + ytvideo.tags.add(tag) + + resource = get_object_or_404(Resource, id = ytvideo.id) + + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) + + return ytvideo + + def update(self, instance, data): + return instance + class CompleteYTVideoSerializer(serializers.ModelSerializer): topic = TopicSerializer() tags = TagSerializer(many = True) -- libgit2 0.21.2