app.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import contextlib
  2. import os
  3. import flask
  4. import pystache
  5. import sys
  6. import lc.config as c
  7. import lc.error as e
  8. import lc.model as m
  9. import lc.request as r
  10. app = flask.Flask(__name__)
  11. loader = pystache.loader.Loader(extension="mustache", search_dirs=["templates"])
  12. def render(name, **kwargs):
  13. """Load and use a Mustache template from the project root"""
  14. template = loader.load_name(name)
  15. renderer = pystache.Renderer(missing_tags="strict", search_dirs=["templates"])
  16. return renderer.render(template, kwargs)
  17. def handle_errors(func):
  18. def __wrapped__(*args, **kwargs):
  19. try:
  20. return func(*args, **kwargs)
  21. except e.LCException as exn:
  22. return (
  23. render("main", title="error", content=f"shit's fucked yo: {exn}"),
  24. 500,
  25. )
  26. __wrapped__.__name__ = func.__name__
  27. return __wrapped__
  28. @app.route("/")
  29. @handle_errors
  30. def index():
  31. return render("main", title="main", content="whoo")
  32. @app.route("/auth", methods=["POST"])
  33. @handle_errors
  34. def auth():
  35. u = m.User.login(r.User.from_json(flask.request.data))
  36. return flask.redirect(u.base_url())
  37. @app.route("/u", methods=["POST"])
  38. @handle_errors
  39. def create_user():
  40. print(flask.request.data)
  41. u = m.User.from_request(r.User.from_json(flask.request.data))
  42. return flask.redirect(u.base_url())
  43. @app.route("/u/<string:user>", methods=["GET", "POST"])
  44. @handle_errors
  45. def get_user(user: str):
  46. u = m.User.by_slug(user)
  47. pg = int(flask.request.args.get("page", 0))
  48. links = u.get_links(page=pg)
  49. return render(
  50. "main", title=f"user {u.name}", content=render("linklist", links=links),
  51. )
  52. @app.route("/u/<string:user>/l", methods=["POST"])
  53. @handle_errors
  54. def create_link(user: str):
  55. pass
  56. @app.route("/u/<string:user>/l/<string:link>", methods=["GET", "POST"])
  57. @handle_errors
  58. def link(user: str, link: str):
  59. pass
  60. @app.route("/u/<string:user>/t/<path:tag>")
  61. @handle_errors
  62. def get_tagged_links(user: str, tag: str):
  63. u = m.User.by_slug(user)
  64. pg = int(flask.request.args.get("page", 0))
  65. t = u.get_tag(tag)
  66. links = t.get_links(page=pg)
  67. return render("main", title=f"tag {tag}", content=render("linklist", links=links),)