forked from endorphant/ttbp
		
	Merge pull request #18 from tildetown/packaging
Packaging and config consolidation
This commit is contained in:
		
						commit
						b4b2b34158
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| *.pyc | ||||
| *.swp | ||||
| *.egg-info | ||||
| @ -1,8 +0,0 @@ | ||||
|  __________________________________________________________ | ||||
| |                                                          | | ||||
| |  the tilde.town                                          | | ||||
| |  ____ ____ ____ _    ____    ____ _  _ ____ _ _  _ ____  | | ||||
| |  |___ |___ |___ |    [__     |___ |\ | | __ | |\ | |___  | | ||||
| |  |    |___ |___ |___ ___]    |___ | \| |__] | | \| |___  | | ||||
| |                               ver 0.9.2 (almost stable)  | | ||||
| |__________________________________________________________| | ||||
| @ -25,6 +25,10 @@ TO-DO: | ||||
| ------ | ||||
| 
 | ||||
| CHANGELOG: | ||||
| ver 0.9.3 | ||||
| 	-packaging | ||||
| 	-easier to contribute to | ||||
| 
 | ||||
| ver 0.9.2 | ||||
| 	-paginated scrolling | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										31
									
								
								setup.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								setup.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| #!/usr/bin/env python | ||||
| 
 | ||||
| from setuptools import setup | ||||
| 
 | ||||
| setup( | ||||
|     name='ttbp', | ||||
|     version='0.9.3', | ||||
|     description='command line social blogging tool used on tilde.town', | ||||
|     url='https://github.com/modgethanc/ttbp', | ||||
|     author='~endorphant', | ||||
|     author_email='endorphant@tilde.town', | ||||
|     license='MIT', | ||||
|     classifiers=[ | ||||
|         'Topic :: Artistic Software', | ||||
|         'License :: OSI Approved :: MIT License', | ||||
|     ], | ||||
|     keywords='blog', | ||||
|     packages=['ttbp'], | ||||
|     install_requires = [ | ||||
|         'inflect==0.2.5', | ||||
|         'mistune==0.8.1', | ||||
|         'colorama==0.3.9', | ||||
|     ], | ||||
|     include_package_data = True, | ||||
|     entry_points = { | ||||
|           'console_scripts': [ | ||||
|               'feels = ttbp.ttbp:start', | ||||
|               'ttbp = ttbp.ttbp:start', | ||||
|           ] | ||||
|     }, | ||||
| ) | ||||
							
								
								
									
										0
									
								
								ttbp/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								ttbp/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										69
									
								
								ttbp/chatter.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								ttbp/chatter.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | ||||
| import json | ||||
| import os | ||||
| import random | ||||
| 
 | ||||
