fuck databases

This commit is contained in:
deadvey 2025-03-31 08:20:24 +01:00
parent fea74df90c
commit a3914aab97
9 changed files with 132 additions and 87 deletions

3
.gitignore vendored
View File

@ -2,3 +2,6 @@ config.py
__pycache__
*.swp
log
.git/
users.py
posts.py

View File

@ -9,7 +9,7 @@ mariadb-server
``` CREATE DATABASE glogger;
USE glogger;
CREATE TABLE users ( userID INT PRIMARY KEY AUTO_INCREMENT NOT NULL, username VARCHAR(255) );
CREATE TABLE posts ( postID INT PRIMARY KEY AUTO_INCREMENT NOT NULL, userID INT, FOREIGN KEY(userID) REFERENCES users(userID), title VARCHAR(255), content TEXT, pubDate VARCHAR(255), editDate VARCHAR(255) );
CREATE TABLE posts ( postID INT PRIMARY KEY AUTO_INCREMENT NOT NULL, userID INT, FOREIGN KEY(userID) REFERENCES users(userID), title VARCHAR(255), content VARCHAR(MAX), pubDate VARCHAR(255), editDate VARCHAR(255) );
```
# TO DO
* Add RSS and/or ATOM support

View File

@ -16,38 +16,47 @@
import config
import parse_post
import output
import initialise
try:
import posts
except:
print("No posts database")
try:
import users
except:
print("No users database")
from datetime import datetime
def create_user_page(userID, username, db):
with open(f"{config.webroot}/user/{username}.gmi", "w") as userfile:
output.log("Writing posts to userfile")
cursor = db.cursor()
cursor.execute(f"SELECT * FROM posts WHERE userID = {userID} ORDER BY postID Desc")
userfile.write(f"# {username}:\n")
for x in cursor:
post = config.user_page_post_format
post = parse_post.parse_post_format(post, x, username)
userfile.write(post)
def create_user_page(userID, username):
try:
with open(f"{config.webroot}/user/{username}.gmi", "w") as userfile:
output.log("Writing posts to userfile")
userfile.write(f"# {username}:\n")
for post_index in range(len(posts.posts)-1,-1,-1):
post_content = config.user_page_post_format
post_content = parse_post.parse_post_format(post_content, post_index, username)
userfile.write(post_content)
except:
print(f"Unable to open {username}.gmi")
initialise.initialise()
def create_post_page(post, db):
with open(f"{config.webroot}/post/{post[0]}.gmi", "w") as postfile:
output.log("Writing post to postfile")
output.log(post)
postfile_content = config.post_page_post_format
postfile_content = parse_post.parse_post_format(postfile_content, post, post[1])
postfile.write(postfile_content)
def create_post_page(post_index):
try:
with open(f"{config.webroot}/post/{post_index}.gmi", "w") as postfile:
output.log("Writing post to postfile")
output.log(posts.posts[post_index])
postfile_content = config.post_page_post_format
postfile_content = parse_post.parse_post_format(postfile_content, post_index, users.users[posts.posts[post_index]["userID"]])
postfile.write(postfile_content)
except:
print(f"Unable to open {post_index}.gmi")
initialise.initialise()
def create_timeline(db):
def create_timeline():
with open(f"{config.webroot}/index.gmi", "w") as timeline_file:
output.log("Writing posts to timeline")
users = []
cursor = db.cursor()
cursor.execute(f"SELECT userName FROM users")
for x in cursor:
users += x
cursor.execute(f"SELECT * FROM posts ORDER BY postID Desc LIMIT {config.posts_in_timeline}")
for x in cursor:
username = users[x[1]-1]
for current_post_index in range(len(posts.posts)-1,-1,-1):
username = users.users[posts.posts[current_post_index]["userID"]]
post = config.timeline_post_format
post = parse_post.parse_post_format(post, x, username)
post = parse_post.parse_post_format(post, current_post_index, username)
timeline_file.write(post)

View File

@ -5,12 +5,6 @@ date_format = "%d/%m/%Y at %H:%M" # The date that is displayed on the page
post_seperator = "---------------------------------------------"
posts_in_timeline = 100
### SQL settings ###
host = "localhost"
user = "username"
password = "password"
database = "glogger"
### Logging ###
logfile = "/path/to/logfile"
verbose = False

View File

