app.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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",
  24. title="error",
  25. content=f"shit's fucked yo: {exn}",
  26. user=None
  27. ),
  28. 500,
  29. )
  30. __wrapped__.__name__ = func.__name__
  31. return __wrapped__
  32. @app.route("/")
  33. @handle_errors
  34. def index():
  35. return render("main", title="main", content="whoo", u=None)
  36. @app.route("/auth", methods=["POST"])
  37. @handle_errors
  38. def auth():
  39. u = m.User.login(r.User.from_json(flask.request.data))
  40. return flask.redirect(u.base_url())
  41. @app.route("/u", methods=["POST"])
  42. @handle_errors
  43. def create_user():
  44. print(flask.request.data)
  45. u = m.User.from_request(r.User.from_json(flask.request.data))
  46. return flask.redirect(u.base_url())
  47. @app.route("/u/<string:user>", methods=["GET", "POST"])
  48. @handle_errors
  49. def get_user(user: str):
  50. u = m.User.by_slug(user)
  51. pg = int(flask.request.args.get("page", 0))
  52. links = u.get_links(page=pg)
  53. return render(
  54. "main",
  55. title=f"user {u.name}",
  56. content=render("linklist", links=links),
  57. user=u,
  58. )
  59. @app.route("/u/<string:user>/l", methods=["POST"])
  60. @handle_errors
  61. def create_link(user: str):
  62. pass
  63. @app.route("/u/<string:user>/l/<string:link>", methods=["GET", "POST"])
  64. @handle_errors
  65. def link(user: str, link: str):
  66. pass
  67. @app.route("/u/<string:user>/t/<path:tag>")
  68. @handle_errors
  69. def get_tagged_links(user: str, tag: str):
  70. u = m.User.by_slug(user)
  71. pg = int(flask.request.args.get("page", 0))
  72. t = u.get_tag(tag)
  73. links = t.get_links(page=pg)
  74. return render(
  75. "main",
  76. title=f"tag {tag}",
  77. content=render("linklist", links=links),
  78. user=u,
  79. )