Пример #1
0
    def create(self, request, *args, **kwargs):

        serializer = self.get_serializer(data=request.DATA)
        if serializer.is_valid():

            # this call consumes a lot of queries and time
            self.pre_save(serializer.object)
            self.object = serializer.save()

            # update the person and roles
            models.setMaterialPersons(self.object.id, request.DATA)

            # correct modified time to now
            self.object.modified = datetime.utcnow()

            # add the attached image manually
            self.object.image = request.FILES.get('image', None)
            self.object.save()

            # next, add all other files submitted
            material_id = self.object.material_id
            material_version = self.object.version 
            for key in request.FILES.keys():
                if key == 'image': continue
                mfile = models.MaterialFile()
                mfile.material_id = material_id 
                mfile.version = material_version
                file_content = request.FILES.get(key, None)
                mfile.mfile = file_content 
                #mfile.mfile.close()
                mfile.name = request.FILES[key].name
                mfile.description = request.DATA.get(key+'_description', '')
                mfile.mime_type = mimetypes.guess_type(
                    os.path.realpath(mfile.mfile.name))[0] or ''
                mfile.save()
            
            # add original record if having
            if request.DATA.get('original_id', ''):
                orgid = models.OriginalID()
                orgid.material_id = material_id
                orgid.original_id = request.DATA.get('original_id')
                orgid.save()

            # (module/collection) create the zip package and post to vpt
            try:
                if not request.DATA.get('export_later', 0):
                    requestMaterialPDF(self.object)
            except:
                pass

            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Пример #2
0
    def put(self, request, *args, **kwargs):
        """ Check in a material  """
        try: 
            serializer = self.get_serializer(data=request.DATA)
            response = None
            if serializer.is_valid():

                # check if valid editor or new material will be created
                sobj = serializer.object
                sobj.material_id = material_id = kwargs['mid']

                # special update or checkin?
                if request.GET.get('magic-update', None):
                    sobj.version = current_version = int(kwargs['version'])
                    res = models.deleteMaterial(material_id, current_version)
                    if not res:
                        raise   # 404
                else:
                    last_version = models.getMaterialLatestVersion(sobj.material_id)
                    try:
                        sobj.version = last_version + 1
                    except AttributeError:
                        sobj.version = 1
                        
                self.pre_save(sobj)
                self.object = serializer.save()

                # update the person and roles
                models.setMaterialPersons(self.object.id, request.DATA)

                # add the attached image manually
                self.object.image = request.FILES.get('image', None)
                self.object.save()

                # next, add all other files submitted
                material_id = self.object.material_id
                material_version = self.object.version 
                for key in request.FILES.keys():
                    if key == 'image': continue
                    mfile = models.MaterialFile()
                    mfile.material_id = material_id 
                    mfile.version = material_version
                    file_content = request.FILES.get(key, None)
                    mfile.mfile = file_content 
                    mfile.name = request.FILES[key].name
                    mfile.description = request.DATA.get(key+'_description', '')
                    mfile.mime_type = mimetypes.guess_type(
                        os.path.realpath(mfile.mfile.name))[0] or ''
                    mfile.save()

                # (module/collection) create the zip package and post to vpt
                try:
                    if not request.DATA.get('export-later', 0):
                        requestMaterialPDF(self.object)
                except:
                    pass

                response = Response(serializer.data, status=status.HTTP_201_CREATED)
            else:
                response = Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)            

            return response
        except: 
            raise404(request)