Implement uploading blog in Base32 encoding, fix metadata retrieval functionality. Ensure title, author and optional description field is including in the HTML blog generation
This commit is contained in:
parent
ee7592f0fb
commit
3776666639
|
|
@ -45,24 +45,27 @@ def getBlogTitle(blogID: int) -> str:
|
||||||
try:
|
try:
|
||||||
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
|
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
|
||||||
title = orgHandler.checkAndRetrieveMetadata(fileData, "TITLE")
|
title = orgHandler.checkAndRetrieveMetadata(fileData, "TITLE")
|
||||||
|
fileData.close()
|
||||||
if title:
|
if title:
|
||||||
return title
|
return title
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
debugPrint("Error getting blog title! " + repr(error))
|
debugPrint("Error getting blog title! " + repr(error))
|
||||||
|
|
||||||
def getBlogDescription(blogID: int) -> str:
|
def getBlogDescription(blogID: int) -> tuple:
|
||||||
debugPrint("Attempting to retrieve blog description of blog ID " + str(blogID))
|
debugPrint("Attempting to retrieve blog description of blog ID " + str(blogID))
|
||||||
try:
|
try:
|
||||||
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
|
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
|
||||||
orgRoot = loads(fileData.read())
|
|
||||||
|
|
||||||
fileData.readline()
|
|
||||||
shortDescription = orgHandler.checkAndRetrieveMetadata(fileData, "DESCRIPTION")
|
shortDescription = orgHandler.checkAndRetrieveMetadata(fileData, "DESCRIPTION")
|
||||||
|
fileData.close()
|
||||||
|
fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r')
|
||||||
|
orgRoot = loads(fileData.read())
|
||||||
|
fileData.close()
|
||||||
if not shortDescription:
|
if not shortDescription:
|
||||||
debugPrint("No valid description found, will generate a placeholder from the text itself...")
|
debugPrint("No valid description found, will generate a placeholder from the text itself...")
|
||||||
firstText = orgRoot[1].body
|
firstText = orgRoot[1].body
|
||||||
shortDescription = (firstText[:60] + "...") if len(firstText) > 60 else firstText
|
shortDescription = (firstText[:60] + "...") if len(firstText) > 60 else firstText
|
||||||
return shortDescription
|
return (shortDescription, False)
|
||||||
|
return (shortDescription, True)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
debugPrint("Error getting blog description! Unexpected error: " + repr(error) + ".")
|
debugPrint("Error getting blog description! Unexpected error: " + repr(error) + ".")
|
||||||
|
|
||||||
|
|
@ -94,7 +97,16 @@ def generateBlogTitle(dbConnection: psycopg2.extensions.connection, blogID: int)
|
||||||
return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "title", getBlogTitle(blogID))
|
return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "title", getBlogTitle(blogID))
|
||||||
|
|
||||||
def generateBlogDescription(dbConnection: psycopg2.extensions.connection, blogID: int) -> tuple:
|
def generateBlogDescription(dbConnection: psycopg2.extensions.connection, blogID: int) -> tuple:
|
||||||
return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "description", getBlogDescription(blogID))
|
return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "description", getBlogDescription(blogID)[0])
|
||||||
|
|
||||||
|
def generateBlogHTMLContents(dbConnection: psycopg2.extensions.connection, orgParsed: str, userID: int, blogID: int) -> str:
|
||||||
|
generatedHTML = orgParsed
|
||||||
|
shortDescription = getBlogDescription(blogID)
|
||||||
|
if shortDescription[1]:
|
||||||
|
generatedHTML = "<p>" + shortDescription[0] + "</p>\n" + generatedHTML
|
||||||
|
generatedHTML = "<h2>" + userHandler.getUserInfoByID(dbConnection, userID, "username") + "</h2>\n" + generatedHTML
|
||||||
|
generatedHTML = "<h1>" + getBlogTitle(blogID) + "</h1>\n" + generatedHTML
|
||||||
|
return generatedHTML
|
||||||
|
|
||||||
def uploadBlog(dbConnection: psycopg2.extensions.connection, userID: int, orgRawIn: str):
|
def uploadBlog(dbConnection: psycopg2.extensions.connection, userID: int, orgRawIn: str):
|
||||||
try:
|
try:
|
||||||
|
|
@ -113,8 +125,10 @@ def uploadBlog(dbConnection: psycopg2.extensions.connection, userID: int, orgRaw
|
||||||
|
|
||||||
debugPrint("Attempting to write new blog file " + blogDir + "/" + str(blogID) + "/" + str(blogID) + ".html...")
|
debugPrint("Attempting to write new blog file " + blogDir + "/" + str(blogID) + "/" + str(blogID) + ".html...")
|
||||||
HTMLFileData = open(newBlogDir + "/" + str(blogID) + ".html", 'w')
|
HTMLFileData = open(newBlogDir + "/" + str(blogID) + ".html", 'w')
|
||||||
HTMLFileData.write(orgParsedOut)
|
orgFileData = open(newBlogDir + "/" + str(blogID) + ".org", 'r')
|
||||||
|
HTMLFileData.write(generateBlogHTMLContents(dbConnection, orgParsedOut, userID, blogID))
|
||||||
HTMLFileData.close()
|
HTMLFileData.close()
|
||||||
|
orgFileData.close()
|
||||||
|
|
||||||
generateBlogTitle(dbConnection, blogID)
|
generateBlogTitle(dbConnection, blogID)
|
||||||
generateBlogDescription(dbConnection, blogID)
|
generateBlogDescription(dbConnection, blogID)
|
||||||
|
|
|
||||||
4
main.py
4
main.py
|
|
@ -2,6 +2,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import atexit
|
import atexit
|
||||||
import signal
|
import signal
|
||||||
|
import base64
|
||||||
from typing import Union, Annotated
|
from typing import Union, Annotated
|
||||||
|
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
|
|
@ -284,8 +285,9 @@ class postblogCreateBody(BaseModel):
|
||||||
def postblogCreate(body: postblogCreateBody):
|
def postblogCreate(body: postblogCreateBody):
|
||||||
try:
|
try:
|
||||||
if tokenHandler.validateTokenExistence(dbConnection, body.authToken):
|
if tokenHandler.validateTokenExistence(dbConnection, body.authToken):
|
||||||
|
decodedOrgContents = base64.b32decode(body.orgContents).decode()
|
||||||
userID = userHandler.getIDByAuthToken(dbConnection, body.authToken)
|
userID = userHandler.getIDByAuthToken(dbConnection, body.authToken)
|
||||||
newBlog = blogHandler.uploadBlog(dbConnection, userID, body.orgContents)
|
newBlog = blogHandler.uploadBlog(dbConnection, userID, decodedOrgContents)
|
||||||
if newBlog:
|
if newBlog:
|
||||||
return {
|
return {
|
||||||
"success": True,
|
"success": True,
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import os
|
||||||
|
|
||||||
from orgparse import loads
|
from orgparse import loads
|
||||||
|
|
||||||
blogDir: str = "./blogs"
|
blogDir: str = "./blogs"
|
||||||
|
|
@ -7,15 +9,14 @@ def debugPrint(msg: str) -> None:
|
||||||
if debug:
|
if debug:
|
||||||
print("(ORG HANDLER) PRINT: " + msg)
|
print("(ORG HANDLER) PRINT: " + msg)
|
||||||
|
|
||||||
def checkAndRetrieveMetadata(fileData: str, metadataName: str):
|
def checkAndRetrieveMetadata(fileData, metadataName: str):
|
||||||
line = fileData.readline()
|
|
||||||
metadataFullName = "#+" + metadataName + ":"
|
metadataFullName = "#+" + metadataName + ":"
|
||||||
if metadataFullName in line:
|
for line in fileData:
|
||||||
linetoarray = line.split()
|
if metadataFullName in line:
|
||||||
return " ".join(linetoarray[1:])
|
linetoarray = line.split()
|
||||||
else:
|
return " ".join(linetoarray[1:])
|
||||||
debugPrint("Could not find " + metadataFullName + " metadata field of document!")
|
debugPrint("Could not find " + metadataFullName + " metadata field of document!")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def orgToHTML(orgData: str) -> str:
|
def orgToHTML(orgData: str) -> str:
|
||||||
try:
|
try:
|
||||||
|
|
@ -24,8 +25,9 @@ def orgToHTML(orgData: str) -> str:
|
||||||
|
|
||||||
for node in orgRoot[1:]:
|
for node in orgRoot[1:]:
|
||||||
if node.heading:
|
if node.heading:
|
||||||
headingLevel = str(node.level if node.level <= 6 else 6)
|
headingLevel = node.level if node.level <= 6 else 6
|
||||||
parsedHTML += "<h" + headingLevel + ">" + node.heading + "</h" + headingLevel + ">" + "\n"
|
headingLevel += 2
|
||||||
|
parsedHTML += "<h" + str(headingLevel) + ">" + node.heading + "</h" + str(headingLevel) + ">" + "\n"
|
||||||
if node.body:
|
if node.body:
|
||||||
parsedHTML += node.body + "\n"
|
parsedHTML += node.body + "\n"
|
||||||
return parsedHTML
|
return parsedHTML
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue