Mercurial > hg > bitsyblog
annotate bitsyblog/blogme.py @ 45:c228832db770
fix blogme
author | k0s <k0scist@gmail.com> |
---|---|
date | Tue, 24 Nov 2009 19:20:47 -0500 |
parents | 0e7f56709c90 |
children | 66bfcceea3b4 |
rev | line source |
---|---|
0
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
2 |
44 | 3 """ |
4 command line blogger | |
5 """ | |
6 | |
0
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
7 import optparse |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
8 import os |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
9 import subprocess |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
10 import sys |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
11 import tempfile |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
12 import urllib2 |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
13 |
44 | 14 from ConfigParser import ConfigParser |
45 | 15 from utils import datestamp |
44 | 16 |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
17 # global variable |
44 | 18 CONFIG = '.blogme' |
0
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
19 |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
20 def tmpbuffer(editor=None): |
0
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
21 """open an editor and retreive the resulting editted buffer""" |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
22 if not editor: |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
23 editor = os.environ['EDITOR'] |
0
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
24 tmpfile = tempfile.mktemp(suffix='.txt') |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
25 cmdline = editor.split() |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
26 cmdline.append(tmpfile) |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
27 edit = subprocess.call(cmdline) |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
28 buffer = file(tmpfile).read().strip() |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
29 os.remove(tmpfile) |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
30 return buffer |
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
31 |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
32 def main(args=sys.argv[1:]): |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
33 |
44 | 34 # parse command line options |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
35 parser = optparse.OptionParser() |
44 | 36 parser.add_option('-c', '--config') |
45 | 37 parser.add_option('-f', '--file') |
44 | 38 parser.add_option('-H', '--host') |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
39 parser.add_option('-u', '--user') |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
40 parser.add_option('-p', '--password') |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
41 parser.add_option('--private', action='store_true', default=False) |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
42 parser.add_option('--secret', action='store_true', default=False) |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
43 options, args = parser.parse_args() |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
44 |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
45 # sanity check |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
46 if options.private and options.secret: |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
47 print "post can't be secret and private!" |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
48 sys.exit(1) |
0
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
49 |
45 | 50 if options.file: |
51 # get the blog | |
52 if args: | |
53 msg = ' '.join(args) | |
54 else: | |
55 msg = tmpbuffer() | |
56 options.file = os.path.join(options.file, 'entries') | |
57 for opt in 'private', 'secret': | |
58 if getattr(options, opt): | |
59 options.file = os.path.join(options.file, opt) | |
60 break | |
61 else: | |
62 options.file = os.path.join(options.file, 'public') | |
63 options.file = os.path.join(options.file, datestamp()) | |
64 f = file(options.file, 'w') | |
65 print >> f, msg | |
66 f.close() | |
67 sys.exit(0) | |
68 | |
44 | 69 # parse dotfile config |
70 config = ConfigParser() | |
45 | 71 _config = {} # config to write out |
44 | 72 if not options.config: |
73 home = os.environ['HOME'] | |
74 options.config = os.path.join(home, CONFIG) | |
75 if os.path.exists(options.config): | |
76 config.read(options.config) | |
0
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
77 |
45 | 78 # get default host, if available |
79 if options.host: | |
80 if config.has_option('DEFAULTS', 'host'): | |
81 print "Make %s the default host? (Y/n): ", | |
82 answer = raw_input() | |
83 if not anwer.lower().startswith('n'): | |
84 _config['default'] = options.host | |
85 else: | |
86 if config.has_option('DEFAULTS', 'host'): | |
87 options.host = config.get('DEFAULTS', 'host') | |
88 else: | |
89 print "Enter URL of host: ", | |
90 host = raw_input() | |
91 _config['default'] = host | |
92 | |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
93 # determine user name and password |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
94 fields = [ 'user', 'password' ] |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
95 for field in fields: |
45 | 96 if hasattr(options, field): |
97 if (not config.has_option(options.host, field)) or (config.get(options.host, field) != getattr(options, field)): | |
98 _config[field] = getattr(options, field) | |
99 else: | |
100 print "%s: " % field, | |
101 setattr(options, field, raw_input()) | |
102 _config[field] = getattr(options, field) | |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
103 |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
104 # write the dotfile if it doesn't exist |
45 | 105 if _config: |
106 if 'default' in _config: | |
107 if not config.has_section('DEFAULTS'): | |
108 config.add_section('DEFAULTS') | |
109 config.set('DEFAULTS', 'host', options.host) | |
110 if not config.has_section(options.host): | |
111 config.add_section(options.host) | |
112 for field in fields: | |
113 if not config.has_option(options.host, field): | |
114 config.set(options.host, field, getattr(options, field)) | |
115 config.write() | |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
116 |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
117 # get the blog |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
118 if args: |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
119 msg = ' '.join(args) |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
120 else: |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
121 msg = tmpbuffer() |
0
e3823be6a423
initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
122 |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
123 # open the url |
44 | 124 url = options.host |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
125 url += '?auth=digest' # specify authentication method |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
126 if options.private: |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
127 url += '&privacy=private' |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
128 if options.secret: |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
129 url += '&privacy=secret' |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
130 authhandler = urllib2.HTTPDigestAuthHandler() |
45 | 131 authhandler.add_password('bitsyblog', url, options.user, options.password) |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
132 opener = urllib2.build_opener(authhandler) |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
133 urllib2.install_opener(opener) |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
134 try: |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
135 url = urllib2.urlopen(url, data=msg) |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
136 print url.url # print the blog post's url |
44 | 137 except urllib2.HTTPError, e: |
138 print e | |
43
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
139 |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
140 if __name__ == '__main__': |
8b9aa9f40fa5
moving most of blogme to its own function
k0s <k0scist@gmail.com>
parents:
42
diff
changeset
|
141 main() |