def test_filter_node_id(self): # invalid values of node id will be # filtered out (return None) self.assertFalse( filter_node_id("sdf") ) self.assertFalse( filter_node_id("sdf12") ) self.assertFalse( filter_node_id(-1) ) self.assertFalse( filter_node_id("-1") ) # valid values for node id will pass # and will be returned as integers self.assertEqual( filter_node_id("12"), 12 ) self.assertEqual( filter_node_id(100), 100 )
def upload(request): """ To understand returned value, have a look at papermerge.core.views.decorators.json_reponse decorator """ files = request.FILES.getlist('file') if not files: logger.warning( "POST request.FILES is empty. Forgot adding file?" ) return "Missing input file", 400 if len(files) > 1: msg = "More then one files per ajax? how come?" logger.warning(msg) return msg, 400 f = files[0] logger.debug("upload for f=%s user=%s", f, request.user) user = request.user size = os.path.getsize(f.temporary_file_path()) parent_id = request.POST.get('parent', "-1") parent_id = filter_node_id(parent_id) lang = request.POST.get('language') notes = request.POST.get('notes') try: page_count = get_pagecount(f.temporary_file_path()) except exceptions.FileTypeNotSupported: status = 400 msg = _( "File type not supported." " Only pdf, tiff, png, jpeg files are supported" ) return msg, status logger.debug("creating document {}".format(f.name)) doc = Document.create_document( user=user, title=f.name, size=size, lang=lang, file_name=f.name, parent_id=parent_id, notes=notes, page_count=page_count ) logger.debug( "uploading to {}".format(doc.path.url()) ) default_storage.copy_doc( src=f.temporary_file_path(), dst=doc.path.url() ) for page_num in range(1, page_count + 1): ocr_page.apply_async(kwargs={ 'user_id': user.id, 'document_id': doc.id, 'file_name': f.name, 'page_num': page_num, 'lang': lang} ) # upload only one file at time. # after each upload return a json object with # following fields: # # - title # - preview_url # - doc_id # - action_url -> needed for renaming/deleting selected item # # with that info a new thumbnail will be created. preview_url = reverse( 'core:preview', args=(doc.id, 200, 1) ) result = { 'title': doc.title, 'doc_id': doc.id, 'action_url': "", 'preview_url': preview_url } return result
def upload(request): """ To understand returned value, have a look at papermerge.core.views.decorators.json_reponse decorator """ files = request.FILES.getlist('file') if not files: logger.warning( "POST request.FILES is empty. Forgot adding file?" ) return "Missing input file", 400 if len(files) > 1: msg = "More then one files per ajax? how come?" logger.warning(msg) return msg, 400 f = files[0] logger.debug("upload for f=%s user=%s", f, request.user) user = request.user parent_id = request.POST.get('parent', "-1") parent_id = filter_node_id(parent_id) lang = request.POST.get('language') notes = request.POST.get('notes') pipelines = settings.PAPERMERGE_PIPELINES init_kwargs = {'payload': f, 'processor': WEB} apply_kwargs = { 'user': user, 'parent': parent_id, 'lang': lang, 'notes': notes, 'apply_async': True } # this code is 100% similar to local.py # and imap.py for pipeline in pipelines: pipeline_class = module_loading.import_string(pipeline) try: importer = pipeline_class(**init_kwargs) except Exception as e: importer = None # please use fstrings logger.debug("{} importer: {}".format("WEB", e)) if importer is not None: try: # please document/comment # apply # get_init_kwargs # get_apply_kwargs result_dict = importer.apply(**apply_kwargs) init_kwargs_temp = importer.get_init_kwargs() apply_kwargs_temp = importer.get_apply_kwargs() if init_kwargs_temp: init_kwargs = {**init_kwargs, **init_kwargs_temp} if apply_kwargs_temp: apply_kwargs = {**apply_kwargs, **apply_kwargs_temp} except Exception as e: result_dict = None # please use fstrings logger.error("{} importer: {}".format("WEB", e)) else: result_dict = None if result_dict is not None: doc = result_dict.get('doc', None) else: doc = None if not doc: status = 400 msg = _( "File type not supported." " Only pdf, tiff, png, jpeg files are supported" ) return msg, status # after each upload return a json object with # following fields: # # - title # - preview_url # - doc_id # - action_url -> needed for renaming/deleting selected item # # with that info a new thumbnail will be created. preview_url = reverse( 'core:preview', args=(doc.id, 200, 1) ) result = { 'title': doc.title, 'doc_id': doc.id, 'action_url': "", 'preview_url': preview_url } return result
def upload(request): """ To understand returned value, have a look at papermerge.core.views.decorators.json_reponse decorator """ files = request.FILES.getlist('file') if not files: logger.warning("POST request.FILES is empty. Forgot adding file?") return "Missing input file", 400 if len(files) > 1: msg = "More then one files per ajax? how come?" logger.warning(msg) return msg, 400 f = files[0] logger.debug("upload for f=%s user=%s", f, request.user) user = request.user parent_id = request.POST.get('parent', "-1") parent_id = filter_node_id(parent_id) lang = request.POST.get('language') notes = request.POST.get('notes') init_kwargs = {'payload': f, 'processor': WEB} apply_kwargs = { 'user': user, 'name': f.name, 'parent': parent_id, 'lang': lang, 'notes': notes, 'apply_async': True } doc = go_through_pipelines(init_kwargs, apply_kwargs) if not doc: status = 400 msg = _("File type not supported." " Only pdf, tiff, png, jpeg files are supported") return msg, status # after each upload return a json object with # following fields: # # - title # - preview_url # - doc_id # - action_url -> needed for renaming/deleting selected item # # with that info a new thumbnail will be created. preview_url = reverse('core:preview', args=(doc.id, 200, 1)) result = { 'title': doc.title, 'doc_id': doc.id, 'action_url': "", 'preview_url': preview_url } return result