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 twitter_upl
= Twitter(domain
='upload.twitter.com',
25 twitter11_na
= Twitter(domain
='api.twitter.com',
29 AZaz
= "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
33 return ''.join(choice(AZaz
) for _
in range(10))
36 def test_API_set_tweet(unicod
=False):
37 random_tweet
= "A random tweet %s" % \
38 ("with unicode üøπ" if unicod
else "") + get_random_str()
39 twitter11
.statuses
.update(status
=random_tweet
)
41 recent
= twitter11
.statuses
.user_timeline()
43 assert isinstance(recent
.rate_limit_remaining
, int)
44 assert isinstance(recent
.rate_limit_reset
, int)
45 texts
= [tweet
['text'] for tweet
in recent
]
46 assert random_tweet
in texts
48 def test_API_set_unicode_tweet():
49 test_API_set_tweet(unicod
=True)
53 pos
= text
.find(" http://t.co")
58 __location__
= os
.path
.realpath(
59 os
.path
.join(os
.getcwd(), os
.path
.dirname(__file__
)))
62 return open(os
.path
.join(__location__
, "test.png"), "rb").read()
64 def test_API_set_unicode_twitpic(base64
=False):
65 random_tweet
= "A random twitpic from %s with unicode üøπ" % \
66 ("base64" if base64
else "file") + get_random_str()
68 img
= b
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94JFhMBAJv5kaUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAA4UlEQVQoz7WSIZLGIAxG6c5OFZjianBcIOfgPkju1DsEBWfAUEcNGGpY8Xe7dDoVFRvHfO8NJGRorZE39UVe1nd/WNfVObcsi3OOEAIASikAmOf5D2q/FWPUWgshKKWfiFIqhNBaxxhPjPQ05/z+Bs557xw9hBC89ymlu5BS8t6HEC5NW2sR8alRRLTWXoRSSinlSejT12M9BAAAgCeoTw9BSimlfBIu6WdYtVZEVErdaaUUItZaL/9wOsaY83YAMMb0dGtt6Jdv3/ec87ZtOWdCCGNsmibG2DiOJzP8+7b+AAOmsiPxyHWCAAAAAElFTkSuQmCC"
71 params
= {"status": random_tweet, "media[]": img}
73 params
["_base64"] = True
74 twitter11
.statuses
.update_with_media(**params
)
76 recent
= twitter11
.statuses
.user_timeline()
78 texts
= [clean_link(tweet
['text']) for tweet
in recent
]
79 assert random_tweet
in texts
81 def test_API_set_unicode_twitpic_base64():
82 test_API_set_unicode_twitpic(base64
=True)
84 def test_upload_media():
85 res
= twitter_upl
.media
.upload(media
=_img_data())
87 assert res
["media_id"]
90 # In 1.1, search works on api.twitter.com not search.twitter.com
91 # and requires authorisation
92 results
= twitter11
.search
.tweets(q
='foo')
96 def test_get_trends():
97 # This is one method of inserting parameters, using named
99 world_trends
= twitter11
.trends
.available(_woeid
=1)
103 def test_get_trends_2():
104 # This is a nicer variation of the same call as above.
105 world_trends
= twitter11
.trends
._(1)
109 def test_get_trends_3():
110 # Of course they broke it all again in 1.1...
111 assert twitter11
.trends
.place(_id
=1)
114 def test_TwitterHTTPError_raised_for_invalid_oauth():
117 twitter11_na
.statuses
.mentions_timeline()
118 except TwitterHTTPError
:
119 # this is the error we are looking for :)
124 def test_picklability():
125 res
= TwitterDictResponse({'a': 'b'}
)
126 p
= pickle
.dumps(res
)
127 res2
= pickle
.loads(p
)
129 assert res2
['a'] == 'b'
131 res
= TwitterListResponse([1, 2, 3])
132 p
= pickle
.dumps(res
)
133 res2
= pickle
.loads(p
)
138 def test_jsonifability():
139 res
= TwitterDictResponse({'a': 'b'}
)
143 assert res2
['a'] == 'b'
145 res
= TwitterListResponse([1, 2, 3])
152 def test_method_for_uri():
153 for action
in POST_ACTIONS
:
154 assert method_for_uri(get_random_str() + '/' + action
) == 'POST'
155 assert method_for_uri('statuses/timeline') == 'GET'