ttbp/bin/core.py

205 lines
4.8 KiB
Python
Raw Normal View History

2016-04-30 01:56:40 +00:00
#!/usr/bin/python
import os
import time
2016-05-04 15:00:28 +00:00
import subprocess
import re
import mistune
2016-05-01 22:26:26 +00:00
import chatter
2016-04-30 01:56:40 +00:00
2016-04-30 23:47:49 +00:00
SOURCE = os.path.join("/home", "endorphant", "projects", "ttbp", "bin")
USER = os.path.basename(os.path.expanduser("~"))
PATH = os.path.join("/home", USER, ".ttbp")
LIVE = "http://tilde.town/~"
WWW = os.path.join(PATH, "www")
2016-04-30 04:00:55 +00:00
CONFIG = os.path.join(PATH, "config")
2016-04-30 23:47:49 +00:00
DATA = os.path.join(PATH, "entries")
2016-04-30 01:56:40 +00:00
2016-05-01 22:26:26 +00:00
HEADER = ""
FOOTER = ""
FILES = []
2016-04-30 02:22:21 +00:00
MONTHS = {
"01":"january",
"02":"february",
"03":"march",
"04":"april",
"05":"may",
"06":"june",
"07":"july",
"08":"august",
"09":"september",
"10":"october",
"11":"november",
"12":"december"
}
2016-05-01 22:26:26 +00:00
def load():
global HEADER
global FOOTER
2016-04-30 01:56:40 +00:00
2016-05-01 22:26:26 +00:00
HEADER = open(os.path.join(CONFIG, "header.txt")).read()
FOOTER = open(os.path.join(CONFIG, "footer.txt")).read()
2016-04-30 01:56:40 +00:00
2016-05-01 23:34:20 +00:00
load_files()
def load_files():
global FILES
FILES = []
2016-05-03 17:14:53 +00:00
for filename in os.listdir(DATA):
filename = os.path.join(DATA, filename)
if os.path.isfile(filename) and valid(filename):
2016-05-03 17:14:53 +00:00
FILES.append(filename)
2016-04-30 01:56:40 +00:00
2016-05-01 22:26:26 +00:00
FILES.sort()
FILES.reverse()
2016-04-30 01:56:40 +00:00
def write(outurl="default.html"):
outfile = open(os.path.join(WWW, outurl), "w")
outfile.write("<!--generated by the tilde.town blogging platform on "+time.strftime("%d %B %y")+"\nhttp://tilde.town/~endorphant/ttbp/-->\n\n")
2016-04-30 01:56:40 +00:00
for line in HEADER:
outfile.write(line)
outfile.write("\n")
2016-05-03 17:14:53 +00:00
for filename in FILES:
write_page(filename)
for line in write_entry(filename):
2016-04-30 01:56:40 +00:00
outfile.write(line)
outfile.write("\n")
2016-04-30 01:56:40 +00:00
for line in FOOTER:
outfile.write(line)
outfile.close()
2016-04-30 23:47:49 +00:00
return os.path.join(LIVE+USER,os.path.basename(os.path.realpath(WWW)),outurl)
2016-04-30 04:00:55 +00:00
2016-05-03 17:14:53 +00:00
def write_page(filename):
# makes a single permalink page
outurl = os.path.join(WWW, "".join(parse_date(filename))+".html")
outfile = open(outurl, "w")
outfile.write("<!--generated by the tilde.town blogging platform on "+time.strftime("%d %B %y")+"\nhttp://tilde.town/~endorphant/ttbp/-->\n\n")
for line in HEADER:
outfile.write(line)
outfile.write("\n")
for line in write_entry(filename):
outfile.write(line)
outfile.write("\n")
for line in FOOTER:
outfile.write(line)
outfile.close()
return outurl
def write_entry(filename):
2016-04-30 01:56:40 +00:00
# dump given file into entry format, return as list of strings
2016-05-03 17:14:53 +00:00
date = parse_date(filename)
2016-04-30 02:09:30 +00:00
2016-04-30 01:56:40 +00:00
entry = [
2016-04-30 02:09:30 +00:00
"\t\t<p><a name=\""+date[0]+date[1]+date[2]+"\"></a><br /><br /></p>\n",
2016-04-30 01:56:40 +00:00
"\t\t<div class=\"entry\">\n",
"\t\t\t<h5><a href=\"#"+date[0]+date[1]+date[2]+"\">"+date[2]+"</a> "+MONTHS[date[1]]+" "+date[0]+"</h5>\n"
#"\t\t\t<P>"
2016-04-30 01:56:40 +00:00
]
raw = []
2016-05-03 17:14:53 +00:00
rawfile = open(os.path.join(DATA, filename), "r")
2016-04-30 01:56:40 +00:00
for line in rawfile:
raw.append(line)
rawfile.close()
entry.append("\t\t\t"+mistune.markdown("".join(raw), escape=False, hard_wrap=False))
2016-04-30 01:56:40 +00:00
#for line in raw:
#entry.append(line+"\t\t\t")
#if line == "\n":
# entry.append("</p>\n\t\t\t<p>")
#entry.append("</p>\n")
2016-05-03 17:14:53 +00:00
entry.append("\t\t\t<p style=\"font-size:.6em; font-color:#808080; text-align: right;\"><a href=\""+"".join(date)+".html\">permalink</a></p>\n")
entry.append("\n\t\t</div>\n")
2016-04-30 01:56:40 +00:00
return entry
def parse_date(file):
# assuming a filename of YYYYMMDD.txt, returns a list of
# ['YYYY', 'MM', 'DD']
2016-04-30 02:09:30 +00:00
rawdate = os.path.splitext(os.path.basename(file))[0]
date = [rawdate[0:4], rawdate[4:6], rawdate[6:]]
return date
2016-05-04 15:00:28 +00:00
def meta(entries = FILES):
# takes a list of filenames and returns:
# [0] absolute path
# [1] ctime
# [2] wc -w
# [3] timestamp "DD month YYYY at HH:MM"
# [4] entry date YYYY-MM-DD
# [5] author
2016-05-04 15:00:28 +00:00
# sorted in reverse date order by [4]
meta = []
for filename in entries:
2016-05-04 15:00:28 +00:00
ctime = os.path.getctime(filename)
wc = subprocess.check_output(["wc","-w",filename]).split()[0]
2016-05-05 00:07:42 +00:00
timestamp = time.strftime("%Y-%m-%d at %H:%M", time.localtime(ctime))
2016-05-04 15:00:28 +00:00
date = "-".join(parse_date(filename))
author = os.path.split(os.path.split(os.path.split(os.path.split(filename)[0])[0])[0])[1]
2016-05-04 15:00:28 +00:00
meta.append([filename, ctime, wc, timestamp, date, author])
2016-05-04 15:00:28 +00:00
meta.sort(key = lambda filename:filename[4])
meta.reverse()
2016-05-04 15:00:28 +00:00
return meta
def valid(filename):
# check if the filename is YYYYMMDD.txt
filesplit = os.path.splitext(os.path.basename(filename))
if filesplit[1] != ".txt":
return False
pattern = '^((19|20)\d{2})(0[1-9]|1[0-2])(0[1-9]|1\d|2\d|3[01])$'
if not re.match(pattern, filesplit[0]):
return False
return True
#############
#############
#############
2016-05-04 15:00:28 +00:00
def test():
load()
metaTest = meta()
for x in metaTest:
print(x)