forked from endorphant/ttbp
		
	moving around a bunch of file processing backend stuff
This commit is contained in:
		
							parent
							
								
									d001c14bc9
								
							
						
					
					
						commit
						8e35fd079f
					
				| @ -71,7 +71,8 @@ WWW = os.path.join(PATH, 'www') | ||||
| GOPHER_PATH = os.path.join(USER_HOME, 'public_gopher', 'feels') | ||||
| USER_CONFIG = os.path.join(PATH, 'config') | ||||
| TTBPRC = os.path.join(USER_CONFIG, 'ttbprc') | ||||
| USER_DATA = os.path.join(PATH, 'entries') | ||||
| MAIN_FEELS = os.path.join(PATH, 'entries') | ||||
| BURIED_FEELS = os.path.join(MAIN_FEELS, 'buried') | ||||
| NOPUB = os.path.join(USER_CONFIG, "nopub") | ||||
| 
 | ||||
| ## UI | ||||
|  | ||||
							
								
								
									
										81
									
								
								ttbp/core.py
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								ttbp/core.py
									
									
									
									
									
								
							| @ -41,6 +41,7 @@ import json | ||||
| 
 | ||||
| from . import chatter | ||||
| from . import config | ||||
| from . import gopher | ||||
| 
 | ||||
| FEED = os.path.join("/home", "endorphant", "public_html", "ttbp", "index.html") | ||||
| SETTINGS = {} | ||||
| @ -75,19 +76,24 @@ def reload_ttbprc(ttbprc={}): | ||||
| 
 | ||||
|     SETTINGS = ttbprc | ||||
| 
 | ||||
| def get_files(feelsdir=config.MAIN_FEELS): | ||||
|     """Returns a list of user's feels in the given directory (defaults to main | ||||
|     feels dir)""" | ||||
| 
 | ||||
| def get_files(): | ||||
|     """Returns a list of user's feels.""" | ||||
|     files = [] | ||||
|     for filename in os.listdir(config.USER_DATA): | ||||
|     for filename in os.listdir(feelsdir): | ||||
|         if nopub(filename): | ||||
|             unpublish_feel(filename) | ||||
|             ''' | ||||
|             link = os.path.join(config.WWW, | ||||
|                                 os.path.splitext( | ||||
|                                     os.path.basename(filename))[0]+".html") | ||||
|             if os.path.exists(link): | ||||
|                 subprocess.call(["rm", link]) | ||||
|             continue | ||||
|         filename = os.path.join(config.USER_DATA, filename) | ||||
|             ''' | ||||
| 
 | ||||
|         filename = os.path.join(feelsdir, filename) | ||||
|         if os.path.isfile(filename) and valid(filename): | ||||
|             files.append(filename) | ||||
| 
 | ||||
| @ -96,19 +102,18 @@ def get_files(): | ||||
| 
 | ||||
|     return files | ||||
| 
 | ||||
| 
 | ||||
| def load_files(): | ||||
| def load_files(feelsdir=config.MAIN_FEELS): | ||||
|     ''' | ||||
|     file loader | ||||
| 
 | ||||
|     * reads user's nopub file | ||||
|     * loads all valid filenames that are not excluded in nopub to global files list | ||||
|     * calls get_files() to load all files for given directory | ||||
|     ''' | ||||
| 
 | ||||
|     global FILES | ||||
| 
 | ||||
|     load_nopubs() | ||||
|     FILES = get_files() | ||||
|     FILES = get_files(feelsdir) | ||||
| 
 | ||||
