Beispiel #1
0
    def is_valid(self, request, document_object):
        # import ipdb; pdb.set_trace()
        if self.is_bound and not self.errors:
            # если форма из UpdateView
            if document_object:
                if self.changed_data:
                    document_object.update(self.cleaned_data)
                    document_object.save()
                    gdrive = GDrive(request.session["credentials"])

                    gdrive.update_file(
                        title=document_object.title,
                        description=document_object.title,
                        mime_type=document_object.doc_type,
                        file_id=document_object.gd_id
                    )

                    if set(DOCUMENT_USER_FIELDS) & set(self.changed_data):
                        gdrive.rewrite_permissions(
                            file_id=document_object.gd_id,
                            readers=document_object.reader_list.all(),
                            editors=document_object.editor_list.all()
                        )
                return True
            # если форма из CreateView
            else:
                instance = self.save(commit=False)
                instance.owner = request.user
                instance.save()
                self.save_m2m()

                gdrive = GDrive(request.session["credentials"])

                file = gdrive.create_file(
                    title=instance.title,
                    description=instance.description,
                    mime_type=instance.doc_type,
                )

                instance.gd_id = file["id"]
                instance.url = file["alternateLink"]

                if instance.reader_list or instance.editor_list:
                    gdrive.create_readers_and_editors(
                        file_id=file["id"],
                        readers=instance.reader_list.all(),
                        editors=instance.editor_list.all()
                    )
                instance.save()
            return True
        else:
            return False