| DEFAULT_LANG = { | ||||
|     "greet":[ | ||||
|         "hi", | ||||
|         "hey", | ||||
|         "howdy", | ||||
|         "good morning", | ||||
|         "good afternoon", | ||||
|         "good day", | ||||
|         "good evening", | ||||
|         "welcome back", | ||||
|         "nice to see you" | ||||
|     ], | ||||
|     "bye":[ | ||||
|         "see you later, space cowboy", | ||||
|         "bye, townie", | ||||
|         "until next time, friend", | ||||
|         "come back whenever" | ||||
|     ], | ||||
|     "friend":[ | ||||
|         "friend", | ||||
|         "pal", | ||||
|         "buddy", | ||||
|         "townie" | ||||
|     ], | ||||
|     "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" | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| if os.path.exists("/home/endorphant/lib/python/chatterlib.json"): | ||||
|     with open("/home/endorphant/lib/python/chatterlib.json", 'r') as f: | ||||
|         LANG = json.load(f) | ||||
| else: | ||||
|     LANG = DEFAULT_LANG | ||||
| 
 | ||||
| def say(keyword): | ||||
|     ''' | ||||
|     takes a keyword and randomly returns from language dictionary to match that keyword | ||||
| 
 | ||||
|     returns None if keyword doesn't exist | ||||
| 
 | ||||
|     TODO: validate keyword? | ||||
|     ''' | ||||
| 
 | ||||
|     return random.choice(LANG.get(keyword)) | ||||
| 
 | ||||
| def month(num): | ||||
|     ''' | ||||
|     takes a MM and returns lovercase full name of that month | ||||
| 
 | ||||
|     TODO: validate num? | ||||
|     ''' | ||||
| 
 | ||||
|     return LANG["months"].get(num) | ||||
							
								
								
									
										86
									
								
								ttbp/config/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								ttbp/config/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | ||||
| from __future__ import absolute_import | ||||
| import os | ||||
| import sys | ||||
| 
 | ||||
| from .. import util | ||||
| 
 | ||||
| ## System config | ||||
| 
 | ||||
| # We refer to some package files (ie .css stuff), so we save a reference to the | ||||
| # path. | ||||
| INSTALL_PATH = os.path.dirname(sys.modules['ttbp'].__file__) | ||||
| 
 | ||||
| # We use this to store any persisted, global state. | ||||
| VAR = '/var/global/ttbp' | ||||
| VAR_WWW = os.path.join(VAR, 'www') | ||||
| 
 | ||||
| if not os.path.isdir('/var/global'): | ||||
|     raise Exception('bad system state: /var/global does not exist.') | ||||
| 
 | ||||
| if not os.path.isdir(VAR): | ||||
|     os.mkdir(VAR) | ||||
| 
 | ||||
| if not os.path.isdir(VAR_WWW): | ||||
|     os.mkdir(VAR_WWW) | ||||
| 
 | ||||
| LIVE = 'https://tilde.town/~' | ||||
| FEEDBOX = "endorphant@tilde.town" | ||||
| USERFILE = os.path.join(VAR, "users.txt") | ||||
| GRAFF_DIR = os.path.join(VAR, "graffiti") | ||||
| WALL = os.path.join(GRAFF_DIR, "wall.txt") | ||||
| WALL_LOCK = os.path.join(GRAFF_DIR, ".lock") | ||||
| 
 | ||||
| if not os.path.isdir(GRAFF_DIR): | ||||
|     os.mkdir(GRAFF_DIR) | ||||
| 
 | ||||
| ## Defaults | ||||
| 
 | ||||
| DEFAULT_HEADER = ''' | ||||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> | ||||
| <html> | ||||
|   <head> | ||||
|     <title>$USER on TTBP</title> | ||||
|     <link rel="stylesheet" href="style.css" /> | ||||
|   </head> | ||||
|   <body> | ||||
|     <div id="meta"> | ||||
|       <h1><a href="#">~$USER</a>@<a href="/~endorphant/ttbp">TTBP</a></h1> | ||||
|     </div> | ||||
| 
 | ||||
|     <div id="tlogs"> | ||||
| '''.lstrip() | ||||
| 
 | ||||
| DEFAULT_FOOTER = ''' | ||||
|     </div> | ||||
|   </body> | ||||
| </html> | ||||
| '''.lstrip() | ||||
| 
 | ||||
| with open(os.path.join(INSTALL_PATH, 'config', 'defaults', 'style.css')) as f: | ||||
|     DEFAULT_STYLE = f.read() | ||||
| 
 | ||||
| 
 | ||||
| ## User config | ||||
| 
 | ||||
| USER = os.path.basename(os.path.expanduser('~')) | ||||
| USER_HOME = os.path.expanduser('~') | ||||
| PATH = os.path.join(USER_HOME, '.ttbp') | ||||
| PUBLIC = os.path.join(USER_HOME, 'public_html') | ||||
| WWW = os.path.join(PATH, 'www') | ||||
| USER_CONFIG = os.path.join(PATH, 'config') | ||||
| TTBPRC = os.path.join(USER_CONFIG, 'ttbprc') | ||||
| USER_DATA = os.path.join(PATH, 'entries') | ||||
| NOPUB = os.path.join(USER_CONFIG, "nopub") | ||||
| 
 | ||||
| ## UI | ||||
| 
 | ||||
| BANNER = ''' | ||||
| __________________________________________________________ | ||||
| |                                                          | | ||||
| |  the tilde.town                                          | | ||||
| |  ____ ____ ____ _    ____    ____ _  _ ____ _ _  _ ____  | | ||||
| |  |___ |___ |___ |    [__     |___ |\ | | __ | |\ | |___  | | ||||
| |  |    |___ |___ |___ ___]    |___ | \| |__] | | \| |___  | | ||||
| |                               ver 0.10.0 (almost stable) | | ||||
| |__________________________________________________________| | ||||
| '''.lstrip() | ||||
| @ -39,19 +39,10 @@ import re | ||||
| import mistune | ||||
| import json | ||||
| 
 | ||||
| import chatter | ||||
| from . import chatter | ||||
| from . import config | ||||
| 
 | ||||
| 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") | ||||
| CONFIG = os.path.join(PATH, "config") | ||||
| DATA = os.path.join(PATH, "entries") | ||||
| FEED = os.path.join(SOURCE, "www", "index.html") | ||||
| DOCS = os.path.join(SOURCE, "www", "help.html") | ||||
| NOPUB = os.path.join(CONFIG, "nopub") | ||||
| FEED = os.path.join(config.VAR_WWW, "index.html") | ||||
| SETTINGS = {} | ||||
| 
 | ||||
| HEADER = "" | ||||
| @ -67,8 +58,8 @@ def load(ttbprc={}): | ||||
|     global FOOTER | ||||
|     global SETTINGS | ||||
| 
 | ||||
|     HEADER = open(os.path.join(CONFIG, "header.txt")).read() | ||||
|     FOOTER = open(os.path.join(CONFIG, "footer.txt")).read() | ||||
|     HEADER = open(os.path.join(config.USER_CONFIG, "header.txt")).read() | ||||
|     FOOTER = open(os.path.join(config.USER_CONFIG, "footer.txt")).read() | ||||
|     SETTINGS = ttbprc | ||||
| 
 | ||||
|     load_files() | ||||
| @ -94,13 +85,13 @@ def load_files(): | ||||
| 
 | ||||
|     FILES = [] | ||||
| 
 | ||||
|     for filename in os.listdir(DATA): | ||||
|     for filename in os.listdir(config.USER_DATA): | ||||
|         if nopub(filename): | ||||
|             link = os.path.join(WWW, os.path.splitext(os.path.basename(filename))[0]+".html") | ||||
|             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(DATA, filename) | ||||
|         filename = os.path.join(config.USER_DATA, filename) | ||||
|         if os.path.isfile(filename) and valid(filename): | ||||
|             FILES.append(filename) | ||||
| 
 | ||||
| @ -119,7 +110,7 @@ def write(outurl="default.html"): | ||||
|     * calls write_page() on each file to make permalinks | ||||
|     ''' | ||||
| 
 | ||||
|     outfile = open(os.path.join(WWW, outurl), "w") | ||||
|     outfile = open(os.path.join(config.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") | ||||
| 
 | ||||
| @ -140,7 +131,7 @@ def write(outurl="default.html"): | ||||
| 
 | ||||
|     outfile.close() | ||||
| 
 | ||||
|     return os.path.join(LIVE+USER,os.path.basename(os.path.realpath(WWW)),outurl) | ||||
|     return os.path.join(config.LIVE+config.USER,os.path.basename(os.path.realpath(config.WWW)),outurl) | ||||
| 
 | ||||
| def write_page(filename): | ||||
|     ''' | ||||
| @ -150,7 +141,7 @@ def write_page(filename): | ||||
|     url | ||||
|     ''' | ||||
| 
 | ||||
|     outurl = os.path.join(WWW, "".join(parse_date(filename))+".html") | ||||
|     outurl = os.path.join(config.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") | ||||
| @ -190,7 +181,7 @@ def write_entry(filename): | ||||
|     ] | ||||
| 
 | ||||
|     raw = [] | ||||
|     rawfile = open(os.path.join(DATA, filename), "r") | ||||
|     rawfile = open(os.path.join(config.USER_DATA, filename), "r") | ||||
| 
 | ||||
|     for line in rawfile: | ||||
|         raw.append(line) | ||||
| @ -244,7 +235,7 @@ def write_global_feed(blogList): | ||||
|     ## docs | ||||
|     outfile.write("""\ | ||||
|         <div class="docs">""") | ||||
|     outfile.write(mistune.markdown(open(os.path.join(SOURCE, "..", "README.md"), "r").read())) | ||||
|     outfile.write(mistune.markdown(open(os.path.join(config.INSTALL_PATH, "..", "README.md"), "r").read())) | ||||
|     outfile.write("""\ | ||||
|         </div>""") | ||||
| 
 | ||||
| @ -354,14 +345,14 @@ def find_ttbps(): | ||||
| 
 | ||||
|     return users | ||||
| 
 | ||||
| def publishing(username = USER): | ||||
| def publishing(username=config.USER): | ||||
|     ''' | ||||
|     checks .ttbprc for whether or not user opted for www publishing | ||||
|     ''' | ||||
| 
 | ||||
|     ttbprc = {} | ||||
| 
 | ||||
|     if username == USER: | ||||
|     if username == config.USER: | ||||
|         ttbprc = SETTINGS | ||||
| 
 | ||||
|     else: | ||||
| @ -384,7 +375,7 @@ def www_neighbors(): | ||||
| 
 | ||||
|         url = "" | ||||
|         if userRC["publish dir"]: | ||||
|             url = LIVE+user+"/"+userRC["publish dir"] | ||||
|             url = config.LIVE+user+"/"+userRC["publish dir"] | ||||
| 
 | ||||
|         lastfile = "" | ||||
|         files = os.listdir(os.path.join("/home", user, ".ttbp", "entries")) | ||||
| @ -418,8 +409,8 @@ def nopub(filename): | ||||
| 
 | ||||
|     exclude = [] | ||||
| 
 | ||||
|     if os.path.isfile(NOPUB): | ||||
|         for line in open(NOPUB, "r"): | ||||
|     if os.path.isfile(config.NOPUB): | ||||
|         for line in open(config.NOPUB, "r"): | ||||
|             exclude.append(line.rstrip()) | ||||
| 
 | ||||
|     return os.path.basename(filename) in exclude | ||||
| @ -31,6 +31,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| the complete codebase is available at: | ||||
| https://github.com/modgethanc/ttbp | ||||
| ''' | ||||
| from __future__ import absolute_import | ||||
| 
 | ||||
| import os | ||||
| import random | ||||
| @ -41,41 +42,26 @@ import json | ||||
| from email.mime.text import MIMEText; | ||||
| import re | ||||
| 
 | ||||
| import core | ||||
| import chatter | ||||
| import inflect | ||||
| import util | ||||
| 
 | ||||
| __version__ = "0.9.2" | ||||
| from . import config | ||||
| from . import core | ||||
| from . import chatter | ||||
| from . import util | ||||
| 
 | ||||
| __version__ = "0.9.3" | ||||
| __author__ = "endorphant <endorphant@tilde.town)" | ||||
| 
 | ||||
| ## system globals | ||||
| SOURCE = os.path.join("/home", "endorphant", "projects", "ttbp", "bin") | ||||
| LIVE = "http://tilde.town/~" | ||||
| FEEDBACK = os.path.join("/home", "endorphant", "ttbp-mail") | ||||
| FEEDBOX = "endorphant@tilde.town" | ||||
| USERFILE = os.path.join("/home", "endorphant", "projects", "ttbp", "users.txt") | ||||
| GRAFF_DIR = os.path.join(SOURCE, "graffiti") | ||||
| WALL = os.path.join(GRAFF_DIR, "wall.txt") | ||||
| WALL_LOCK = os.path.join(GRAFF_DIR, ".lock") | ||||
| 
 | ||||
| p = inflect.engine() | ||||
| 
 | ||||
| ## user globals | ||||
| USER = os.path.basename(os.path.expanduser("~")) | ||||
| PATH = os.path.join("/home", USER, ".ttbp") | ||||
| PUBLIC = os.path.join("/home", USER, "public_html") | ||||
| WWW = os.path.join(PATH, "www") | ||||
| CONFIG = os.path.join(PATH, "config") | ||||
| TTBPRC = os.path.join(CONFIG, "ttbprc") | ||||
| DATA = os.path.join(PATH, "entries") | ||||
| SETTINGS = { | ||||
|         "editor": "none", | ||||
|         "publish dir": False | ||||
|     } | ||||
| 
 | ||||
| ## ui globals | ||||
| BANNER = util.attach_rainbow()+open(os.path.join(SOURCE, "config", "banner.txt")).read()+util.attach_reset() | ||||
| BANNER = util.attach_rainbow() + config.BANNER + util.attach_reset() | ||||
| SPACER = "\n" | ||||
| INVALID = "please pick a number from the list of options!\n\n" | ||||
| DUST = "sorry about the dust, but this part is still under construction. check back later!\n\n" | ||||
| @ -229,14 +215,14 @@ def check_init(): | ||||
| 
 | ||||
|     print("\n\n") | ||||
|     if os.path.exists(os.path.join(os.path.expanduser("~"),".ttbp")): | ||||
|         print(chatter.say("greet")+", "+USER+".\n") | ||||
|         print(chatter.say("greet")+", "+config.USER+".\n") | ||||
| 
 | ||||
|         ''' | ||||
|         ## ttbprc validation | ||||
|         while not os.path.isfile(TTBPRC): | ||||
|         while not os.path.isfile(config.TTBPRC): | ||||
|             setup_repair() | ||||
|         try: | ||||
|             SETTINGS = json.load(open(TTBPRC)) | ||||
|             SETTINGS = json.load(open(config.TTBPRC)) | ||||
|         except ValueError: | ||||
|             setup_repair() | ||||
|         ''' | ||||
| @ -279,28 +265,30 @@ press <enter> to begin, or <ctrl-c> to get out of here. | ||||
|         quit() | ||||
| 
 | ||||
|     ## record user in source list | ||||
|     users = open(USERFILE, 'a') | ||||
|     users.write(USER+"\n") | ||||
|     users = open(config.USERFILE, 'a') | ||||
|     users.write(config.USER+"\n") | ||||
|     users.close() | ||||
| 
 | ||||
|     ## make .ttbp directory structure | ||||
|     subprocess.call(["mkdir", PATH]) | ||||
|     subprocess.call(["mkdir", CONFIG]) | ||||
|     subprocess.call(["mkdir", DATA]) | ||||
|     subprocess.call(["mkdir", config.PATH]) | ||||
|     subprocess.call(["mkdir", config.USER_CONFIG]) | ||||
|     subprocess.call(["mkdir", config.USER_DATA]) | ||||
| 
 | ||||
|     versionFile = os.path.join(PATH, "version") | ||||
|     versionFile = os.path.join(config.PATH, "version") | ||||
|     open(versionFile, "w").write(__version__) | ||||
| 
 | ||||
|     ## create header file | ||||
|     header = gen_header() | ||||
|     headerfile = open(os.path.join(CONFIG, "header.txt"), 'w') | ||||
|     headerfile = open(os.path.join(config.USER_CONFIG, "header.txt"), 'w') | ||||
|     for line in header: | ||||
|         headerfile.write(line) | ||||
|     headerfile.close() | ||||
| 
 | ||||
|     ## copy footer and default stylesheet | ||||
|     subprocess.call(["cp", os.path.join(SOURCE, "config", "defaults", "footer.txt"), CONFIG]) | ||||
|     subprocess.call(["cp", os.path.join(SOURCE, "config", "defaults", "style.css"), CONFIG]) | ||||
|     with open(os.path.join(config.USER_CONFIG, 'footer.txt'), 'w') as f: | ||||
|         f.write(config.DEFAULT_FOOTER) | ||||
|     with open(os.path.join(config.USER_CONFIG, 'style.css'), 'w') as f: | ||||
|         f.write(config.DEFAULT_STYLE) | ||||
| 
 | ||||
|     ## run user-interactive setup and load core engine | ||||
|     setup() | ||||
| @ -321,12 +309,12 @@ def gen_header(): | ||||
| <html> | ||||
|     <head> | ||||
|         <!--- this header automatically generated by ttbp initialization on """+time.strftime("%Y-%m-%d %h:m")+""" ---> | ||||
|         <title>~"""+USER+""" on TTBP</title> | ||||
|         <title>~"""+config.USER+""" on TTBP</title> | ||||
|         <link rel=\"stylesheet\" href=\"style.css\" /> | ||||
|     </head> | ||||
|     <body> | ||||
|         <div id=\"meta\"> | ||||
|             <h1><a href=\"index.html#\">~"""+USER+"""</a>@<a href=\"/~endorphant/ttbp\">TTBP</a></h1> | ||||
|             <h1><a href=\"index.html#\">~"""+config.USER+"""</a>@<a href=\"/~endorphant/ttbp\">TTBP</a></h1> | ||||
|         </div> | ||||
| 
 | ||||
|         <!---put your custom html here--> | ||||
| @ -345,11 +333,11 @@ def valid_setup(): | ||||
| 
 | ||||
|     global SETTINGS | ||||
| 
 | ||||
|     if not os.path.isfile(TTBPRC): | ||||
|     if not os.path.isfile(config.TTBPRC): | ||||
|         return False | ||||
| 
 | ||||
|     try: | ||||
|         SETTINGS = json.load(open(TTBPRC)) | ||||
|         SETTINGS = json.load(open(config.TTBPRC)) | ||||
|     except ValueError: | ||||
|         return False | ||||
| 
 | ||||
| @ -357,10 +345,10 @@ def valid_setup(): | ||||
|         if not SETTINGS.get("publish dir"): | ||||
|             return False | ||||
| 
 | ||||
|         if not os.path.exists(WWW): | ||||
|         if not os.path.exists(config.WWW): | ||||
|             return False | ||||
| 
 | ||||
|         if not os.path.exists(os.path.join(WWW, SETTINGS.get("pubish dir"))): | ||||
|         if not os.path.exists(os.path.join(config.WWW, SETTINGS.get("pubish dir"))): | ||||
|             return False | ||||
| 
 | ||||
|     return True | ||||
| @ -396,7 +384,7 @@ def setup(): | ||||
| 
 | ||||
|     print("\n\ttext editor:\t" +SETTINGS.get("editor")) | ||||
|     if core.publishing(): | ||||
|         print("\tpublish dir:\t" +os.path.join(PUBLIC, str(SETTINGS.get("publish dir")))) | ||||
|         print("\tpublish dir:\t" +os.path.join(config.PUBLIC, str(SETTINGS.get("publish dir")))) | ||||
|     print("\tpubishing:\t"+str(SETTINGS.get("publishing"))+"\n") | ||||
| 
 | ||||
|     # editor selection | ||||
| @ -410,10 +398,10 @@ def setup(): | ||||
|     redraw("blog publishing: "+str(core.publishing())) | ||||
| 
 | ||||
|     if core.publishing(): | ||||
|         print("publish directory: ~"+USER+"/public_html/"+SETTINGS.get("publish dir")) | ||||
|         print("publish directory: ~"+config.USER+"/public_html/"+SETTINGS.get("publish dir")) | ||||
| 
 | ||||
|     # save settings | ||||
|     ttbprc = open(TTBPRC, "w") | ||||
|     ttbprc = open(config.TTBPRC, "w") | ||||
|     ttbprc.write(json.dumps(SETTINGS, sort_keys=True, indent=2, separators=(',',':'))) | ||||
|     ttbprc.close() | ||||
| 
 | ||||
| @ -452,7 +440,7 @@ def main_menu(): | ||||
|     if choice == '0': | ||||
|         redraw() | ||||
|         today = time.strftime("%Y%m%d") | ||||
|         write_entry(os.path.join(DATA, today+".txt")) | ||||
|         write_entry(os.path.join(config.USER_DATA, today+".txt")) | ||||
|         core.www_neighbors() | ||||
|     elif choice == '1': | ||||
|         if core.publishing(): | ||||
| @ -463,7 +451,7 @@ def main_menu(): | ||||
|             core.write("index.html") | ||||
|         else: | ||||
|             redraw("your recorded feels, listed by date:") | ||||
|             view_feels(USER) | ||||
|             view_feels(config.USER) | ||||
|     elif choice == '2': | ||||
|         users = core.find_ttbps() | ||||
|         prompt = "the following "+p.no("user", len(users))+" "+p.plural("is", len(users))+" recording feels on ttbp:" | ||||
| @ -488,7 +476,7 @@ def main_menu(): | ||||
|         redraw() | ||||
|         show_credits() | ||||
|     elif choice == '8': | ||||
|         subprocess.call(["lynx", os.path.join(SOURCE, "..", "README.html")]) | ||||
|         subprocess.call(["lynx", os.path.join(config.INSTALL_PATH, "..", "README.html")]) | ||||
|         redraw() | ||||
|     elif choice in QUITS: | ||||
|         return stop() | ||||
| @ -541,7 +529,7 @@ def review_menu(intro=""): | ||||
|     if choice is not False: | ||||
|         if choice == 0: | ||||
|             redraw("your recorded feels, listed by date:") | ||||
|             view_feels(USER) | ||||
|             view_feels(config.USER) | ||||
|         elif choice == 1: | ||||
|             redraw("here's your current nopub status:") | ||||
|             set_nopubs() | ||||
| @ -568,7 +556,7 @@ def view_neighbors(users, prompt): | ||||
|         ## retrieve publishing url, if it exists | ||||
|         url="\t\t\t" | ||||
|         if userRC.get("publish dir"): | ||||
|             url = LIVE+user+"/"+userRC.get("publish dir") | ||||
|             url = config.LIVE+user+"/"+userRC.get("publish dir") | ||||
| 
 | ||||
|         ## find last entry | ||||
|         files = os.listdir(os.path.join("/home", user, ".ttbp", "entries")) | ||||
| @ -628,8 +616,8 @@ def view_feels(townie): | ||||
|     filenames = [] | ||||
|     showpub = False | ||||
| 
 | ||||
|     if townie == USER: | ||||
|         entryDir = DATA | ||||
|     if townie == config.USER: | ||||
|         entryDir = config.USER_DATA | ||||
|         owner = "your" | ||||
|         if core.publishing(): | ||||
|             showpub = True | ||||
| @ -683,7 +671,7 @@ thanks to everyone who reads, listens, writes, and feels.\ | ||||
| 
 | ||||
| ## handlers | ||||
| 
 | ||||
| def write_entry(entry=os.path.join(DATA, "test.txt")): | ||||
| def write_entry(entry=os.path.join(config.USER_DATA, "test.txt")): | ||||
|     ''' | ||||
|     main feels-recording handler | ||||
|     ''' | ||||
| @ -713,7 +701,7 @@ editor. | ||||
|     if core.publishing(): | ||||
|         core.load_files() | ||||
|         core.write("index.html") | ||||
|         left = "posted to "+LIVE+USER+"/"+str(SETTINGS.get("publish dir"))+"/index.html\n\n>" | ||||
|         left = "posted to "+config.LIVE+config.USER+"/"+str(SETTINGS.get("publish dir"))+"/index.html\n\n>" | ||||
|     redraw(left + " thanks for sharing your feels!") | ||||
| 
 | ||||
|     return | ||||
| @ -743,8 +731,8 @@ def send_feedback(entered, subject="none"): | ||||
|     if message: | ||||
|         id = "#"+util.genID(3) | ||||
|         mail = MIMEText(message) | ||||
|         mail['To'] = FEEDBOX | ||||
|         mail['From'] = USER+"@tilde.town" | ||||
|         mail['To'] = config.FEEDBOX | ||||
|         mail['From'] = config.USER+"@tilde.town" | ||||
|         mail['Subject'] = " ".join(["[ttbp]", subject, id]) | ||||
|         m = os.popen("/usr/sbin/sendmail -t -oi", 'w') | ||||
|         m.write(mail.as_string()) | ||||
| @ -836,10 +824,10 @@ def graffiti_handler(): | ||||
|     Main graffiti handler. | ||||
|     ''' | ||||
| 
 | ||||
|     if os.path.isfile(WALL_LOCK): | ||||
|     if os.path.isfile(config.WALL_LOCK): | ||||
|         redraw("sorry, "+chatter.say("friend")+", but someone's there right now. try again in a few!") | ||||
|     else: | ||||
|         subprocess.call(["touch", WALL_LOCK]) | ||||
|         subprocess.call(["touch", config.WALL_LOCK]) | ||||
|         redraw() | ||||
|         print("""\ | ||||
| the graffiti wall is a world-writeable text file. anyone can | ||||
| @ -853,8 +841,8 @@ your changes by exiting without saving. | ||||
| 
 | ||||
| """) | ||||
|         raw_input("press <enter> to visit the wall\n\n") | ||||
|         subprocess.call([SETTINGS.get("editor"), WALL]) | ||||
|         subprocess.call(["rm", WALL_LOCK]) | ||||
|         subprocess.call([SETTINGS.get("editor"), config.WALL]) | ||||
|         subprocess.call(["rm", config.WALL_LOCK]) | ||||
|         redraw("thanks for visiting the graffiti wall!") | ||||
| 
 | ||||
| 
 | ||||
| @ -884,14 +872,14 @@ def select_publish_dir(): | ||||
|     republish = False | ||||
| 
 | ||||
|     if current: | ||||
|         print("\ncurrent publish dir:\t"+os.path.join(PUBLIC, SETTINGS["publish dir"])) | ||||
|         print("\ncurrent publish dir:\t"+os.path.join(config.PUBLIC, SETTINGS["publish dir"])) | ||||
|         republish = True | ||||
| 
 | ||||
|     choice = raw_input("\nwhere do you want your blog published? (leave blank to use default \"blog\") ") | ||||
|     if not choice: | ||||
|         choice = "blog" | ||||
| 
 | ||||
|     publishDir = os.path.join(PUBLIC, choice) | ||||
|     publishDir = os.path.join(config.PUBLIC, choice) | ||||
|     while os.path.exists(publishDir): | ||||
|         second = raw_input("\n"+publishDir+"""\ | ||||
|  already exists! | ||||
| @ -905,7 +893,7 @@ otherwise, pick another location: """) | ||||
|         if second == "": | ||||
|             break | ||||
|         choice = second | ||||
|         publishDir = os.path.join(PUBLIC, choice) | ||||
|         publishDir = os.path.join(config.PUBLIC, choice) | ||||
| 
 | ||||
|     return choice | ||||
| 
 | ||||
| @ -936,10 +924,9 @@ def unpublish(): | ||||
|     ''' | ||||
|     remove user's published directory, if it exists. this should only remove the symlink in public_html. | ||||
|     ''' | ||||
| 
 | ||||
|     dir = SETTINGS.get("publish dir") | ||||
|     if dir: | ||||
|         publishDir = os.path.join(PUBLIC, dir) | ||||
|     directory = SETTINGS.get("publish dir") | ||||
|     if directory: | ||||
|         publishDir = os.path.join(config.PUBLIC, directory) | ||||
|         subprocess.call(["rm", publishDir]) | ||||
| 
 | ||||
| def update_publishing(): | ||||
| @ -954,7 +941,7 @@ def update_publishing(): | ||||
|         newDir = select_publish_dir() | ||||
|         SETTINGS.update({"publish dir": newDir}) | ||||
|         if oldDir: | ||||
|             subprocess.call(["rm", os.path.join(PUBLIC, oldDir)]) | ||||
|             subprocess.call(["rm", os.path.join(config.PUBLIC, oldDir)]) | ||||
|         make_publish_dir(newDir) | ||||
|         core.load_files() | ||||
|         core.write("index.html") | ||||
| @ -969,21 +956,21 @@ def make_publish_dir(dir): | ||||
|     setup helper to create publishing directory | ||||
|     ''' | ||||
| 
 | ||||
|     if not os.path.exists(WWW): | ||||
|         subprocess.call(["mkdir", WWW]) | ||||
|         subprocess.call(["ln", "-s", os.path.join(CONFIG, "style.css"), os.path.join(WWW, "style.css")]) | ||||
|         subprocess.call(["touch", os.path.join(WWW, "index.html")]) | ||||
|         index = open(os.path.join(WWW, "index.html"), "w") | ||||
|     if not os.path.exists(config.WWW): | ||||
|         subprocess.call(["mkdir", config.WWW]) | ||||
|         subprocess.call(["ln", "-s", os.path.join(config.USER_CONFIG, "style.css"), os.path.join(config.WWW, "style.css")]) | ||||
|         subprocess.call(["touch", os.path.join(config.WWW, "index.html")]) | ||||
|         index = open(os.path.join(config.WWW, "index.html"), "w") | ||||
|         index.write("<h1>ttbp blog placeholder</h1>") | ||||
|         index.close() | ||||
| 
 | ||||
|     publishDir = os.path.join(PUBLIC, dir) | ||||
|     publishDir = os.path.join(config.PUBLIC, dir) | ||||
|     if os.path.exists(publishDir): | ||||
|         subprocess.call(["rm", publishDir]) | ||||
| 
 | ||||
|     subprocess.call(["ln", "-s", WWW, publishDir]) | ||||
|     subprocess.call(["ln", "-s", config.WWW, publishDir]) | ||||
| 
 | ||||
|     print("\n\tpublishing to "+LIVE+USER+"/"+SETTINGS.get("publish dir")+"/\n\n") | ||||
|     print("\n\tpublishing to "+config.LIVE+config.USER+"/"+SETTINGS.get("publish dir")+"/\n\n") | ||||
| 
 | ||||
| ##### PATCHING UTILITIES | ||||
| 
 | ||||
| @ -992,7 +979,7 @@ def build_mismatch(): | ||||
|     checks to see if user's last run build is the same as this session | ||||
|     ''' | ||||
| 
 | ||||
|     versionFile = os.path.join(PATH, "version") | ||||
|     versionFile = os.path.join(config.PATH, "version") | ||||
|     if not os.path.exists(versionFile): | ||||
|         return False | ||||
| 
 | ||||
| @ -1018,7 +1005,7 @@ def switch_build(ver): | ||||
|     print("\nswitching you over to the "+build+" version...\n") | ||||
|     time.sleep(1) | ||||
|     print("...") | ||||
|     versionFile = os.path.join(PATH, "version") | ||||
|     versionFile = os.path.join(config.PATH, "version") | ||||
|     open(versionFile, "w").write(ver) | ||||
|     time.sleep(1) | ||||
|     #print("\nall good!\n") | ||||
| @ -1028,7 +1015,7 @@ def updated(): | ||||
|     checks to see if current user is up to the same version as system | ||||
|     ''' | ||||
| 
 | ||||
|     versionFile = os.path.join(PATH, "version") | ||||
|     versionFile = os.path.join(config.PATH, "version") | ||||
|     if not os.path.exists(versionFile): | ||||
|         return False | ||||
| 
 | ||||
| @ -1046,7 +1033,7 @@ def update_version(): | ||||
| 
 | ||||
|     global SETTINGS | ||||
| 
 | ||||
|     versionFile = os.path.join(PATH, "version") | ||||
|     versionFile = os.path.join(config.PATH, "version") | ||||
| 
 | ||||
|     print("ttbp had some updates!") | ||||
| 
 | ||||
| @ -1063,22 +1050,22 @@ def update_version(): | ||||
| 
 | ||||
|         # change style.css location | ||||
|         if core.publishing(): | ||||
|             if os.path.isfile(os.path.join(WWW, "style.css")): | ||||
|                 subprocess.call(["mv", os.path.join(WWW, "style.css"), CONFIG]) | ||||
|             if os.path.isfile(os.path.join(config.WWW, "style.css")): | ||||
|                 subprocess.call(["mv", os.path.join(config.WWW, "style.css"), config.USER_CONFIG]) | ||||
| 
 | ||||
|             # change www symlink | ||||
|             if os.path.exists(WWW): | ||||
|                 subprocess.call(["rm", WWW]) | ||||
|             if os.path.exists(config.WWW): | ||||
|                 subprocess.call(["rm", config.WWW]) | ||||
| 
 | ||||
|             subprocess.call(["mkdir", WWW]) | ||||
|             subprocess.call(["mkdir", config.WWW]) | ||||
| 
 | ||||
|             subprocess.call(["ln", "-s", os.path.join(CONFIG, "style.css"), os.path.join(WWW, "style.css")]) | ||||
|             subprocess.call(["ln", "-s", os.path.join(config.USER_CONFIG, "style.css"), os.path.join(config.WWW, "style.css")]) | ||||
| 
 | ||||
|             publishDir = os.path.join(PUBLIC, SETTINGS.get("publish dir")) | ||||
|             publishDir = os.path.join(config.PUBLIC, SETTINGS.get("publish dir")) | ||||
|             if os.path.exists(publishDir): | ||||
|                 subprocess.call(["rm", "-rf", publishDir]) | ||||
| 
 | ||||
|             subprocess.call(["ln", "-s", WWW, os.path.join(PUBLIC, SETTINGS.get("publish dir"))]) | ||||
|             subprocess.call(["ln", "-s", config.WWW, os.path.join(config.PUBLIC, SETTINGS.get("publish dir"))]) | ||||
| 
 | ||||
|             # repopulate html files | ||||
|             core.load_files() | ||||
| @ -1088,7 +1075,7 @@ def update_version(): | ||||
|         print("\nnew feature!\n") | ||||
|         SETTINGS.update({"publishing":select_publishing()}) | ||||
|         update_publishing() | ||||
|         ttbprc = open(TTBPRC, "w") | ||||
|         ttbprc = open(config.TTBPRC, "w") | ||||
|         ttbprc.write(json.dumps(SETTINGS, sort_keys=True, indent=2, separators=(',',':'))) | ||||
|         ttbprc.close() | ||||
| 
 | ||||
| @ -1100,7 +1087,7 @@ def update_version(): | ||||
|             print("\nresetting your publishing settings...\n") | ||||
|             SETTINGS.update({"publishing":select_publishing()}) | ||||
|             update_publishing() | ||||
|             ttbprc = open(TTBPRC, "w") | ||||
|             ttbprc = open(config.TTBPRC, "w") | ||||
|             ttbprc.write(json.dumps(SETTINGS, sort_keys=True, indent=2, separators=(',',':'))) | ||||
|             ttbprc.close() | ||||
| 
 | ||||
| @ -1111,6 +1098,9 @@ you're all good to go, """+chatter.say("friend")+"""! please contact ~endorphant | ||||
| somehing strange happened to you during this update. | ||||
| """) | ||||
| 
 | ||||
