working on private blogging

first, breaking out all the setup optiosn into smaller functions for
better readability. adding an option to set blog to be published or not,
and checks this before printing public feels list.
master
endorphant 2016-05-15 18:15:53 -04:00
parent e2bde9a42a
commit fecb5b9907
5 changed files with 176 additions and 36 deletions

View File

@ -189,42 +189,56 @@ def setup():
global SETTINGS global SETTINGS
# editor selection # editor selection
print_menu(EDITORS) SETTINGS.update({"editor": select_editor()})
choice = raw_input("\npick your favorite text editor: ")
while choice not in ['0', '1', '2', '3', '4']:
choice = raw_input("\nplease pick a number from the list: ")
SETTINGS["editor"] = EDITORS[int(choice)]
redraw("text editor set to: "+SETTINGS["editor"]) redraw("text editor set to: "+SETTINGS["editor"])
# set up public publish option
#publish = input_yn("""\
#do you want to publish your feels online?
#if yes, i'll make a directory in your public_html where your blog posts
#will be published. if not, your posts will only be readable from
#within the tilde.town network.
#you can change this option any time.
#please enter\
#""")
SETTINGS.update({"publishing":select_publishing()})
redraw("blog publishing: "+str(publishing()))
# publish directory selection # publish directory selection
if SETTINGS["publish dir"]: #if SETTINGS["publish dir"]:
print("\tcurrent publish dir:\t"+os.path.join(PUBLIC, SETTINGS["publish dir"])+"\n\n") # print("\tcurrent publish dir:\t"+os.path.join(PUBLIC, SETTINGS["publish dir"])+"\n\n")
choice = raw_input("\nwhere do you want your blog published? (leave blank to use default \"blog\") ") #choice = raw_input("\nwhere do you want your blog published? (leave blank to use default \"blog\") ")
if not choice: #if not choice:
choice = "blog" # choice = "blog"
publishing = os.path.join(PUBLIC, choice) #publishing = os.path.join(PUBLIC, choice)
while os.path.exists(publishing): #while os.path.exists(publishing):
second = raw_input("\n"+publishing+" already exists!\nif you're sure you want to use it, hit <enter> to confirm. otherwise, pick another location: ") # second = raw_input("\n"+publishing+" already exists!\nif you're sure you want to use it, hit <enter> to confirm. otherwise, pick another location: ")
if second == "": # if second == "":
break # break
choice = second # choice = second
publishing = os.path.join(PUBLIC, choice) # publishing = os.path.join(PUBLIC, choice)
SETTINGS["publish dir"] = choice #SETTINGS.update({"publish dir": choice})
if publishing():
SETTINGS.update({"publish dir": select_publish_dir()})
# set up publish directory # set up publish directory
if not os.path.exists(publishing): #publishing = os.path.join(PUBLIC, SETTINGS.get("publish dir"))
subprocess.call(["mkdir", publishing]) #if not os.path.exists(publishing):
subprocess.call(["touch", os.path.join(publishing, "index.html")]) # subprocess.call(["mkdir", publishing])
index = open(os.path.join(publishing, "index.html"), "w") # subprocess.call(["touch", os.path.join(publishing, "index.html")])
index.write("<h1>ttbp blog placeholder</h1>") # index = open(os.path.join(publishing, "index.html"), "w")
index.close() # index.write("<h1>ttbp blog placeholder</h1>")
if os.path.exists(WWW): # index.close()
subprocess.call(["rm", WWW]) #if os.path.exists(WWW):
subprocess.call(["ln", "-s", publishing, WWW]) # subprocess.call(["rm", WWW])
print("\n\tpublishing to "+LIVE+USER+"/"+SETTINGS["publish dir"]+"/\n\n") #subprocess.call(["ln", "-s", publishing, WWW])
#print("\n\tpublishing to "+LIVE+USER+"/"+SETTINGS.get("publish dir")+"/\n\n")
make_publish_dir()
# save settings # save settings
ttbprc = open(TTBPRC, "w") ttbprc = open(TTBPRC, "w")
@ -283,8 +297,9 @@ def main_menu():
redraw("now viewing most recent entries\n\n") redraw("now viewing most recent entries\n\n")
view_feed() view_feed()
elif choice == '4': elif choice == '4':
pretty_settings = "\n\ttext editor:\t" +SETTINGS["editor"] pretty_settings = "\n\ttext editor:\t" +SETTINGS.get("editor")
pretty_settings += "\n\tpublish dir:\t" +os.path.join(PUBLIC, SETTINGS["publish dir"]) pretty_settings += "\n\tpublish dir:\t" +os.path.join(PUBLIC, SETTINGS.get("publish dir"))
pretty_settings += "\n\tpubishing:\t"+str(SETTINGS.get("publishing"))
redraw("now changing your settings. press <ctrl-c> if you didn't mean to do this.\n\ncurrent settings "+pretty_settings+"\n") redraw("now changing your settings. press <ctrl-c> if you didn't mean to do this.\n\ncurrent settings "+pretty_settings+"\n")
try: try:
@ -336,7 +351,7 @@ def view_neighbors(users):
for user in users: for user in users:
userRC = json.load(open(os.path.join("/home", user, ".ttbp", "config", "ttbprc"))) userRC = json.load(open(os.path.join("/home", user, ".ttbp", "config", "ttbprc")))
url = LIVE+user+"/"+userRC["publish dir"] url = LIVE+user+"/"+userRC.get("publish dir")
count = 0 count = 0
lastfile = "" lastfile = ""
files = os.listdir(os.path.join("/home", user, ".ttbp", "entries")) files = os.listdir(os.path.join("/home", user, ".ttbp", "entries"))
@ -538,8 +553,13 @@ def www_neighbors(users):
userList = [] userList = []
for user in users: for user in users:
if not publishing(user):
continue
userRC = json.load(open(os.path.join("/home", user, ".ttbp", "config", "ttbprc"))) userRC = json.load(open(os.path.join("/home", user, ".ttbp", "config", "ttbprc")))
url = LIVE+user+"/"+userRC["publish dir"] url = LIVE+user+"/"+userRC["publish dir"]
lastfile = "" lastfile = ""
files = os.listdir(os.path.join("/home", user, ".ttbp", "entries")) files = os.listdir(os.path.join("/home", user, ".ttbp", "entries"))
files.sort() files.sort()
@ -590,6 +610,91 @@ def list_select(options, prompt):
return ans return ans
def input_yn(query):
# returns boolean True or False
ans = raw_input(query+" [y/n] ")
while ans not in ["y", "n"]:
ans = raw_input("'y' or 'n' please: ")
if ans == "y":
return True
else:
return False
def publishing(username = USER):
# checks .ttbprc for whether or not user wants their blog published online
ttbprc = {}
if username == USER:
ttbprc = SETTINGS
else:
ttbprc = json.load(open(os.path.join("/home", username, ".ttbp", "config", "ttbprc")))
return ttbprc.get("publishing")
def select_editor():
# setup helper for editor selection
print_menu(EDITORS)
choice = raw_input("\npick your favorite text editor: ")
while choice not in ['0', '1', '2', '3', '4']:
choice = raw_input("\nplease pick a number from the list: ")
return EDITORS[int(choice)]
def select_publish_dir():
# setup helper for publish directory selection
if SETTINGS["publish dir"]:
print("\tcurrent publish dir:\t"+os.path.join(PUBLIC, SETTINGS["publish dir"])+"\n\n")
choice = raw_input("\nwhere do you want your blog published? (leave blank to use default \"blog\") ")
if not choice:
choice = "blog"
publishing = os.path.join(PUBLIC, choice)
while os.path.exists(publishing):
second = raw_input("\n"+publishing+" already exists!\nif you're sure you want to use it, hit <enter> to confirm. otherwise, pick another location: ")
if second == "":
break
choice = second
publishing = os.path.join(PUBLIC, choice)
return choice
def select_publishing():
# setup helper for toggling publishing
return input_yn("""\
do you want to publish your feels online?
if yes, i'll make a directory in your public_html where your blog posts
will be published. if not, your posts will only be readable from
within the tilde.town network.
you can change this option any time.
please enter\
""")
def make_publish_dir():
# setup helper to create publishing directory
publishing = os.path.join(PUBLIC, SETTINGS.get("publish dir"))
if not os.path.exists(publishing):
subprocess.call(["mkdir", publishing])
subprocess.call(["touch", os.path.join(publishing, "index.html")])
index = open(os.path.join(publishing, "index.html"), "w")
index.write("<h1>ttbp blog placeholder</h1>")
index.close()
if os.path.exists(WWW):
subprocess.call(["rm", WWW])
subprocess.call(["ln", "-s", publishing, WWW])
print("\n\tpublishing to "+LIVE+USER+"/"+SETTINGS.get("publish dir")+"/\n\n")
##### #####
start() start()

