Package scapi :: Package tests :: Module test_connect
[hide private]
[frames] | no frames]

Source Code for Module scapi.tests.test_connect

  1  from __future__ import with_statement 
  2  import os 
  3  import tempfile 
  4  import itertools 
  5  from ConfigParser import SafeConfigParser 
  6  import pkg_resources 
  7  import scapi 
  8  import scapi.authentication 
  9  import logging 
 10  import webbrowser 
 11   
 12  logger = logging.getLogger(__name__) 
 13  logger.setLevel(logging.DEBUG) 
 14  _logger = logging.getLogger("scapi") 
 15  #_logger.setLevel(logging.DEBUG) 
 16   
 17  RUN_INTERACTIVE_TESTS = False 
 18  USE_OAUTH = True 
 19   
 20  TOKEN  = "FjNE9aRTg8kpxuOjzwsX8Q" 
 21  SECRET = "NP5PGoyKcQv64E0aZgV4CRNzHfPwR4QghrWoqEgEE" 
 22  CONSUMER = "EEi2URUfM97pAAxHTogDpQ" 
 23  CONSUMER_SECRET = "NFYd8T3i4jVKGZ9TMy9LHaBQB3Sh8V5sxBiMeMZBow" 
 24  API_HOST = "api.soundcloud.dev:3000" 
 25  USER = "" 
 26  PASSWORD = "" 
 27   
 28  CONFIG_NAME = "soundcloud.cfg" 
 29   
 30  CONNECTOR = None 
 31  ROOT = None 