@ -1,28 +1,22 @@
import mysql.connector
import initialise
try:
import users
except:
print("No users database")
initialise.initialise()
import config
import newpost
import rebuild
from datetime import datetime
db = mysql.connector.connect(
host=config.host,
user=config.user,
password=config.password,
database=config.database
)
cursor = db.cursor()
cursor.execute("SELECT * FROM users")
username = input("Username: ").lower()
# Check if this user exists
user_present = False
for x in cursor:
if x[1] == username:
for current_user in range(len(users.users)):
if users.users[current_user] == username:
user_present = True
userID = x[0]
userID = current_user
if user_present == True:
print('''What do you want to do?
1. Create (N)ew post
@ -30,9 +24,8 @@ if user_present == True:
answer = input()
if answer == 'N' or answer == '1':
newpost.newpost(db, userID, username, datetime)
newpost.newpost(userID, username, datetime)
if answer == 'R' or answer == '2':
rebuild.rebuild(db)
rebuild.rebuild()
else:
print('Sorry, that account does not exist, If it should, please ask the webadmin to add this account')
db.commit()

35
initialise.py Normal file
View File

@ -0,0 +1,35 @@
import os
try:
import config
except:
print("You have no configuration file, please move example.config.py to config.py and modify the options to your usage")
exit()
def initialise():
# Create the posts db
try:
import posts
except:
with open("posts.py","w") as posts_db:
posts_db.write("posts = []")
# Create the users db
try:
import users
except:
users = []
print("What users do you want to have? You can always change this later by editing users.py (0 to finish)")
while True:
user_input = input()
if user_input == "0":
break
else:
users.append(user_input)
with open("users.py", "w") as users_db:
users_db.write(f"users = {users}")
# Create folders in the web directory
if not os.path.exists(f"{config.webroot}/post"):
os.makedirs(f"{config.webroot}/post")
if not os.path.exists(f"{config.webroot}/user"):
os.makedirs(f"{config.webroot}/user")
print("Successfully initialised Glogger")

View File

@ -18,7 +18,6 @@
# | editDate | varchar(255) | YES | | NULL | |
# +----------+--------------+------+-----+---------+----------------+
import mysql.connector
from datetime import datetime
import click # Used to write post content, it launches a text editor to type into
@ -26,20 +25,25 @@ import click # Used to write post content, it launches a text editor to type int
import create_pages
import config
import rebuild
try:
import posts
except:
print("No posts database")
try:
import users
except:
print("No users database")
import output
def newpost(db, userID, username, datetime):
title = input("Title: ")
content = click.edit()
content = content.replace("'", "&#39")
content = content.replace("\n", "\\n")
print(content)
datetime = datetime.now().strftime("%d%m%YZ%H%M%ST")
def newpost(userID, username, datetime):
title = input("Title: ")
content = click.edit()
content = content.replace("'", "&#39")
content = content.replace("\n", "\n")
output.log(content)
datetime = datetime.now().strftime("%d%m%YZ%H%M%ST")
posts.posts.append({'userID': userID, 'title': title, 'content': content, 'pubdate': datetime, 'editdate': datetime})
with open("posts.py", "w") as posts_file:
posts_file.write(f"posts = {posts.posts}")
cursor = db.cursor()
cursor.execute(f"INSERT INTO posts (userID, title, content, pubDate, editDate) VALUES({userID}, '{title}', '{content}', '{datetime}', '{datetime}')")
cursor.execute(f"SELECT * FROM posts ORDER BY postID Desc LIMIT 1")
for x in cursor:
postID = x[0]
db.commit()
# Rebuild the config
rebuild.rebuild(db)
rebuild.rebuild()

View File

@ -1,15 +1,17 @@
import config
from datetime import datetime
import posts
def parse_post_format(post, record, username):
post = post.replace("%S", config.post_seperator)
post = post.replace("%T", record[2])
post = post.replace("%D", datetime.strptime(str(record[4]),"%d%m%YZ%H%M%ST").strftime(config.date_format))
post = post.replace("%E", datetime.strptime(str(record[5]),"%d%m%YZ%H%M%ST").strftime(config.date_format))
post = post.replace("%C", record[3])
post = post.replace("%L", f"{config.site_url}/post/{record[0]}.gmi")
post = post.replace("%U", f"{config.site_url}/user/{username}.gmi")
post = post.replace("%N", username)
def parse_post_format(post, post_index, username):
post_data = posts.posts[post_index]
post = post.replace("%S", config.post_seperator)
post = post.replace("%T", post_data["title"])
post = post.replace("%D", datetime.strptime(str(post_data["pubdate"]),"%d%m%YZ%H%M%ST").strftime(config.date_format))
post = post.replace("%E", datetime.strptime(str(post_data["editdate"]),"%d%m%YZ%H%M%ST").strftime(config.date_format))
post = post.replace("%C", post_data["content"])
post = post.replace("%L", f"{config.site_url}/post/{post_index}.gmi")
post = post.replace("%U", f"{config.site_url}/user/{username}.gmi")
post = post.replace("%N", username)
return post
return post

View File

@ -1,11 +1,16 @@
import config
import create_pages
def rebuild(db):
cursor = db.cursor()
cursor.execute('SELECT * FROM users')
for x in cursor:
create_pages.create_user_page(x[0], x[1], db)
create_pages.create_timeline(db)
cursor.execute('SELECT posts.postID, users.username, posts.title, posts.content, posts.pubDate, posts.editDate FROM posts JOIN users ON posts.userID=users.userID')
for x in cursor:
create_pages.create_post_page(x, db)
try:
import users
except:
print("No users database")
try:
import posts
except:
print("No posts database")
def rebuild():
create_pages.create_timeline()
for current_user_index in range(len(users.users)):
create_pages.create_user_page(current_user_index, users.users[current_user_index])
for current_post_index in range(len(posts.posts)):
create_pages.create_post_page(current_post_index)