| def load_nopubs(): | ||||
|     """Load a list of the user's nopub entries. | ||||
| @ -127,7 +132,7 @@ def load_nopubs(): | ||||
| 
 | ||||
| ## html outputting | ||||
| 
 | ||||
| def write(outurl="default.html"): | ||||
| def write_html(outurl="default.html"): | ||||
|     ''' | ||||
|     main page renderer | ||||
| 
 | ||||
| @ -167,7 +172,7 @@ def write_page(filename): | ||||
|     url | ||||
|     ''' | ||||
| 
 | ||||
|     outurl = os.path.join(config.WWW, "".join(parse_date(filename))+".html") | ||||
|     outurl = os.path.join(config.WWW, "".join(util.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") | ||||
| @ -197,7 +202,7 @@ def write_entry(filename): | ||||
|     * return as list of strings | ||||
|     ''' | ||||
| 
 | ||||
|     date = parse_date(filename) | ||||
|     date = util.parse_date(filename) | ||||
| 
 | ||||
|     entry = [ | ||||
|         "\t\t<p><a name=\""+date[0]+date[1]+date[2]+"\"></a><br /><br /></p>\n", | ||||
| @ -207,7 +212,7 @@ def write_entry(filename): | ||||
|     ] | ||||
| 
 | ||||
|     raw = [] | ||||
|     rawfile = open(os.path.join(config.USER_DATA, filename), "r") | ||||
|     rawfile = open(os.path.join(config.MAIN_FEELS, filename), "r") | ||||
| 
 | ||||
|     for line in rawfile: | ||||
|         raw.append(line) | ||||
| @ -316,7 +321,7 @@ def meta(entries = FILES): | ||||
|       except subprocess.CalledProcessError: | ||||
|         wc = "???" | ||||
|       timestamp = time.strftime("%Y-%m-%d at %H:%M", time.localtime(mtime)) | ||||
|       date = "-".join(parse_date(filename)) | ||||
|       date = "-".join(util.parse_date(filename)) | ||||
|       author = os.path.split(os.path.split(os.path.split(os.path.split(filename)[0])[0])[0])[1] | ||||
| 
 | ||||
|       meta.append([filename, mtime, wc, timestamp, date, author]) | ||||
| @ -345,23 +350,6 @@ def valid(filename): | ||||
| 
 | ||||
|     return True | ||||
| 
 | ||||
| def parse_date(file): | ||||
|     ''' | ||||
|     parses date out of pre-validated filename | ||||
| 
 | ||||
|     * assumes a filename of YYYYMMDD.txt | ||||
|     * returns a list: | ||||
|       [0] 'YYYY' | ||||
|       [1] 'MM' | ||||
|       [2] 'DD' | ||||
|     ''' | ||||
| 
 | ||||
|     rawdate = os.path.splitext(os.path.basename(file))[0] | ||||
| 
 | ||||
|     date = [rawdate[0:4], rawdate[4:6], rawdate[6:]] | ||||
| 
 | ||||
|     return date | ||||
| 
 | ||||
| def find_ttbps(): | ||||
|     ''' | ||||
|     returns a list of users with a ttbp by checking for a valid ttbprc | ||||
| @ -457,12 +445,7 @@ def toggle_nopub(filename): | ||||
|         NOPUBS.remove(filename) | ||||
|     else: | ||||
|         NOPUBS.append(filename) | ||||
|         live_html = os.path.join(config.WWW, filename.split(".")[0]+".html") | ||||
|         if os.path.exists(live_html): | ||||
|             subprocess.call(["rm", live_html]) | ||||
|         live_gopher = os.path.join(config.GOPHER_PATH, filename) | ||||
|         if os.path.exists(live_gopher): | ||||
|             subprocess.call(["rm", live_gopher]) | ||||
|         unpublish_feel(filename) | ||||
| 
 | ||||
|     nopub_file = open(config.NOPUB, 'w') | ||||
|     nopub_file.write("""\ | ||||
| @ -475,9 +458,35 @@ def toggle_nopub(filename): | ||||
|     nopub_file.close() | ||||
| 
 | ||||
|     load_files() | ||||
|     write_html("index.html") | ||||
|     gopher.publish_gopher('feels', FILES) | ||||
| 
 | ||||