32 -def setup():
33 global CONNECTOR, ROOT 34 # load_config() 35 #scapi.ApiConnector(host='192.168.2.101:3000', user='tiga', password='test') 36 #scapi.ApiConnector(host='sandbox-api.soundcloud.com:3030', user='tiga', password='test') 37 scapi.USE_PROXY = False 38 scapi.PROXY = 'http://127.0.0.1:10000/' 39 40 if USE_OAUTH: 41 authenticator = scapi.authentication.OAuthAuthenticator(CONSUMER, 42 CONSUMER_SECRET, 43 TOKEN, 44 SECRET) 45 else: 46 authenticator = scapi.authentication.BasicAuthenticator(USER, PASSWORD, CONSUMER, CONSUMER_SECRET) 47 48 logger.debug("API_HOST: %s", API_HOST) 49 CONNECTOR = scapi.ApiConnector(host=API_HOST, 50 authenticator=authenticator) 51 ROOT = scapi.Scope(CONNECTOR)
52
53 -def load_config(config_name=None):
54 global TOKEN, SECRET, CONSUMER_SECRET, CONSUMER, API_HOST, USER, PASSWORD 55 if config_name is None: 56 config_name = CONFIG_NAME 57 parser = SafeConfigParser() 58 current = os.getcwd() 59 while current: 60 name = os.path.join(current, config_name) 61 if os.path.exists(name): 62 parser.read([name]) 63 TOKEN = parser.get('global', 'accesstoken') 64 SECRET = parser.get('global', 'accesstoken_secret') 65 CONSUMER = parser.get('global', 'consumer') 66 CONSUMER_SECRET = parser.get('global', 'consumer_secret') 67 API_HOST = parser.get('global', 'host') 68 USER = parser.get('global', 'user') 69 PASSWORD = parser.get('global', 'password') 70 logger.debug("token: %s", TOKEN) 71 logger.debug("secret: %s", SECRET) 72 logger.debug("consumer: %s", CONSUMER) 73 logger.debug("consumer_secret: %s", CONSUMER_SECRET) 74 logger.debug("user: %s", USER) 75 logger.debug("password: %s", PASSWORD) 76 logger.debug("host: %s", API_HOST) 77 break 78 new_current = os.path.dirname(current) 79 if new_current == current: 80 break 81 current = new_current
82 83
84 -def test_load_config():
85 base = tempfile.mkdtemp() 86 oldcwd = os.getcwd() 87 cdir = os.path.join(base, "foo") 88 os.mkdir(cdir) 89 os.chdir(cdir) 90 test_config = """ 91 [global] 92 host=host 93 consumer=consumer 94 consumer_secret=consumer_secret 95 accesstoken=accesstoken 96 accesstoken_secret=accesstoken_secret 97 user=user 98 password=password 99 """ 100 with open(os.path.join(base, CONFIG_NAME), "w") as cf: 101 cf.write(test_config) 102 load_config() 103 assert TOKEN == "accesstoken" and SECRET == "accesstoken_secret" and API_HOST == 'host' 104 assert CONSUMER == "consumer" and CONSUMER_SECRET == "consumer_secret" 105 assert USER == "user" and PASSWORD == "password" 106 os.chdir(oldcwd) 107 load_config()
108 109
110 -def test_connect():
111 sca = ROOT 112 quite_a_few_users = list(itertools.islice(sca.users(), 0, 127)) 113 114 logger.debug(quite_a_few_users) 115 assert isinstance(quite_a_few_users, list) and isinstance(quite_a_few_users[0], scapi.User) 116 user = sca.me() 117 logger.debug(user) 118 assert isinstance(user, scapi.User) 119 contacts = list(user.contacts()) 120 assert isinstance(contacts, list) 121 assert isinstance(contacts[0], scapi.User) 122 logger.debug(contacts) 123 tracks = list(user.tracks()) 124 assert isinstance(tracks, list) 125 assert isinstance(tracks[0], scapi.Track) 126 logger.debug(tracks)
127 128
129 -def test_access_token_acquisition():
130 """ 131 This test is commented out because it needs user-interaction. 132 """ 133 if not RUN_INTERACTIVE_TESTS: 134 return 135 oauth_authenticator = scapi.authentication.OAuthAuthenticator(CONSUMER, 136 CONSUMER_SECRET, 137 None, 138 None) 139 140 sca = scapi.ApiConnector(host=API_HOST, authenticator=oauth_authenticator) 141 token, secret = sca.fetch_request_token() 142 authorization_url = sca.get_request_token_authorization_url(token) 143 webbrowser.open(authorization_url) 144 raw_input("please press return") 145 oauth_authenticator = scapi.authentication.OAuthAuthenticator(CONSUMER, 146 CONSUMER_SECRET, 147 token, 148 secret) 149 150 sca = scapi.ApiConnector(API_HOST, authenticator=oauth_authenticator) 151 token, secret = sca.fetch_access_token() 152 logger.info("Access token: '%s'", token) 153 logger.info("Access token secret: '%s'", secret) 154 oauth_authenticator = scapi.authentication.OAuthAuthenticator(CONSUMER, 155 CONSUMER_SECRET, 156 token, 157 secret) 158 159 sca = scapi.ApiConnector(API_HOST, authenticator=oauth_authenticator) 160 test_track_creation()
161
162 -def test_track_creation():
163 sca = ROOT 164 track = sca.Track.new(title='bar') 165 assert isinstance(track, scapi.Track)
166
167 -def test_track_update():
168 sca = ROOT 169 track = sca.Track.new(title='bar') 170 assert isinstance(track, scapi.Track) 171 track.title='baz' 172 track = sca.Track.get(track.id) 173 assert track.title == "baz"
174
175 -def test_scoped_track_creation():
176 sca = ROOT 177 user = sca.me() 178 track = user.tracks.new(title="bar") 179 assert isinstance(track, scapi.Track)
180
181 -def test_upload():
182 assert pkg_resources.resource_exists("scapi.tests.test_connect", "knaster.mp3") 183 data = pkg_resources.resource_stream("scapi.tests.test_connect", "knaster.mp3") 184 sca = ROOT 185 user = sca.me() 186 logger.debug(user) 187 asset = sca.assets.new(filedata=data) 188 assert isinstance(asset, scapi.Asset) 189 logger.debug(asset) 190 tracks = list(user.tracks()) 191 track = tracks[0] 192 track.assets.append(asset)
193
194 -def test_contact_list():
195 sca = ROOT 196 user = sca.me() 197 contacts = list(user.contacts()) 198 assert isinstance(contacts, list) 199 assert isinstance(contacts[0], scapi.User)
200
201 -def test_permissions():
202 sca = ROOT 203 user = sca.me() 204 tracks = itertools.islice(user.tracks(), 1) 205 for track in tracks: 206 permissions = list(track.permissions()) 207 logger.debug(permissions) 208 assert isinstance(permissions, list) 209 if permissions: 210 assert isinstance(permissions[0], scapi.User)
211
212 -def test_setting_permissions():
213 sca = ROOT 214 me = sca.me() 215 track = sca.Track.new(title='bar', sharing="private") 216 assert track.sharing == "private" 217 users = itertools.islice(sca.users(), 10) 218 users_to_set = [user for user in users if user != me] 219 assert users_to_set, "Didn't find any suitable users" 220 track.permissions = users_to_set 221 assert set(track.permissions()) == set(users_to_set)
222
223 -def test_setting_comments():
224 sca = ROOT 225 user = sca.me() 226 track = sca.Track.new(title='bar', sharing="private") 227 comment = sca.Comment.create(body="This is the body of my comment", timestamp=10) 228 track.comments = comment 229 assert track.comments().next().body == comment.body
230 231
232 -def test_setting_comments_the_way_shawn_says_its_correct():
233 sca = ROOT 234 track = sca.Track.new(title='bar', sharing="private") 235 cbody = "This is the body of my comment" 236 track.comments.new(body=cbody, timestamp=10) 237 assert list(track.comments())[0].body == cbody
238
239 -def test_contact_add_and_removal():
240 sca = ROOT 241 me = sca.me() 242 for user in sca.users(): 243 if user != me: 244 user_to_set = user 245 break 246 247 contacts = list(me.contacts()) 248 if user_to_set in contacts: 249 me.contacts.remove(user_to_set) 250 251 me.contacts.append(user_to_set) 252 253 contacts = list(me.contacts() ) 254 assert user_to_set.id in [c.id for c in contacts] 255 256 me.contacts.remove(user_to_set) 257 258 contacts = list(me.contacts() ) 259 assert user_to_set not in contacts
260 261
262 -def test_favorites():
263 sca = ROOT 264 me = sca.me() 265 266 favorites = list(me.favorites()) 267 assert favorites == [] or isinstance(favorites[0], scapi.Track) 268 269 track = None 270 for user in sca.users(): 271 if user == me: 272 continue 273 for track in user.tracks(): 274 break 275 if track is not None: 276 break 277 278 me.favorites.append(track) 279 280 favorites = list(me.favorites()) 281 assert track in favorites 282 283 me.favorites.remove(track) 284 285 favorites = list(me.favorites()) 286 assert track not in favorites
287
288 -def test_large_list():
289 sca = ROOT 290 tracks = list(sca.tracks()) 291 if len(tracks) < scapi.ApiConnector.LIST_LIMIT: 292 for i in xrange(scapi.ApiConnector.LIST_LIMIT): 293 scapi.Track.new(title='test_track_%i' % i) 294 all_tracks = sca.tracks() 295 assert not isinstance(all_tracks, list) 296 all_tracks = list(all_tracks) 297 assert len(all_tracks) > scapi.ApiConnector.LIST_LIMIT
298 299
300 -def test_events():
301 events = list(ROOT.events()) 302 assert isinstance(events, list) 303 assert isinstance(events[0], scapi.Event)
304
305 -def test_me_having_stress():
306 sca = ROOT 307 for _ in xrange(20): 308 setup() 309 sca.me()
310
311 -def test_non_global_api():
312 root = scapi.Scope(CONNECTOR) 313 me = root.me() 314 assert isinstance(me, scapi.User) 315 316 # now get something *from* that user 317 favorites = list(me.favorites()) 318 assert favorites
319
320 -def test_playlists():
321 sca = ROOT 322 playlists = list(itertools.islice(sca.playlists(), 0, 127)) 323 found = False 324 for playlist in playlists: 325 tracks = playlist.tracks 326 if not isinstance(tracks, list): 327 tracks = [tracks] 328 for trackdata in tracks: 329 print trackdata 330 user = trackdata.user 331 print user 332 print user.tracks() 333 print playlist.user 334 break
335