예제 #1
0
파일: flaskapp.py 프로젝트: mchaput/bookish
def edit_wiki(path):
    config = flask.current_app.config

    editable = config["EDITABLE"]
    if not editable:
        flask.abort(500)

    pages = get_wikipages()
    path = paths.normalize("/" + path)
    path = pages.source_path(path)
    if paths.extension(path) != config["WIKI_EXT"]:
        # TODO: better error here!
        flask.abort(500)

    userid = get_request_userid()
    cp = Checkpoints(userid, pages.store, pages.cachestore)

    from_autosave = False
    if pages.exists(path):
        lastmod = pages.last_modified(path)
        if cp.has_autosave_after(path, lastmod):
            source = cp.get_autosave(path)
            from_autosave = True
        else:
            source = pages.content(path, reformat=True)
    else:
        lastmod = 0
        source = ""

    return flask.render_template("/templates/edit.jinja2", source=source,
                                 path=path, rel=null_rel, lastmod=lastmod,
                                 from_autosave=from_autosave)
예제 #2
0
파일: flaskapp.py 프로젝트: mchaput/bookish
def restore_wiki():
    request = flask.request
    config = flask.current_app.config

    pages = get_wikipages()
    path = request.form["path"]
    checkpointid = request.form["id"]
    # encoding = request.form.get("encoding", "utf8")

    userid = get_request_userid(request)
    cp = Checkpoints(userid, pages.store, pages.cachestore)
    return cp.restore_checkpoint(path, checkpointid, encoding="utf8")
예제 #3
0
파일: flaskapp.py 프로젝트: mchaput/bookish
def preview_wiki():
    request = flask.request
    config = flask.current_app.config

    pages = get_wikipages()
    indexer = get_indexer()
    searcher = indexer.searcher()
    autosave_seconds = config.get("AUTOSAVE_SECONDS", 10)
    autosave = (
        config.get("AUTOSAVE", True) and request.form.get("autosave") != "false"
    )

    assert "path" in request.form
    path = request.form["path"]
    assert path
    source = request.form.get("source", "")
    scrollTop = int(request.form.get("scrollTop") or "0")

    lastmod = 0
    if pages.exists(path):
        lastmod = pages.last_modified(path)

    last_autosave = 0
    if autosave:
        session = flask.session
        userid = get_request_userid()

        if "last_autosave" in session:
            last_autosave = session.get("last_autosave")
        else:
            last_autosave = datetime.datetime.utcnow()

        cp = Checkpoints(userid, pages.store, pages.cachestore)
        now = datetime.datetime.utcnow()
        if now - last_autosave >= datetime.timedelta(seconds=autosave_seconds):
            cp.autosave(path, source)
            last_autosave = session["last_autosave"] = now

    def rel(p):
        if p.startswith("http:") or p.startswith("https:"):
            return p
        return paths.join(path, p)

    extras = {"rel": rel}

    html = pages.preview(path, source, searcher=searcher, extras=extras,
                         templatename="/templates/preview.jinja2")
    return flask.jsonify(html=html, last_modified=lastmod,
                         last_autosave=last_autosave, scrollTop=scrollTop)
예제 #4
0
파일: flaskapp.py 프로젝트: mchaput/bookish
def save_wiki():
    request = flask.request
    config = flask.current_app.config

    maxnum = config.get("CHECKPOINT_MAX", 10)

    pages = get_wikipages()
    path = request.form["path"]
    source = request.form["source"]
    # encoding = request.form.get("encoding", "utf8")

    userid = get_request_userid()
    cp = Checkpoints(userid, pages.store, pages.cachestore, maxnum)
    cp.save_checkpoint(path, source, encoding="utf8")
    return source