|     return action | ||||
| 
 | ||||
| def bury_feel(filename): | ||||
|     """buries given filename; this removes the feel from any publicly-readable | ||||
|     location, and moves the textfile to user's private feels directory""" | ||||
| 
 | ||||
|     pass | ||||
| 
 | ||||
| def delete_feel(filename): | ||||
|     """deletes given filename; removes the feel from publicly-readable | ||||
|     locations, then deletes the original file.""" | ||||
| 
 | ||||
|     pass | ||||
| 
 | ||||
| def unpublish_feel(filename): | ||||
|     """takes given filename and removes it from public_html and gopher_html, if | ||||
|     those locations exists. afterwards, regenerate index files appropriately.""" | ||||
| 
 | ||||
|     live_html = os.path.join(config.WWW, | ||||
|             os.path.splitext(os.path.basename(filename))[0]+".html") | ||||
|     #live_html = os.path.join(config.WWW, filename.split(".")[0]+".html") | ||||
|     if os.path.exists(live_html): | ||||
|         subprocess.call(["rm", live_html]) | ||||
|     live_gopher = os.path.join(config.GOPHER_PATH, filename) | ||||
|     if os.path.exists(live_gopher): | ||||
|         subprocess.call(["rm", live_gopher]) | ||||
| 
 | ||||
| ############# | ||||
| ############# | ||||
|  | ||||
| @ -7,7 +7,7 @@ import time | ||||
| import subprocess | ||||
| 
 | ||||
| from . import util | ||||
| from .core import parse_date | ||||
| #from .core import parse_date | ||||
| 
 | ||||
| GOPHER_PROMPT = """ | ||||
| 
 | ||||
| @ -73,7 +73,7 @@ def publish_gopher(gopher_path, entry_filenames): | ||||
|             if not os.path.exists(gopher_entry_symlink): | ||||
|                 subprocess.call(["ln", "-s", entry_filename, gopher_entry_symlink]) | ||||
| 
 | ||||
|             label = "-".join(parse_date(entry_filename)) | ||||
|             label = "-".join(util.parse_date(entry_filename)) | ||||
|             gophermap.write('0{file_label}\t{filename}\n'.format( | ||||
|                 file_label=label, | ||||
|                 filename=filename)) | ||||
|  | ||||
							
								
								
									
										39
									
								
								ttbp/ttbp.py
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								ttbp/ttbp.py
									
									
									
									
									
								
							| @ -272,7 +272,7 @@ press <enter> to begin, or <ctrl-c> to get out of here.""") | ||||
|     print("\ngenerating feels at {path}...".format(path=config.PATH).rstrip()) | ||||
|     subprocess.call(["mkdir", config.PATH]) | ||||
|     subprocess.call(["mkdir", config.USER_CONFIG]) | ||||
|     subprocess.call(["mkdir", config.USER_DATA]) | ||||
|     subprocess.call(["mkdir", config.MAIN_FEELS]) | ||||
| 
 | ||||
