]> jfr.im git - z_archive/twitter.git/blobdiff - twitter/cmdline.py
Add Hatem to AUTHORS file, prep for 0.4.5 release soonish
[z_archive/twitter.git] / twitter / cmdline.py
index 9f04df1a600f7074b4a6c8940cc8efa1c7007ac7..c605e219a5ac39ae43f44838da1fe86716934c95 100644 (file)
@@ -17,12 +17,22 @@ OPTIONS:
                             in a while (default: every 5 minutes)
  -R --refresh-rate <rate>   set the refresh rate (in seconds)
  -f --format <format>       specify the output format for status updates
+ -c --config <filename>     read username and password from given config
+                              file (default ~/.twitter)
 
 FORMATS for the --format option
 
  default         one line per status
  verbose         multiple lines per status, more verbose status info
  urls            nothing but URLs. Dare you click them?
+CONFIG FILES
+
+ The config file should contain your email and password like so:
+
+[twitter]
+email: <username>
+password: <password>
 """
 
 import sys
@@ -30,6 +40,8 @@ import time
 from getopt import getopt
 from getpass import getpass
 import re
+import os.path
+from ConfigParser import SafeConfigParser
 
 from api import Twitter, TwitterError
 
@@ -40,13 +52,14 @@ options = {
     'refresh': False,
     'refresh_rate': 600,
     'format': 'default',
+    'config_filename': os.environ.get('HOME', '') + os.sep + '.twitter',
     'extra_args': []
 }
 
 def parse_args(args, options):
     long_opts = ['email', 'password', 'help', 'format', 'refresh',
-                 'refresh-rate']
-    short_opts = "e:p:f:h?rR:"
+                 'refresh-rate', 'config']
+    short_opts = "e:p:f:h?rR:c:"
     opts, extra_args = getopt(args, short_opts, long_opts)
     
     for opt, arg in opts:
@@ -63,6 +76,8 @@ def parse_args(args, options):
         elif opt in ('-?', '-h', '--help'):
             print __doc__
             sys.exit(0)
+        elif opt in ('-c', '--config'):
+            options['config_filename'] = arg
     
     if extra_args:
         options['action'] = extra_args[0]
@@ -127,8 +142,10 @@ class PublicAction(StatusAction):
 
 class SetStatusAction(Action):
     def __call__(self, twitter, options):
-        status = (u" ".join(options['extra_args'])).encode(
-            'utf8', 'replace')
+        statusTxt = (u" ".join(options['extra_args']) 
+                     if options['extra_args'] 
+                     else unicode(raw_input("message: ")))
+        status = (statusTxt.encode('utf8', 'replace'))
         twitter.statuses.update(status=status)
 
 actions = {
@@ -137,12 +154,26 @@ actions = {
     'set': SetStatusAction,
 }
 
+def loadConfig(filename):
+    email = None
+    password = None
+    if os.path.exists(filename):
+        cp = SafeConfigParser()
+        cp.read([filename])
+        email = cp.get('twitter', 'email', None)
+        password = cp.get('twitter', 'password', None)
+    return email, password
 
 def main():
     return main_with_args(sys.argv[1:])
     
 def main_with_args(args):
     parse_args(args, options)
+
+    email, password = loadConfig(options['config_filename'])
+    if not options['email']: options['email'] = email
+    if not options['password']: options['password'] = password
+    
     if options['refresh'] and options['action'] == 'set':
         print >> sys.stderr, "You can't repeatedly set your status, silly"
         print >> sys.stderr, "Use 'twitter -h' for help."
@@ -160,7 +191,7 @@ def main_with_args(args):
         else:
             doAction()
     except TwitterError, e:
-        print >> sys.stderr, e.message
+        print >> sys.stderr, e.args[0]
         print >> sys.stderr, "Use 'twitter -h' for help."
         sys.exit(1)
     except KeyboardInterrupt: