Mercurial > hg > bitsyblog
diff blogme.py @ 0:e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
author | k0s <k0scist@gmail.com> |
---|---|
date | Sat, 12 Sep 2009 16:06:57 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/blogme.py Sat Sep 12 16:06:57 2009 -0400 @@ -0,0 +1,102 @@ +#!/usr/bin/env python + +import optparse +import os +import subprocess +import sys +import tempfile +import urllib2 + +# global variables + +EDITOR='emacs -nw' +SERVER='http://bitsyblog.biz' +dotfile='.blogme' + +parser = optparse.OptionParser() +parser.add_option('-s', '--server', default=SERVER) +parser.add_option('-u', '--user') +parser.add_option('-p', '--password') +parser.add_option('--private', action='store_true', default=False) +parser.add_option('--secret', action='store_true', default=False) + +options, args = parser.parse_args() + +if options.private and options.secret: + print "post can't be secret and private!" + sys.exit(1) + +# parse dotfile + +home = os.environ.get('HOME') +if home: + dotfile = os.path.join(home, dotfile) + if os.path.exists(dotfile): + prefs = file(dotfile).read().split('\n') + prefs = [ i for i in prefs if i.strip() ] + prefs = [ [ j.strip() for j in i.split(':', 1) ] for i in prefs + if ':' in i] # probably not necessary + prefs = dict(prefs) + else: + prefs = {} + +# determine user name and password +fields = [ 'user', 'password' ] +for field in fields: + globals()[field] = prefs.get(field) + + optval = getattr(options, field) + if optval: + password = None # needed to ensure prompting for pw from command line + globals()[field] = optval + + if globals()[field] is None: + globals()[field] = raw_input('%s: ' % field) +assert user is not None +assert password is not None + +# write the dotfile if it doesn't exist +if not os.path.exists(dotfile): + preffile = file(dotfile, 'w') + print >> preffile, 'user: %s' % user + print >> preffile, 'password: %s' % password + preffile.close() + os.chmod(dotfile, 0600) + +def tmpbuffer(editor=EDITOR): + """open an editor and retreive the resulting editted buffer""" + tmpfile = tempfile.mktemp(suffix='.txt') + cmdline = editor.split() + cmdline.append(tmpfile) + edit = subprocess.call(cmdline) + buffer = file(tmpfile).read().strip() + os.remove(tmpfile) + return buffer + +# get the blog + +if args: + msg = ' '.join(args) +else: + msg = tmpbuffer() + +# open the url + +url = '/'.join((options.server, user)) +url += '?auth=digest' # specify authentication method + +if options.private: + url += '&privacy=private' +if options.secret: + url += '&privacy=secret' + +authhandler = urllib2.HTTPDigestAuthHandler() +authhandler.add_password('bitsyblog', url, user, password) +opener = urllib2.build_opener(authhandler) +urllib2.install_opener(opener) + +try: + url = urllib2.urlopen(url, data=msg) + print url.url # print the blog post's url +except urllib2.HTTPError: + pass