Skip to content
Snippets Groups Projects
Select Git revision
2 results Searching

monitor_test_1.launch

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    app.py 2.34 KiB
    import os
    import socket
    from pathlib import Path
    
    import pdfplumber
    from flask import Flask, render_template, request, redirect, send_file, jsonify
    from werkzeug.utils import secure_filename
    
    from title_focus_search_index import TitleFocusSearchIndex
    
    app = Flask(__name__)
    
    SLIDE_DIR = "slides"
    IMAGE_DIR = "img_cache"
    
    Index = TitleFocusSearchIndex
    
    
    @app.route('/')
    def index():
        ll = os.listdir(SLIDE_DIR)
        return render_template('index.html', ll=ll)
    
    
    def allowed_file(filename):
        return '.' in filename and filename.rsplit('.', 1)[1].lower() in ["pdf"]
    
    
    @app.route('/upload', methods=['POST'])
    def upload():
        if 'file' in request.files:
            file = request.files['file']
            if file.filename != '':
                if file and allowed_file(file.filename):
                    filename = secure_filename(file.filename)
                    file_path = os.path.join(Path(SLIDE_DIR), filename)
                    file.save(file_path)
                    pdf = pdfplumber.open(file_path)
                    index = Index()
                    for i, page in enumerate(pdf.pages):
                        text = page.extract_text()
                        index.add(str(file_path), i, text)
                        img_name = str(file_path)[7:] + "_" + str(i) + ".jpg"
                        img_path = os.path.join(IMAGE_DIR, img_name)
                        page.to_image().save(img_path)
                    del index
        return redirect('/')
    
    
    @app.route("/search", methods=['POST'])
    def query():
        try:
            index = Index()
            query = request.form.get("term")
            context = request.form.get("context")  # TODO: Use context to find better results
            result = index.search(query, context)
            img_name = result["path"][7:] + "_" + str(result["page"]) + ".jpg"
            return jsonify({
                "type": "image",
                "path": os.getenv('EXTERNAL_HOST', '<PLEASE_SET_EXTERNAL_HOST_ENV_VAR>') + "/slide/" + img_name
            })
        except IndexError:
            return jsonify({
                "type": "miss"
            })
    
    
    @app.route("/slide/<img_name>")
    def slide(img_name):
        path = os.path.join(IMAGE_DIR, img_name)
        if "/" in img_name or "\\" in img_name:
            return "bad image name", 400
        if not os.path.exists(path):
            return "image not present", 404
        return send_file(path, mimetype='image/jpg')
    
    
    if __name__ == '__main__':
        app.debug = True
        app.run(host="0.0.0.0")