Пример #1
0
def edit_doc_keywords(window_info: WindowInfo, doc_id: int, keywords: str):
    doc = get_object_or_404(UploadDoc.query(window_info), pk=doc_id)
    doc.keywords.clear()
    for keyword in [x.strip() for x in keywords.lower().split() if x.strip()]:
        if keyword:
            doc.keywords.add(Keyword.get(keyword))
    notify(window_info, _('Saved.'), to=WINDOW, timeout=2000)
Пример #2
0
    def handle(self, *args, **options):
        # require
        user = None
        if options['user'] is not None:
            user = get_user_model().objects.get(username=options['user'])

        filename = options['filename']
        if filename.startswith('file://'):
            filename = filename[7:]
        if filename.startswith('http://') or filename.startswith('https://'):
            parsed_url = urlparse(filename)
            basename = os.path.basename(parsed_url.path)
            src_file = tempfile.NamedTemporaryFile()
            req = requests.get(filename, stream=True)
            chunk_size = 16384
            for chunk in req.iter_content(chunk_size):
                src_file.write(chunk)
        else:
            src_file = open(filename, mode='rb')
            basename = os.path.basename(filename)

        obj = UploadDoc(uid=str(uuid.uuid1()), user=user, name=options['name'] or basename)
        obj.save()
        process_uploaded_file(obj, src_file, basename)
        for keyword in options['keyword']:
            obj.keywords.add(Keyword.get(keyword.lower().strip()))
        obj.save()
Пример #3
0
def upload_doc_api(request):
    user = request.user if request.user.is_authenticated else None
    if user is None:
        return HttpResponse(_('You must be logged to upload files.\n'), status=401)
    elif request.method != 'POST':
        return HttpResponse(_('Only POST requests are allowed.\n'), status=400)
    form = UploadApiForm(request.GET)
    if not form.is_valid():
        return HttpResponse(_('You must supply filename, name and keywords in your query.\n'), status=400)
    tmp_file = tempfile.NamedTemporaryFile(mode='wb', dir=settings.FILE_UPLOAD_TEMP_DIR, delete=False)
    c = False
    chunk = request.read(32768)
    while chunk:
        tmp_file.write(chunk)
        c = True
        chunk = request.read(32768)
    tmp_file.flush()
    if not c:
        os.remove(tmp_file.name)
        return HttpResponse(_('Empty file. You must POST a valid file.\n'), status=400)
    # ok, we have the tmp file

    existing_objs = list(UploadDoc.query(request).filter(name=form.cleaned_data['name'])[0:1])
    if existing_objs:
        doc = existing_objs[0]
        doc.keywords.clear()
    else:
        doc = UploadDoc(uid=str(uuid.uuid1()), name=form.cleaned_data['name'], user=user)
        doc.save()
    for keyword in strip_split(form.cleaned_data['keywords'].lower()):
        doc.keywords.add(Keyword.get(keyword))
    scall(request, 'updoc.process_file', to=[SERVER], doc_id=doc.id, filename=tmp_file.name,
          original_filename=os.path.basename(form.cleaned_data['filename']))
    return HttpResponse(_('File successfully uploaded. It will be uncompressed and indexed.\n'), status=200)
Пример #4
0
def upload(request):
    """Index view, displaying and processing a form."""
    set_websocket_topics(request)
    if request.method == 'POST':
        form = MetadatadUploadForm(request.POST)
        if form.is_valid():
            messages.info(request, _('File successfully uploaded'))
            obj = get_object_or_404(UploadDoc.query(request), id=form.cleaned_data['pk'])
            obj.name = form.cleaned_data['name']
            for keyword in form.cleaned_data['keywords'].lower().split():
                obj.keywords.add(Keyword.get(keyword))
            obj.save()
            return HttpResponseRedirect(reverse('upload'))
        elif 'pk' in form.cleaned_data:
            obj = get_object_or_404(UploadDoc.query(request), id=form.cleaned_data['pk'])
            obj.delete()
            messages.error(request, _('Unable to upload this file'))
        else:
            messages.error(request, _('Unable to upload this file'))
    else:
        form = FileUploadForm()
    template_values = {'form': form, 'title': _('Upload a new file'), 'root_host': settings.SERVER_BASE_URL[:-1]}
    return TemplateResponse(request, 'updoc/upload.html', template_values)
Пример #5
0
    def handle(self, *args, **options):
        if not args:
            print('Please provid either a file or a URL ')
            return 1
        # require
        request = HttpRequest()
        if options['user'] is None:
            request.user = AnonymousUser()
        else:
            request.user = get_user_model().objects.get(username=options['user'])

        filename = args[0]
        if filename.startswith('file://'):
            filename = filename[7:]
        if filename.startswith('http://') or filename.startswith('https://'):
            parsed_url = urlparse(filename)
            basename = os.path.basename(parsed_url.path)
            src_file = tempfile.NamedTemporaryFile()
            req = requests.get(filename, stream=True)
            chunk_size = 16384
            size = 0
            for chunk in req.iter_content(chunk_size):
                src_file.write(chunk)
                size += len(chunk)
        else:
            src_file = open(filename, mode='rb')
            basename = os.path.basename(filename)
            size = os.path.getsize(filename)

        uploaded_file = UploadedFile(file=src_file, name=basename, size=size)
        obj = process_new_file(uploaded_file, request)
        if options['name'] is not None:
            obj.name = options['name']
        for keyword in options['keyword']:
            obj.keywords.add(Keyword.get(keyword.lower().strip()))
        obj.save()
Пример #6
0
def edit_doc_keywords(request: SignalRequest, doc_id: int, keywords: str):
    doc = get_object_or_404(UploadDoc.query(request), pk=doc_id)
    doc.keywords.clear()
    for keyword in [x.strip() for x in keywords.lower().split() if x.strip()]:
        if keyword:
            doc.keywords.add(Keyword.get(keyword))