|     versionFile = os.path.join(config.PATH, "version") | ||||
|     open(versionFile, "w").write(__version__) | ||||
| @ -537,14 +537,14 @@ def main_menu(): | ||||
|     if choice == '0': | ||||
|         redraw() | ||||
|         today = time.strftime("%Y%m%d") | ||||
|         write_entry(os.path.join(config.USER_DATA, today+".txt")) | ||||
|         write_entry(os.path.join(config.MAIN_FEELS, today+".txt")) | ||||
|         core.www_neighbors() | ||||
|     elif choice == '1': | ||||
|         intro = "here are some options for managing your feels:" | ||||
|         redraw(intro) | ||||
|         review_menu(intro) | ||||
|         core.load_files() | ||||
|         core.write("index.html") | ||||
|         core.write_html("index.html") | ||||
|     elif choice == '2': | ||||
|         users = core.find_ttbps() | ||||
|         prompt = "the following {usercount} {are} recording feels on ttbp:".format( | ||||
| @ -620,10 +620,10 @@ def review_menu(intro=""): | ||||
| 
 | ||||
|     util.print_menu(menuOptions, SETTINGS.get("rainbows", False)) | ||||
| 
 | ||||
|     choice = util.list_select(menuOptions, "what would you like to do with your feels? (or 'back' to return home) ") | ||||
|     choice = util.list_select(menuOptions, "what would you like to do with your feels? (or 'q' to return home) ") | ||||
| 
 | ||||
|     top = "" | ||||
|     hasfeels = len(os.listdir(config.USER_DATA)) > 0 | ||||
|     hasfeels = len(os.listdir(config.MAIN_FEELS)) > 0 | ||||
|     nofeels = "you don't have any feels to work with, "+chatter.say("friend")+"\n\n> " | ||||
| 
 | ||||
|     if choice is not False: | ||||
| @ -727,7 +727,7 @@ def view_neighbors(users, prompt): | ||||
|         sortedUsers.append(user[0]) | ||||
|         userIndex.append(user[2]) | ||||
| 
 | ||||
|     choice = menu_handler(sortedUsers, "pick a townie to browse their feels, or type 'back' or 'q' to go home: ", 15, SETTINGS.get("rainbows", False), prompt) | ||||
|     choice = menu_handler(sortedUsers, "pick a townie to browse their feels, or type 'q' to go home: ", 15, SETTINGS.get("rainbows", False), prompt) | ||||
| 
 | ||||
|     if choice is not False: | ||||
|         redraw("~{user}'s recorded feels, listed by date: \n".format(user=userIndex[choice])) | ||||
| @ -765,7 +765,7 @@ def generate_feels_list(user): | ||||
|     showpub = False | ||||
| 
 | ||||
|     if user == config.USER: | ||||
|         entryDir = config.USER_DATA | ||||
|         entryDir = config.MAIN_FEELS | ||||
|         owner = "your" | ||||
|         if core.publishing(): | ||||
|             showpub = True | ||||
| @ -834,7 +834,7 @@ YYYYMMDD: """) | ||||
| here's a preview of that feel. press <q> when you're done reviewing! | ||||
| -------------------------------------------------------------""") | ||||
| 
 | ||||
