Пример #1
0
 def process_upload(self, request, user_profile, input_data, template_args, noajax=False, **kwargs):
     """
     Main Multiuploader module.
     Parses data from jQuery plugin and makes database changes.
     """
     
     if request.method == 'POST':
         log.info('received POST to main multiuploader view')
 
         if request.FILES is None:
             response_data = [{"error": _('Must have files attached!')}]
             return HttpResponse(json.dumps(response_data))
 
         if not u'form_type' in request.POST:
             response_data = [{"error": _("Error when detecting form type, form_type is missing")}]
             return HttpResponse(json.dumps(response_data))
 
         signer = Signer()
 
         try:
             form_type = signer.unsign(request.POST.get(u"form_type"))
         except BadSignature:
             response_data = [{"error": _("Tampering detected!")}]
             return HttpResponse(json.dumps(response_data))
 
         form = MultiUploadForm(request.POST, request.FILES, form_type=form_type)
         
         if not form.is_valid():
             error = _("Unknown error")
 
             if "file" in form._errors and len(form._errors["file"]) > 0:
                 error = form._errors["file"][0]
 
             response_data = [{"error": error}]
             return HttpResponse(json.dumps(response_data))
         
         rfile = request.FILES[u'file']
         wrapped_file = UploadedFile(rfile)
         filename = wrapped_file.name
         file_size = wrapped_file.file.size
         
         fname, ext = os.path.splitext(filename)
         
         as_image = False
         if ext.lower() in ('.jpg', '.jpeg', '.png', '.gif'):
             as_image = True
         
         
         log.info('Got file: "%s"' % filename)
         
         itemModel = template_args.get('currentNode')
         
         fl = Item(id=get_new_uuid())
         
         fl.action = 'upload'
         fl.path = itemModel.get_url()
         
         fl.akey = user_profile.akey
         
         fl.email = user_profile.email
         fl.username = user_profile.username
         
         fl.validated = user_profile.validated
         
         fl.slug = slugify(filename)
         fl.title = filename
         fl.parent = itemModel
         
         fl.file = rfile
         
         if as_image == True:
             fl.behavior = 'image'
             fl.label = input_data.get('label', 'Image')
             fl.order = input_data.get('order', 0)
             fl.image = rfile
         else:
             # TODO
             fl.behavior = 'upload'
             fl.label = input_data.get('label', 'Fichier')
             fl.order = input_data.get('order', 0)
             # set screenshot of document or icon
             #fl.image = rfile
         
         fl.status = 'uploaded'
         fl.locale = get_language()
         
         fl.subject = 'Fichier ajoute'
         fl.message = 'Le fichier '+filename+' a ete ajoute'
         
         fl.save()
         
         thumb_url = "" #get_thumbnail(fl.file, "80x80", quality=50)
         file_link_url = "" #reverse('multiuploader_file_link', args=[fl.pk]),
         delete_url = "" #reverse('multiuploader_delete', args=[fl.pk])
         
         #generating json response array
         result = [{"id": str(fl.id),
                    "name": filename,
                    "size": file_size,
                    "url": file_link_url,
                    "thumbnail_url": thumb_url,
                    "delete_url": delete_url,
                    "delete_type": "POST", }]
         
         response_data = json.dumps(result)
         
         #checking for json data type
         #big thanks to Guy Shapiro
         
         if noajax:
             if request.META['HTTP_REFERER']:
                 redirect(request.META['HTTP_REFERER'])
         
         if "application/json" in request.META['HTTP_ACCEPT_ENCODING']:
             mimetype = 'application/json'
         else:
             mimetype = 'text/plain'
         return HttpResponse(response_data, content_type=mimetype)
     else:  # GET
         template_args['multiuploader_form'] = MultiUploadForm(form_type='default')
     
     return self.manage_item_pipe(request, user_profile, input_data, template_args, **kwargs)
     return self.render(request, template_args, **kwargs)
Пример #2
0
    def process_push(self, request, user_profile, input_data, template_args, **kwargs):
        """
        Set the notebook to articles
        """
        node = kwargs['node']
        nb = get_or_create_notebook(node)
        
        i = 0
        # if not, create one
        for cell in nb.cells:
            # check for item corresponding
            try:
                cell_id = cell.metadata.gid
            except:
                cell.metadata.gid = get_new_uuid()
                cell_id = cell.metadata.gid
            
            try:
                cell_node = Item.objects.get(id=cell_id)
            except ObjectDoesNotExist:
                cell_node = Item(id=cell_id, parent=node, **kwargs['pipe'])
            
            if cell.cell_type == 'code':
                #
                content = u''
                for output in cell.outputs:
                    if output.output_type == 'stream' and 'stream' == 'stdout':
                        content += output.get('text', u'')
                cell_node.content = content
                
                #if cell_node.content:
                #    cell_node.visible = True
                #else:
                cell_node.visible = False
                
                #if not cell_node.title:
                #    cell_node.title = 'Code'
                
                #if not cell_node.label:
                #    cell_node.label = cell_node.title
                
            elif cell.cell_type == 'markdown':
                
                #cell_node.behavior = 'view'
                #cell_node.content = '<i>markdown rendered html</i>'
                
                cell_node.visible = True
                
                cell = markdown_to_item(cell_node, ''.join(cell.source))

            cell_node.status = 'pushed'
            cell_node.order = i
            cell_node.save()
            i += 1

        save_notebook(nb, node)
        
        #
        if not node.file:
            node.file = 'resource/'+node.id+'.ipynb'
            node.save()
        
        return HttpResponseRedirect(node.get_url()+'view/')

        return self.manage_item_pipe(request, user_profile, input_data, template_args, **kwargs)