View File

@ -5,6 +5,6 @@
| |___ |___ |___ | [__ |___ |\ | | __ | |\ | |___ | | |___ |___ |___ | [__ |___ |\ | | __ | |\ | |___ |
| | |___ |___ |___ ___] |___ | \| |__] | | \| |___ | | | |___ |___ |___ ___] |___ | \| |__] | | \| |___ |
| | | |
| ver 0.8.0 (almost stable) | | ver 0.8.5 (almost stable) |
| ~endorphant/projects/ttbp/changelog.txt | | ~endorphant/projects/ttbp/changelog.txt |
|__________________________________________________________| |__________________________________________________________|

View File

@ -187,7 +187,7 @@ def write_global_feed(blogList):
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3.2//EN\"> <!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3.2//EN\">
<html> <html>
<head> <head>
<title>tilde.town global feels engine</title> <title>tilde.town feels engine</title>
<link rel=\"stylesheet\" href=\"style.css\" /> <link rel=\"stylesheet\" href=\"style.css\" />
</head> </head>
<body> <body>
@ -202,6 +202,7 @@ def write_global_feed(blogList):
<p>&nbsp;</p> <p>&nbsp;</p>
<h3>live feels-sharing:</h3> <h3>live feels-sharing:</h3>
<p><i>(time not exactly to scale)</i></p>
<div class=\"feed\"> <div class=\"feed\">
<ul> <ul>
""") """)