|     if subprocess.call(["less", os.path.join(config.USER_DATA, feel+".txt")]): | ||||
|     if subprocess.call(["less", os.path.join(config.MAIN_FEELS, feel+".txt")]): | ||||
|         redraw("deleting feels") | ||||
|         print("""\ | ||||
| sorry, i couldn't find feels for {date}! | ||||
| @ -889,7 +889,7 @@ just in case a future version of you still wants to look them over. | ||||
|     time.sleep(1) | ||||
|     print("...") | ||||
| 
 | ||||
|     feelscount = len(os.listdir(config.USER_DATA)) | ||||
|     feelscount = len(os.listdir(config.MAIN_FEELS)) | ||||
| 
 | ||||
|     if feelscount > 0: | ||||
|         purgecode = util.genID(5) | ||||
| @ -910,8 +910,8 @@ the following purge code: | ||||
|             print("...") | ||||
|             time.sleep(1) | ||||
|             unpublish() | ||||
|             if not subprocess.call(["rm", "-rf", config.USER_DATA]): | ||||
|                 subprocess.call(["mkdir", config.USER_DATA]) | ||||
|             if not subprocess.call(["rm", "-rf", config.MAIN_FEELS]): | ||||
|                 subprocess.call(["mkdir", config.MAIN_FEELS]) | ||||
|                 print("ALL FEELS PURGED! you're ready to start fresh!") | ||||
|             else: | ||||
|                 print(""" | ||||
| @ -941,7 +941,7 @@ def show_credits(): | ||||
| 
 | ||||
| ## handlers | ||||
| 
 | ||||
| def write_entry(entry=os.path.join(config.USER_DATA, "test.txt")): | ||||
| def write_entry(entry=os.path.join(config.MAIN_FEELS, "test.txt")): | ||||
|     ''' | ||||
|     main feels-recording handler | ||||
|     ''' | ||||
| @ -962,18 +962,18 @@ def write_entry(entry=os.path.join(config.USER_DATA, "test.txt")): | ||||
|         core.toggle_nopub(os.path.basename(entry)) | ||||
|     else: | ||||
|         if core.publishing(): | ||||
|             core.write("index.html") | ||||
|             left = "posted to {url}/index.html\n\n>".format( | ||||
|             core.write_html("index.html") | ||||
|             left = "posted to {url}/index.html\n\n> ".format( | ||||
|                 url="/".join( | ||||
|                     [config.LIVE+config.USER, | ||||
|                         str(SETTINGS.get("publish dir"))])) | ||||
| 
 | ||||
|         if SETTINGS.get('gopher'): | ||||
|             gopher.publish_gopher('feels', core.get_files()) | ||||
|             left += " also posted to your ~/public_gopher!\n" | ||||
|             gopher.publish_gopher('feels', core.FILES) | ||||
|             left += "also posted to your ~/public_gopher!\n\n> " | ||||
| 
 | ||||
|     #core.load_files() | ||||
|     redraw(left + " thanks for sharing your feels!") | ||||
|     redraw(left + "thanks for sharing your feels!") | ||||
| 
 | ||||
|     return | ||||
| 
 | ||||
| @ -1015,7 +1015,6 @@ none of your feels will be viewable outside of this server)""" | ||||
|         action = core.toggle_nopub(target) | ||||
|         redraw(prompt) | ||||
| 
 | ||||
|         core.write("index.html") | ||||
|         if SETTINGS["gopher"]: | ||||
|             gopher.publish_gopher('feels', core.get_files()) | ||||
| 
 | ||||
| @ -1340,7 +1339,7 @@ def update_publishing(): | ||||
|             subprocess.call(["rm", os.path.join(config.PUBLIC, oldDir)]) | ||||
|         make_publish_dir(newDir) | ||||
|         core.load_files() | ||||
|         core.write("index.html") | ||||
|         core.write_html("index.html") | ||||
|     else: | ||||
|         unpublish() | ||||
|         SETTINGS.update({"publish dir": None}) | ||||
| @ -1444,7 +1443,7 @@ def update_user_version(): | ||||
| 
 | ||||
|             # repopulate html files | ||||
|             core.load_files() | ||||
|             core.write("index.html") | ||||
|             core.write_html("index.html") | ||||
| 
 | ||||
|         # add publishing setting | ||||
|         print("\nnew feature!\n") | ||||
|  | ||||
							
								
								
									
										19
									
								
								ttbp/util.py
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								ttbp/util.py
									
									
									
									
									
								
							| @ -26,6 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| import random | ||||
| import time | ||||
| from six.moves import input | ||||
| import os | ||||
| 
 | ||||
| import colorama | ||||
| import inflect | ||||
| @ -214,3 +215,21 @@ def input_yn(query): | ||||
|         ans = input("'y' or 'n' please: ") | ||||
| 
 | ||||
|     return ans == "y" | ||||
| 
 | ||||
| def parse_date(file): | ||||
|     ''' | ||||
|     parses date out of pre-validated filename | ||||
| 
 | ||||
|     * assumes a filename of YYYYMMDD.txt | ||||
|     * returns a list: | ||||
|       [0] 'YYYY' | ||||
|       [1] 'MM' | ||||
|       [2] 'DD' | ||||
|     ''' | ||||
| 
 | ||||
|     rawdate = os.path.splitext(os.path.basename(file))[0] | ||||
| 
 | ||||
|     date = [rawdate[0:4], rawdate[4:6], rawdate[6:]] | ||||
| 
 | ||||
|     return date | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user