2 from __future__
import unicode_literals
5 from random
import choice
10 from twitter
import Twitter
, NoAuth
, OAuth
, read_token_file
, TwitterHTTPError
11 from twitter
.api
import TwitterDictResponse
, TwitterListResponse
, POST_ACTIONS
, method_for_uri
12 from twitter
.cmdline
import CONSUMER_KEY
, CONSUMER_SECRET
15 oauth
= OAuth(*read_token_file('tests/oauth_creds')
16 + (CONSUMER_KEY
, CONSUMER_SECRET
))
18 twitter11
= Twitter(domain
='api.twitter.com',
22 twitter11_na
= Twitter(domain
='api.twitter.com',
26 AZaz
= "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
30 return ''.join(choice(AZaz
) for _
in range(10))
33 def test_API_set_tweet(unicod
=False):
34 random_tweet
= "A random tweet %s" % \
35 ("with unicode üøπ" if unicod
else "") + get_random_str()
36 twitter11
.statuses
.update(status
=random_tweet
)
38 recent
= twitter11
.statuses
.user_timeline()
40 assert isinstance(recent
.rate_limit_remaining
, int)
41 assert isinstance(recent
.rate_limit_reset
, int)
42 texts
= [tweet
['text'] for tweet
in recent
]
43 assert random_tweet
in texts
45 def test_API_set_unicode_tweet():
46 test_API_set_tweet(unicod
=True)
50 pos
= text
.find(" http://t.co")
55 __location__
= os
.path
.realpath(
56 os
.path
.join(os
.getcwd(), os
.path
.dirname(__file__
)))
58 def test_API_set_unicode_twitpic(base64
=False):
59 random_tweet
= "A random twitpic from %s with unicode üøπ" % \
60 ("base64" if base64
else "file") + get_random_str()
62 img
= b
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94JFhMBAJv5kaUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAA4UlEQVQoz7WSIZLGIAxG6c5OFZjianBcIOfgPkju1DsEBWfAUEcNGGpY8Xe7dDoVFRvHfO8NJGRorZE39UVe1nd/WNfVObcsi3OOEAIASikAmOf5D2q/FWPUWgshKKWfiFIqhNBaxxhPjPQ05/z+Bs557xw9hBC89ymlu5BS8t6HEC5NW2sR8alRRLTWXoRSSinlSejT12M9BAAAgCeoTw9BSimlfBIu6WdYtVZEVErdaaUUItZaL/9wOsaY83YAMMb0dGtt6Jdv3/ec87ZtOWdCCGNsmibG2DiOJzP8+7b+AAOmsiPxyHWCAAAAAElFTkSuQmCC"
64 with open(os
.path
.join(__location__
, "test.png"), "rb") as f
:
66 params
= {"status": random_tweet, "media[]": img}
68 params
["_base64"] = True
69 twitter11
.statuses
.update_with_media(**params
)
71 recent
= twitter11
.statuses
.user_timeline()
73 texts
= [clean_link(tweet
['text']) for tweet
in recent
]
74 assert random_tweet
in texts
76 def test_API_set_unicode_twitpic_base64():
77 test_API_set_unicode_twitpic(base64
=True)
81 # In 1.1, search works on api.twitter.com not search.twitter.com
82 # and requires authorisation
83 results
= twitter11
.search
.tweets(q
='foo')
87 def test_get_trends():
88 # This is one method of inserting parameters, using named
90 world_trends
= twitter11
.trends
.available(_woeid
=1)
94 def test_get_trends_2():
95 # This is a nicer variation of the same call as above.
96 world_trends
= twitter11
.trends
._(1)
100 def test_get_trends_3():
101 # Of course they broke it all again in 1.1...
102 assert twitter11
.trends
.place(_id
=1)
105 def test_TwitterHTTPError_raised_for_invalid_oauth():
108 twitter11_na
.statuses
.mentions_timeline()
109 except TwitterHTTPError
:
110 # this is the error we are looking for :)
115 def test_picklability():
116 res
= TwitterDictResponse({'a': 'b'}
)
117 p
= pickle
.dumps(res
)
118 res2
= pickle
.loads(p
)
120 assert res2
['a'] == 'b'
122 res
= TwitterListResponse([1, 2, 3])
123 p
= pickle
.dumps(res
)
124 res2
= pickle
.loads(p
)
129 def test_jsonifability():
130 res
= TwitterDictResponse({'a': 'b'}
)
134 assert res2
['a'] == 'b'
136 res
= TwitterListResponse([1, 2, 3])
143 def test_method_for_uri():
144 for action
in POST_ACTIONS
:
145 assert method_for_uri(get_random_str() + '/' + action
) == 'POST'
146 assert method_for_uri('statuses/timeline') == 'GET'