From d2ba4692004feb2d2400475c8bab6da4282347ef Mon Sep 17 00:00:00 2001 From: Zambom Date: Wed, 7 Jun 2017 00:08:54 -0300 Subject: [PATCH] Avoiding duplicate inserts when trying to restore same backup in same subject multiple times & setting returning page --- file_link/serializers.py | 88 +++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------- goals/serializers.py | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------- links/serializers.py | 84 +++++++++++++++++++++++++++++++++++++++++++++--------------------------------------- pdf_file/serializers.py | 92 +++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------- subjects/views.py | 10 +++------- webpage/serializers.py | 82 ++++++++++++++++++++++++++++++++++++++++++++-------------------------------------- youtube_video/serializers.py | 84 +++++++++++++++++++++++++++++++++++++++++++++--------------------------------------- 7 files changed, 283 insertions(+), 251 deletions(-) diff --git a/file_link/serializers.py b/file_link/serializers.py index 417f33c..bea625d 100644 --- a/file_link/serializers.py +++ b/file_link/serializers.py @@ -67,55 +67,61 @@ class SimpleFileLinkSerializer(serializers.ModelSerializer): 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 + if "subject" in topic: + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"]) 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) + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"]) + + if not r_exits.exists(): + 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"]) - data["file_content"] = file - file_link_data = data - - pendencies = file_link_data["pendencies_resource"] - del file_link_data["pendencies_resource"] + f = open(os.path.join(settings.MEDIA_ROOT, data["file_content"]), encoding="latin-1") + file = File(f) - 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"] + data["file_content"] = file - file_link.save() - - tags = data["tags"] + 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"]) + 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) + 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) + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) return file_link diff --git a/goals/serializers.py b/goals/serializers.py index abe232f..2b02029 100644 --- a/goals/serializers.py +++ b/goals/serializers.py @@ -39,56 +39,62 @@ class SimpleGoalSerializer(serializers.ModelSerializer): 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 + if "subject" in topic: + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"]) 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"]) + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"]) + + if not r_exits.exists(): + 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: - tag = get_object_or_404(Tag, id = tag["id"]) + 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) + goals.tags.add(tag) - resource = get_object_or_404(Resource, id = goals.id) + resource = get_object_or_404(Resource, id = goals.id) - for item in goal_items: - GoalItem.objects.create(goal = goals, **item) + for item in goal_items: + GoalItem.objects.create(goal = goals, **item) - for pend in pendencies: - Pendencies.objects.create(resource = resource, **pend) + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) return goals diff --git a/links/serializers.py b/links/serializers.py index 0d52954..5e44b13 100644 --- a/links/serializers.py +++ b/links/serializers.py @@ -33,49 +33,55 @@ class SimpleLinkSerializer(serializers.ModelSerializer): 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 + if "subject" in topic: + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"]) 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"]) + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"]) + + if not r_exits.exists(): + 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: - tag = get_object_or_404(Tag, id = tag["id"]) + data["topic"] = get_object_or_404(Topic, id = topic["id"]) - link.tags.add(tag) - - resource = get_object_or_404(Resource, id = link.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) + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) return link diff --git a/pdf_file/serializers.py b/pdf_file/serializers.py index 2010200..63bfcbd 100644 --- a/pdf_file/serializers.py +++ b/pdf_file/serializers.py @@ -60,55 +60,61 @@ class SimplePDFFileSerializer(serializers.ModelSerializer): 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 + if "subject" in topic: + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"]) 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"] + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"]) + + if not r_exits.exists(): + 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"]) - pdf.save() - tags = data["tags"] + f = open(os.path.join(settings.MEDIA_ROOT, data["file"]), encoding="latin-1") + file = File(f) - for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + data["file"] = file - pdf.tags.add(tag) - - resource = get_object_or_404(Resource, id = pdf.id) + 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) + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) return pdf diff --git a/subjects/views.py b/subjects/views.py index e456666..6d468aa 100644 --- a/subjects/views.py +++ b/subjects/views.py @@ -822,12 +822,6 @@ def realize_backup(request, subject): data_list.append(serializer_g.data) json.dump(data_list, file) - # json.dump(serializer_w.data, file) - # json.dump(serializer_y.data, file) - # json.dump(serializer_f.data, file) - # json.dump(serializer_l.data, file) - # json.dump(serializer_p.data, file) - # json.dump(serializer_g.data, file) file.close() @@ -909,4 +903,6 @@ def realize_restore(request, subject): serial.is_valid() serial.save() - return JsonResponse({'message': 'ok'}) \ No newline at end of file + messages.success(request, _('Backup restored successfully!')) + + return redirect(reverse_lazy('subjects:restore', kwargs = {"slug": subject})) \ No newline at end of file diff --git a/webpage/serializers.py b/webpage/serializers.py index b9f5387..48614af 100644 --- a/webpage/serializers.py +++ b/webpage/serializers.py @@ -33,49 +33,55 @@ class SimpleWebpageSerializer(serializers.ModelSerializer): 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 + if "subject" in topic: + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"]) 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"]) + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"]) + + if not r_exits.exists(): + 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: - tag = get_object_or_404(Tag, id = tag["id"]) + 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) + webpage.tags.add(tag) - resource = get_object_or_404(Resource, id = webpage.id) + resource = get_object_or_404(Resource, id = webpage.id) - for pend in pendencies: - Pendencies.objects.create(resource = resource, **pend) + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) return webpage diff --git a/youtube_video/serializers.py b/youtube_video/serializers.py index 5d728a3..9d8b905 100644 --- a/youtube_video/serializers.py +++ b/youtube_video/serializers.py @@ -33,50 +33,56 @@ class SimpleYTVideoSerializer(serializers.ModelSerializer): 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 + if "subject" in topic: + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"]) 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"]) + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"]) + + if not r_exits.exists(): + 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: - tag = get_object_or_404(Tag, id = tag["id"]) + data["topic"] = get_object_or_404(Topic, id = topic["id"]) + - ytvideo.tags.add(tag) + ytvideo_data = data - resource = get_object_or_404(Resource, id = ytvideo.id) + 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) + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) return ytvideo -- libgit2 0.21.2