|
@@ -20,81 +20,88 @@ def render(name, **kwargs):
|
|
return renderer.render(template, kwargs)
|
|
return renderer.render(template, kwargs)
|
|
|
|
|
|
|
|
|
|
-def handle_errors(func):
|
|
|
|
- def __wrapped__(*args, **kwargs):
|
|
|
|
|
|
+class Endpoint:
|
|
|
|
+ def api_post(self, *args, **kwargs) -> dict:
|
|
|
|
+ raise NotImplemented
|
|
|
|
+
|
|
|
|
+ def public(self, *args, **kwargs):
|
|
|
|
+ raise NotImplemented
|
|
|
|
+
|
|
|
|
+ def private(self, user, *args, **kwargs):
|
|
|
|
+ return flask.redirect("/")
|
|
|
|
+
|
|
|
|
+ def route(self, *args, **kwargs):
|
|
|
|
+ if flask.request.method == "POST":
|
|
|
|
+ try:
|
|
|
|
+ return self.api_post(*args, **kwargs)
|
|
|
|
+ except e.LCException as exn:
|
|
|
|
+ return ({"status": exn.http_code(), "error": str(exn)}, exn.http_code())
|
|
|
|
+
|
|
try:
|
|
try:
|
|
- return func(*args, **kwargs)
|
|
|
|
|
|
+ return self.public(*args, **kwargs)
|
|
except e.LCException as exn:
|
|
except e.LCException as exn:
|
|
- return (
|
|
|
|
- render("main",
|
|
|
|
- title="error",
|
|
|
|
- content=f"shit's fucked yo: {exn}",
|
|
|
|
- user=None
|
|
|
|
- ),
|
|
|
|
- e.http_code(),
|
|
|
|
|
|
+ page = render(
|
|
|
|
+ "main", title="error", content=f"shit's fucked yo: {exn}", user=None,
|
|
)
|
|
)
|
|
|
|
+ return (page, exn.http_code())
|
|
|
|
|
|
- __wrapped__.__name__ = func.__name__
|
|
|
|
- return __wrapped__
|
|
|
|
|
|
+
|
|
|
|
+def endpoint(cls):
|
|
|
|
+ def func(*args, **kwargs):
|
|
|
|
+ return cls().route(*args, **kwargs)
|
|
|
|
+
|
|
|
|
+ func.__name__ = cls.__name__
|
|
|
|
+ return func
|
|
|
|
|
|
|
|
|
|
@app.route("/")
|
|
@app.route("/")
|
|
-@handle_errors
|
|
|
|
-def index():
|
|
|
|
- return render("main", title="main", content="whoo", u=None)
|
|
|
|
|
|
+@endpoint
|
|
|
|
+class Index(Endpoint):
|
|
|
|
+ def public(self):
|
|
|
|
+ return render("main", title="main", content="whoo", user=None)
|
|
|
|
|
|
|
|
|
|
-@app.route("/auth", methods=["POST"])
|
|
|
|
-@handle_errors
|
|
|
|
-def auth():
|
|
|
|
- u = m.User.login(r.User.from_json(flask.request.data))
|
|
|
|
- return flask.redirect(u.base_url())
|
|
|
|
|
|
+@app.route("/auth")
|
|
|
|
+@endpoint
|
|
|
|
+class Auth(Endpoint):
|
|
|
|
+ def api_post(self):
|
|
|
|
+ u = m.User.login(r.User.from_json(flask.request.data))
|
|
|
|
+ return flask.redirect(u.base_url())
|
|
|
|
|
|
|
|
|
|
-@app.route("/u", methods=["POST"])
|
|
|
|
-@handle_errors
|
|
|
|
|
|
+@app.route("/u")
|
|
def create_user():
|
|
def create_user():
|
|
print(flask.request.data)
|
|
print(flask.request.data)
|
|
u = m.User.from_request(r.User.from_json(flask.request.data))
|
|
u = m.User.from_request(r.User.from_json(flask.request.data))
|
|
return flask.redirect(u.base_url())
|
|
return flask.redirect(u.base_url())
|
|
|
|
|
|
|
|
|
|
-@app.route("/u/<string:user>", methods=["GET", "POST"])
|
|
|
|
-@handle_errors
|
|
|
|
|
|
+@app.route("/u/<string:user>")
|
|
def get_user(user: str):
|
|
def get_user(user: str):
|
|
u = m.User.by_slug(user)
|
|
u = m.User.by_slug(user)
|
|
pg = int(flask.request.args.get("page", 0))
|
|
pg = int(flask.request.args.get("page", 0))
|
|
links = u.get_links(page=pg)
|
|
links = u.get_links(page=pg)
|
|
return render(
|
|
return render(
|
|
- "main",
|
|
|
|
- title=f"user {u.name}",
|
|
|
|
- content=render("linklist", links=links),
|
|
|
|
- user=u,
|
|
|
|
|
|
+ "main", title=f"user {u.name}", content=render("linklist", links=links), user=u,
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
-@app.route("/u/<string:user>/l", methods=["POST"])
|
|
|
|
-@handle_errors
|
|
|
|
|
|
+@app.route("/u/<string:user>/l")
|
|
def create_link(user: str):
|
|
def create_link(user: str):
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
|
|
-@app.route("/u/<string:user>/l/<string:link>", methods=["GET", "POST"])
|
|
|
|
-@handle_errors
|
|
|
|
|
|
+@app.route("/u/<string:user>/l/<string:link>")
|
|
def link(user: str, link: str):
|
|
def link(user: str, link: str):
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
|
|
@app.route("/u/<string:user>/t/<path:tag>")
|
|
@app.route("/u/<string:user>/t/<path:tag>")
|
|
-@handle_errors
|
|
|
|
def get_tagged_links(user: str, tag: str):
|
|
def get_tagged_links(user: str, tag: str):
|
|
u = m.User.by_slug(user)
|
|
u = m.User.by_slug(user)
|
|
pg = int(flask.request.args.get("page", 0))
|
|
pg = int(flask.request.args.get("page", 0))
|
|
t = u.get_tag(tag)
|
|
t = u.get_tag(tag)
|
|
links = t.get_links(page=pg)
|
|
links = t.get_links(page=pg)
|
|
return render(
|
|
return render(
|
|
- "main",
|
|
|
|
- title=f"tag {tag}",
|
|
|
|
- content=render("linklist", links=links),
|
|
|
|
- user=u,
|
|
|
|
|
|
+ "main", title=f"tag {tag}", content=render("linklist", links=links), user=u,
|
|
)
|
|
)
|