View File

@ -270,6 +270,7 @@ def main_menu():
redraw() redraw()
today = time.strftime("%Y%m%d") today = time.strftime("%Y%m%d")
write_entry(os.path.join(DATA, today+".txt")) write_entry(os.path.join(DATA, today+".txt"))
www_neighbors(find_ttbps())
elif choice == '1': elif choice == '1':
redraw("here are your recorded feels, listed by date:\n\n") redraw("here are your recorded feels, listed by date:\n\n")
view_own() view_own()
@ -340,7 +341,6 @@ def view_neighbors(users):
files = os.listdir(os.path.join("/home", user, ".ttbp", "entries")) files = os.listdir(os.path.join("/home", user, ".ttbp", "entries"))
files.sort() files.sort()
for filename in files: for filename in files:
#if os.path.splitext(filename)[1] == ".txt" and len(os.path.splitext(filename)[0]) == 8:
if core.valid(filename): if core.valid(filename):
count += 1 count += 1
lastfile = os.path.join("/home", user, ".ttbp", "entries", filename) lastfile = os.path.join("/home", user, ".ttbp", "entries", filename)
@ -531,6 +531,40 @@ def find_ttbps():
return users return users
def www_neighbors(users):
# takes a raw list of valid users and formats for www view
userList = []
for user in users:
userRC = json.load(open(os.path.join("/home", user, ".ttbp", "config", "ttbprc")))
url = LIVE+user+"/"+userRC["publish dir"]
lastfile = ""
files = os.listdir(os.path.join("/home", user, ".ttbp", "entries"))
files.sort()
for filename in files:
if core.valid(filename):
lastfile = os.path.join("/home", user, ".ttbp", "entries", filename)
ago = "never"
if lastfile:
last = os.path.getctime(lastfile)
since = time.time()-last
ago = util.pretty_time(int(since)) + " ago"
else:
last = 0
userList.append(["<a href=\""+url+"\">~"+user+"</a> ("+ago+")", last])
# sort user by most recent entry
userList.sort(key = lambda userdata:userdata[1])
userList.reverse()
sortedUsers = []
for user in userList:
sortedUsers.append(user[0])
core.write_global_feed(sortedUsers)
def list_select(options, prompt): def list_select(options, prompt):
# runs the prompt for the list until a valid index is imputted # runs the prompt for the list until a valid index is imputted

View File

@ -23,10 +23,10 @@ CHANGELOG:
ver 0.8.5 ver 0.8.5
-publish feels directory to ~endorphant/ttbp/index.html -publish feels directory to ~endorphant/ttbp/index.html
-(beta only) colorized menus
ver 0.8.0 ver 0.8.0
-markdown parsing for entries -markdown parsing for entries
-(beta only) colorized menus
ver 0.7.5 ver 0.7.5
-COLORFUL BANNER -COLORFUL BANNER