]> jfr.im git - z_archive/twitter.git/blobdiff - twitter/cmdline.py
Add a simple prompt thing to twitter cmdline.
[z_archive/twitter.git] / twitter / cmdline.py
index 59113de35c26ae928da52803b2a2a171fb547895..3162f1c489be6c1646c947b9d2817ef480793d6f 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
 # encoding: utf-8
 """
 USAGE:
@@ -8,16 +7,19 @@ USAGE:
 
 ACTIONS:
  authorize      authorize the command-line tool to interact with Twitter
- follow         add the specified user to your follow list
+ follow         follow a user
  friends        get latest tweets from your friends (default action)
  help           print this help text that you are currently reading
- leave          remove the specified user from your following list
+ leave          stop following a user
+ list           get list of a user's lists; give a list name to get
+                    tweets from that list
+ mylist         get list of your lists; give a list name to get tweets
+                    from that list
  public         get latest public tweets
- list           get list of user lists
- replies        get latest replies
+ replies        get latest replies to you
  search         search twitter (Beware: octothorpe, escape it)
  set            set your twitter status
- shell          login the twitter shell
+ shell          login to the twitter shell
 
 
 OPTIONS:
@@ -31,8 +33,8 @@ OPTIONS:
  -l --length <count>        specify number of status updates shown
                             (default: 20, max: 200)
  -t --timestamp             show time before status lines
- -d --datestamp             shoe date before status lines
-    --no-ssl                use HTTP instead of more secure HTTPS
+ -d --datestamp             show date before status lines
+    --no-ssl                use less-secure HTTP instead of HTTPS
     --oauth <filename>      filename to read/store oauth credentials to
 
 FORMATS for the --format option
@@ -75,6 +77,7 @@ from api import Twitter, TwitterError
 from oauth import OAuth, write_token_file, read_token_file
 from oauth_dance import oauth_dance
 import ansi
+from util import smrt_input
 
 OPTIONS = {
     'action': 'friends',
@@ -173,6 +176,7 @@ class URLStatusFormatter(object):
         urls = self.urlmatch.findall(status['text'])
         return u'\n'.join(urls) if urls else ""
 
+
 class ListsFormatter(object):
     def __call__(self, list):
         if list['description']:
@@ -400,13 +404,30 @@ class AdminAction(Action):
 
 class ListsAction(StatusAction):
     def getStatuses(self, twitter, options):
-        screen_name = twitter.account.verify_credentials()['screen_name']
-        if not (options['extra_args'] and options['extra_args'][0]):
-            for list in twitter.user.lists(user=screen_name)['lists']:
+        if not options['extra_args']:
+            raise TwitterError("Please provide a user to query for lists")
+
+        screen_name = options['extra_args'][0]
+
+        if not options['extra_args'][1:]:
+            lists = twitter.user.lists(user=screen_name)['lists']
+            if not lists:
+                printNicely("This user has no lists.")
+            for list in lists:
                 lf = get_formatter('lists', options)
                 printNicely(lf(list))
-            raise SystemExit(0)
-        return reversed(twitter.user.lists.list.statuses(user=screen_name, list=options['extra_args'][0]))
+            return []
+        else:
+            return reversed(twitter.user.lists.list.statuses(
+                    user=screen_name, list=options['extra_args'][1]))
+
+
+class MyListsAction(ListsAction):
+    def getStatuses(self, twitter, options):
+        screen_name = twitter.account.verify_credentials()['screen_name']
+        options['extra_args'].insert(0, screen_name)
+        return ListsAction.getStatuses(self, twitter, options)
+
 
 class FriendsAction(StatusAction):
     def getStatuses(self, twitter, options):
@@ -483,6 +504,14 @@ class TwitterShell(Action):
                 else:
                     raise SystemExit(0)
 
+class PythonPromptAction(Action):
+    def __call__(self, twitter, options):
+        try:
+            while True:
+                smrt_input(globals(), locals())
+        except EOFError:
+            pass
+
 class HelpAction(Action):
     def __call__(self, twitter, options):
         print __doc__
@@ -496,9 +525,11 @@ actions = {
     'follow'    : FollowAction,
     'friends'   : FriendsAction,
     'list'      : ListsAction,
+    'mylist'    : MyListsAction,
     'help'      : HelpAction,
     'leave'     : LeaveAction,
     'public'    : PublicAction,
+    'pyprompt'  : PythonPromptAction,
     'replies'   : RepliesAction,
     'search'    : SearchAction,
     'set'       : SetStatusAction,