about summary refs log tree commit diff
diff options
context:
space:
mode:
authoruser <user@node5.net>2024-02-27 18:55:23 +0100
committeruser <user@node5.net>2024-02-27 18:55:23 +0100
commit679d9081ed16f9f6f2041ec3d5bf2a928ec25347 (patch)
tree74244650cf72477d08da2a7946f309ef27f71963
parentcab85a364fe8a5766c94704a92a0b9d85b6c32ef (diff)
split out database logic
-rw-r--r--db_handler.py33
-rw-r--r--src/blog_node5_net.py34
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)