# HG changeset patch # User k0s # Date 1257985521 18000 # Node ID 8b9aa9f40fa525b00c1859f79b82de0d573a8f89 # Parent ffe95e34066f2c2b734133f0cc488a26ec3b5be0 moving most of blogme to its own function diff -r ffe95e34066f -r 8b9aa9f40fa5 bitsyblog/blogme.py --- a/bitsyblog/blogme.py Wed Nov 04 18:18:07 2009 -0500 +++ b/bitsyblog/blogme.py Wed Nov 11 19:25:21 2009 -0500 @@ -7,64 +7,13 @@ import tempfile import urllib2 -# global variables - -EDITOR='emacs -nw' -SERVER='http://bitsyblog.biz' +# global variable 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): +def tmpbuffer(editor=None): """open an editor and retreive the resulting editted buffer""" + if not editor: + editor = os.environ['EDITOR'] tmpfile = tempfile.mktemp(suffix='.txt') cmdline = editor.split() cmdline.append(tmpfile) @@ -73,30 +22,83 @@ os.remove(tmpfile) return buffer -# get the blog +def main(args=sys.argv[1:]): + + # create the option parser + parser = optparse.OptionParser() + parser.add_option('-s', '--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() + + # sanity check + if options.private and options.secret: + print "post can't be secret and private!" + sys.exit(1) -if args: - msg = ' '.join(args) -else: - msg = tmpbuffer() + # 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 = {} -# open the url + # determine user name and password + fields = [ 'user', 'password' ] + for field in fields: + globals()[field] = prefs.get(field) -url = '/'.join((options.server, user)) -url += '?auth=digest' # specify authentication method + optval = getattr(options, field) + if optval: + password = None # needed to ensure prompting for pw from command line + globals()[field] = optval -if options.private: - url += '&privacy=private' -if options.secret: - url += '&privacy=secret' + 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) + + + # get the blog + if args: + msg = ' '.join(args) + else: + msg = tmpbuffer() -authhandler = urllib2.HTTPDigestAuthHandler() -authhandler.add_password('bitsyblog', url, user, password) -opener = urllib2.build_opener(authhandler) -urllib2.install_opener(opener) + # 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 + try: + url = urllib2.urlopen(url, data=msg) + print url.url # print the blog post's url + except urllib2.HTTPError: + pass + +if __name__ == '__main__': + main()