flask-htmx-board1/app.py
Simple_Not 353551b219
All checks were successful
continuous-integration/drone/push Build is passing
remake many certs
2023-07-17 12:56:15 +10:00

137 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from flask import Flask, render_template, request
from flask_assets import Bundle, Environment
from todo import todos
#from boards import board_list
from threads import threads_lists
from threads_with_posts import open_threads
from arango import ArangoClient
import socket
app = Flask(__name__)
assets = Environment(app)
css = Bundle("src/*.css", output="dist/main.css")
# https://unpkg.com/htmx.org
js = Bundle("src/*.js", output="dist/main.js")
assets.register("css", css)
assets.register("js", js)
css.build()
js.build()
docker_short_id = socket.gethostname()
arango_client = ArangoClient(hosts='https://arango.guaranteedstruggle.host')
db = arango_client.db('board1', username='root', password='stolendick527')
# предполагается что меняться список будет весьма редко, поэтому подхватываем при лишь при перезапуске
boards0 = db.collection('boards')
board_list = [ k['_key'] for k in boards0]
@app.route('/liveness')
def healthx():
return "<h1><center>Liveness check completed</center><h1>"
@app.route('/readiness')
def healthz():
return "<h1><center>Readiness check completed</center><h1>"
@app.route("/")
def homepage():
return render_template("main-page.html", host_id=docker_short_id, boards=board_list)
@app.route("/boards/<board_id>")
def page_board(board_id):
b_threads = [ open_threads[thread_id] for thread_id in open_threads if thread_id in threads_lists[board_id]]
return render_template("board.html", host_id=docker_short_id, board_id=board_id, boards=board_list, board_threads=b_threads)
@app.route("/db_posts")
def page_posts_from_db():
postos = db.collection('posts')
postos = [ p for p in postos]
postos = sorted(postos, key=lambda posto: posto['_key'], reverse=False)
return render_template("interactive-posts.html", host_id=docker_short_id, postos=postos)
@app.route('/post_my_post/<post_key>', methods=['POST'])
def post_a_post(post_key):
postos = db.collection('posts')
#### TODO проверить как-то по-умному что мы таки его добавили
metadata = postos.insert({
'texto': 'next post is this',
'parent_post': f'{post_key}'
}, overwrite_mode='update')
metadata = db.collection('post_parents').insert({
# '_key': post_key,
'_from': f'posts/{post_key}',
'_to': f'posts/{metadata["_key"]}'
}, overwrite_mode='update')
cursor = db.aql.execute(
"""FOR ppp IN posts
LET children = (FOR v IN 1..9999 OUTBOUND ppp post_parents RETURN v)
UPDATE ppp WITH { children_num : COUNT_DISTINCT( children[*]._key ) } IN posts"""
)
cursor = db.aql.execute(
"""FOR ppp IN posts
LET children = (FOR v IN 1OUTBOUND ppp post_parents RETURN v)
UPDATE ppp WITH { answers_num : COUNT_DISTINCT( children[*]._key ) } IN posts"""
)
postos = db.collection('posts')
postos = sorted(postos, key=lambda posto: posto['_key'], reverse=False)
return render_template("i-posts.html", host_id=docker_short_id, postos=postos)
# @app.route('/post_my_file', method=['POST'])
# def post_a_file():
# pass
### stolen
@app.route("/todo")
def page_todo():
return render_template("page1.html")
@app.route("/search", methods=["POST"])
def search_todo():
search_term = request.form.get("search")
if not len(search_term):
return render_template("todo.html", host_id=docker_short_id, todos=[])
res_todos = []
for todo in todos:
if search_term in todo["title"]:
res_todos.append(todo)
return render_template("todo.html", host_id=docker_short_id, todos=res_todos)
### /stolen
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')