def correct_task(version=1): """ Correct text provided by the user, i.e. not coming from an article. This can be either an uploaded file or a string. This is a lower level API used by the Greynir web front-end. """ if not (1 <= version <= 1): return better_jsonify(valid=False, reason="Unsupported version") file = request.files.get("file") if file is not None: # Handle uploaded file # file is a proxy object that emulates a Werkzeug FileStorage object mimetype = file.mimetype if mimetype not in SUPPORTED_DOC_MIMETYPES: return better_jsonify(valid=False, reason="File type not supported") # Create document object from an uploaded file and extract its text try: # Instantiate an appropriate class for the MIME type of the file doc = Document.for_mimetype(mimetype)(file.read()) text = doc.extract_text() except Exception as e: logging.warning("Exception in correct_task(): {0}".format(e)) return better_jsonify(valid=False, reason="Error reading file") else: # Handle POSTed form data or plain text string try: text = text_from_request(request) except Exception as e: logging.warning("Exception in correct_task(): {0}".format(e)) return better_jsonify(valid=False, reason="Invalid request") # assert isinstance(request, _RequestProxy) pgs, stats = check_grammar(text, progress_func=cast(Any, request).progress_func) # Return the annotated paragraphs/sentences and stats # in a JSON structure to the client return better_jsonify(valid=True, result=pgs, stats=stats, text=text)