aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruser@node5.net <user@node5.net>2025-07-19 12:14:56 +0200
committeruser@node5.net <user@node5.net>2025-07-19 12:14:56 +0200
commit0e692b0306594697557a9917f8e41c70c16cd5f6 (patch)
tree7d744525ced5bc2798beccb27adb217fccbe1684
parentd82877b9424f2543bcb85b5f472005caf782dad1 (diff)
Migrate from Postgres to SQLite
-rw-r--r--.gitignore1
-rw-r--r--Makefile3
-rw-r--r--create_db.sql18
-rw-r--r--src/db_handler.py46
4 files changed, 33 insertions, 35 deletions
diff --git a/.gitignore b/.gitignore
index 0cd200f..ca2289d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
**/__pycache__/
.flask.pid
+blog.node5.net.db
diff --git a/Makefile b/Makefile
index fc9f677..7e7ebc0 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,8 @@
.PHONY: debug_server remove_meta_data
+initiate_db:
+ cat create_db.sql | sqlite3 blog.node5.net.db
+
blog.node5.net/static/pygmentize_code_highlight.css:
pygmentize -S fruity -f html -a .codehilite > output/pygmentize_code_highlight.css
debug_server:
diff --git a/create_db.sql b/create_db.sql
index c4202af..638932c 100644
--- a/create_db.sql
+++ b/create_db.sql
@@ -1,23 +1,17 @@
CREATE TABLE comment (
id serial PRIMARY KEY,
- comment text NOT NULL,
+ comment text NOT NULL, -- URL of the page the comment belongs to, this is the relation between the markdown and this database
page_url text,
- visitor_url text,
+ visitor_url text, -- The website the user claims to be from, if they have their own self hosted website
nickname text,
show_visitor_url bool,
- contact text,
- show_contact bool,
- public bool,
+ contact text, -- A means of contacting this person, email phone, or similar
+ show_contact bool, -- True: Publicly show the contact information, False: Site creators eyes only
+ public bool, -- Indicates if the comment is to be publicly viewable, or if it''s merely for the creator
approved bool DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
-comment on column comment.page_url is 'URL of the page the comment belongs to, this is the relation between the markdown and this database';
-comment on column comment.visitor_url is 'The website the user claims to be from, if they have their own self hosted website';
-comment on column comment.contact is 'A means of contacting this person, email phone, or similar';
-comment on column comment.show_contact is 'True: Publicly show the contact information, False: Site creators eyes only';
-comment on column comment.public is 'Indicates if the comment is to be publicly viewable, or if it''s merely for the creator';
-
INSERT INTO comment (comment, page_url, nickname, visitor_url, show_visitor_url, contact, show_contact, public, approved)
VALUES ('Hello world!', '/', 'user@node5.net', 'https://blog.node5.net/', TRUE, 'Leave a comment on this blog', TRUE, TRUE, TRUE);
@@ -28,4 +22,4 @@ INSERT INTO comment (comment, page_url, nickname, visitor_url, show_visitor_url,
VALUES ('Test private comment', '/', NULL, NULL, TRUE, 'Don''t', TRUE, FALSE, TRUE);
INSERT INTO comment (comment, page_url, nickname, visitor_url, show_visitor_url, contact, show_contact, public, approved)
- VALUES ('Test unapproved comment', '/', NULL, NULL, TRUE, NULL, TRUE, TRUE, FALSE); \ No newline at end of file
+ VALUES ('Test unapproved comment', '/', NULL, NULL, TRUE, NULL, TRUE, TRUE, FALSE);
diff --git a/src/db_handler.py b/src/db_handler.py
index cd40112..660e00a 100644
--- a/src/db_handler.py
+++ b/src/db_handler.py
@@ -1,9 +1,7 @@
-import os
import logging
from dataclasses import dataclass
-import psycopg
-import yaml
+import sqlite3
logger = logging.getLogger(__name__) # Set the logger name, to the name of the module
@@ -13,29 +11,31 @@ logger = logging.getLogger(__name__) # Set the logger name, to the name of the m
class DBHandler:
config: dict
- def conn_factory(self) -> psycopg.Connection:
- conn: psycopg.Connection = psycopg.connect(**self.config, row_factory=psycopg.rows.dict_row)
- return conn
+ def con_factory(self) -> sqlite3.Connection:
+ con = sqlite3.connect("blog.node5.net.db")
+ return con
def get_comments(self, url: str) -> list[dict]:
- with self.conn_factory() as conn:
- with conn.cursor() as cur:
- cur.execute(
- "SELECT id, comment, page_url, visitor_url, nickname, "
- "(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
+ with self.con_factory() as con:
+ cur = con.cursor()
+ cur.execute(
+ '''
+ SELECT id, comment, page_url, visitor_url, nickname,
+ (CASE WHEN show_contact THEN contact ELSE NULL END) as contact, created_at
+ FROM comment WHERE approved AND public AND page_url = ? ORDER BY created_at DESC;
+ ''', (url))
+ comments = cur.fetchall()
+ return comments
def post_comment(self, comment: str, page_url: str, visitor_url: str=None, nickname: str=None, contact: str=None,
show_contact: bool=True, public: bool=True):
- with self.conn_factory() as conn:
- with conn.cursor() as cur:
- cur.execute(
- "INSERT INTO comment (comment, page_url, visitor_url, nickname, contact, show_contact, public)"
- "VALUES (%(comment)s, %(page_url)s, %(visitor_url)s, %(nickname)s, %(contact)s, %(show_contact)s, "
- "%(public)s);",
- {'comment': comment, 'page_url': page_url, 'visitor_url': visitor_url, 'nickname': nickname,
- 'contact': contact, 'show_contact': show_contact, 'public': public}
- )
+ with self.con_factory() as con:
+ cur = con.cursor()
+ cur.execute(
+ '''
+ INSERT INTO comment (comment, page_url, visitor_url, nickname, contact, show_contact, public)"
+ VALUES (?, ?, ?, ?, ?, ?, ?);
+ ''',
+ (comment, page_url, visitor_url, nickname, contact, show_contact, public)
+ )