diff options
| author | user <user@node5.net> | 2024-02-27 18:55:23 +0100 |
|---|---|---|
| committer | user <user@node5.net> | 2024-02-27 18:55:23 +0100 |
| commit | 679d9081ed16f9f6f2041ec3d5bf2a928ec25347 (patch) | |
| tree | 74244650cf72477d08da2a7946f309ef27f71963 | |
| parent | cab85a364fe8a5766c94704a92a0b9d85b6c32ef (diff) | |
split out database logic
| -rw-r--r-- | db_handler.py | 33 | ||||
| -rw-r--r-- | src/blog_node5_net.py | 34 |
2 files changed, 41 insertions, 26 deletions
diff --git a/db_handler.py b/db_handler.py new file mode 100644 index 0000000..fef04ed --- /dev/null +++ b/db_handler.py @@ -0,0 +1,33 @@ +import logging +import os + +import psycopg +import yaml + +with open(os.path.join('configs', 'database.yml'), 'r') as file: + db_con_params = yaml.safe_load(file.read()) + logging.debug(f'Database connection parameters: {db_con_params}') + + +def get_comments(url: str) -> list[dict]: + with psycopg.connect(**db_con_params, row_factory=psycopg.rows.dict_row) as conn: + with conn.cursor() as cur: + cur.execute( + "SELECT id, comment, page_url, visitor_url, username, " + "(CASE WHEN show_contact THEN contact ELSE NULL END) as contact, created_at " + "FROM comment WHERE approved AND public AND page_url = %(url)s ORDER BY created_at DESC;", {'url': url}) + comments = cur.fetchall() + return comments + + +def post_comment(comment: str, page_url: str, visitor_url: str=None, username: str=None, contact: str=None, + show_contact: bool=True, public: bool=True): + with psycopg.connect(**db_con_params, row_factory=psycopg.rows.dict_row) as conn: + with conn.cursor() as cur: + cur.execute( + "INSERT INTO comment (comment, page_url, visitor_url, username, contact, show_contact, public)" + "VALUES (%(comment)s, %(page_url)s, %(visitor_url)s, %(username)s, %(contact)s, %(show_contact)s, " + "%(public)s);", + {'comment': comment, 'page_url': page_url, 'visitor_url': visitor_url, 'username': username, + 'contact': contact, 'show_contact': show_contact, 'public': public} + ) diff --git a/src/blog_node5_net.py b/src/blog_node5_net.py index 076bd72..f59a899 100644 --- a/src/blog_node5_net.py +++ b/src/blog_node5_net.py @@ -1,12 +1,13 @@ import logging -import flask -import typing import os -import psycopg -import yaml +import typing import urllib +import flask +import yaml + import article_handler +import db_handler logging.basicConfig(format='%(asctime)s,%(msecs)03d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s', datefmt='%Y-%m-%d:%H:%M:%S', level=logging.DEBUG) @@ -35,35 +36,16 @@ def strip_trailing_slash(path): return stripped_path -def get_comments(url: str) -> list[dict]: - with psycopg.connect(**db_con_params, row_factory=psycopg.rows.dict_row) as conn: - with conn.cursor() as cur: - cur.execute( - "SELECT id, comment, page_url, visitor_url, username, " - "(CASE WHEN show_contact THEN contact ELSE NULL END) as contact, created_at " - "FROM comment WHERE approved AND public AND page_url = %(url)s ORDER BY created_at DESC;", {'url': url}) - comments = cur.fetchall() - return comments - - @app.route('/comment', methods=['POST']) def post_comment(): - args = {'public': False, 'show_contact': False} - args['page_url'] = strip_trailing_slash(urllib.parse.unquote(urllib.parse.urlparse(flask.request.referrer).path)) + args = {'page_url': strip_trailing_slash(urllib.parse.unquote(urllib.parse.urlparse(flask.request.referrer).path)), + 'public': False, 'show_contact': False} for key, value in flask.request.form.items(): if key in ('username', 'visitor_url', 'contact', 'show_contact', 'public', 'comment'): if key in ('public', 'show_contact'): value = value == 'on' args[key] = value - - with psycopg.connect(**db_con_params, row_factory=psycopg.rows.dict_row) as conn: - with conn.cursor() as cur: - cur.execute( - "INSERT INTO comment (comment, page_url, visitor_url, username, contact, show_contact, public)" - "VALUES (%(comment)s, %(page_url)s, %(visitor_url)s, %(username)s, %(contact)s, %(show_contact)s, " - "%(public)s);", args - ) - + db_handler.post_comment(**args) return flask.redirect(flask.request.referrer) |
