#!/usr/bin/python import os, re, sys, time from xml.sax.saxutils import escape from glob import glob svgpath = '/home/rubys/public_html/svg/%s.svg' mombo = '/home/rubys/web/intertwingly.net/mombo' if mombo not in sys.path: sys.path.insert(0, mombo) cwd = os.path.abspath(os.curdir) if cwd not in sys.path: sys.path.insert(0, cwd) from config import directory, urlpath from post import param, sanitize, xmlchars from get import resize def format(content): content=sanitize(content) content=re.sub(r'\[#(\S*) (.*?)\]

', r'

\2

', content) content=re.sub(r'\[(#\S*) (.*?)\]', r'
\2', content) return content try: title=escape(param('title')) description=param('desc') excerpt=escape(param('excerpt')) parent={'title':'', 'description': '', 'excerpt': '', 'mtime': time.localtime()} os.chdir(directory.data) env=os.environ iconpreview = '' if param('icon'): iconpreview = open(svgpath % param('icon')).read() if param('preview'): parent.update({'header': xmlchars(title), 'title': xmlchars(title), 'description': xmlchars(escape(description)), 'cooked': xmlchars(format(description)), 'excerpt': xmlchars(excerpt)}) elif param('submit'): next=len(glob('*.txt')) while os.path.exists('%d.txt' % next): next+=1 if title.find(':: ')>0: (next,title)=title.split(':: ',1) file = open('%s.raw' % next, 'w') file.write(xmlchars(title.strip()) + '\n') if excerpt: file.write('
%s
\n' % xmlchars(format(excerpt))) if iconpreview: file.write(iconpreview) file.write(xmlchars(format(description))) file.close() import commands log = commands.getoutput('/home/rubys/bin/cook %s' % next) parent.update({'header':'Post Log', 'cooked': '
%s
' % escape(log)}) icons = [os.path.basename(os.path.splitext(file)[0]) for file in glob(svgpath % '*')] icons.sort() from config import channel, service, __dict__ as config data={'channel':channel, 'parent':parent, 'Icons': icons, 'iconpreview': resize(iconpreview), 'iconselected':param('icon')} from postform import postform as template print template(searchList=[data, config]) if param('submit'): import daemonize, fcntl, search # complete the http request log=open(directory.web+"post.log","w") daemonize.daemonize(stdout=log.name) fcntl.flock(log.fileno(),fcntl.LOCK_EX) print search.index() fcntl.flock(log.fileno(),fcntl.LOCK_UN) log.close() except: ####################################################################### # Format tracebacks for display # ####################################################################### print 'Status: 500 Internal Error\r\nContent-type: text/html\r\n' import traceback tb = ''.join(apply(traceback.format_exception, sys.exc_info())) from xml.sax.saxutils import escape print '' print 'CGI Failure' print '' print '

CGI Failure

' print '
traceback:' + escape(tb) + '
' print '' print ''