|     # TODO these conditionals will need to change if we increment the Y level | ||||
|     # to 10. | ||||
| 
 | ||||
|     # show patch notes | ||||
|     #if userVersion != "0.9.0" and userVersion != "0.9.0b": | ||||
|     if userVersion[0:5] < "0.9.0": | ||||
| @ -1138,6 +1128,16 @@ ver 0.9.2 features: | ||||
|     * expanded menu for viewing your own feels (further | ||||
|       features to be implemented) | ||||
|         """) | ||||
|     if userVersion[0:5] < "0.9.3": | ||||
|         # version 0.9.3 patch notes | ||||
|         print() | ||||
|         print(""" | ||||
|         version 0.9.3 features: | ||||
|         * ttbp is now packaged, making it easier to contribute to. | ||||
|         * things should otherwise be the same! | ||||
|         * check out https://github.com/modgethanc/ttbp if you'd like to contribute. | ||||
|         * takes advantage of new /var/global | ||||
|         """.lstrip()) | ||||
| 
 | ||||
| ##### | ||||
| 
 | ||||
| @ -23,11 +23,11 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||||
| OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||||
| WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| ''' | ||||
| 
 | ||||
| import inflect | ||||
| import time | ||||
| import random | ||||
| import time | ||||
| 
 | ||||
| import colorama | ||||
| import inflect | ||||
| 
 | ||||
| ## misc globals | ||||
| BACKS = ['back', 'b', 'q'] | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user