Skip to content

Commit a19786e

Browse files
committed
reworks LookupFriendship to accept list, int, str for user_id, screen_name params; removes users param; adds tests and data for method
1 parent 89ad4c2 commit a19786e

5 files changed

Lines changed: 106 additions & 34 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"name": "dick costolo", "id": 6385432, "screen_name": "dickc", "id_str": "6385432", "connections": ["muting"]}]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"name": "dick costolo", "id": 6385432, "screen_name": "dickc", "id_str": "6385432", "connections": ["blocking", "muting"]}]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"id_str": "12", "name": "Jack", "connections": ["none"], "screen_name": "jack", "id": 12}]

tests/test_api_30.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,3 +1356,59 @@ def testPostUpdateWithMedia(self):
13561356
status=200)
13571357
resp = self.api.PostUpdate(
13581358
media=[697007311538229248, 697007311538229249], status='test')
1359+
1360+
@responses.activate
1361+
def testLookupFriendship(self):
1362+
with open('testdata/get_friendships_lookup_none.json') as f:
1363+
resp_data = f.read()
1364+
1365+
responses.add(
1366+
responses.GET,
1367+
'https://api.twitter.com/1.1/friendships/lookup.json?user_id=12',
1368+
body=resp_data,
1369+
match_querystring=True,
1370+
status=200)
1371+
1372+
responses.add(
1373+
responses.GET,
1374+
'https://api.twitter.com/1.1/friendships/lookup.json?user_id=12,13',
1375+
body=resp_data,
1376+
match_querystring=True,
1377+
status=200)
1378+
responses.add(
1379+
responses.GET,
1380+
'https://api.twitter.com/1.1/friendships/lookup.json?screen_name=jack',
1381+
body=resp_data,
1382+
match_querystring=True,
1383+
status=200)
1384+
responses.add(
1385+
responses.GET,
1386+
'https://api.twitter.com/1.1/friendships/lookup.json?screen_name=jack,test',
1387+
body=resp_data,
1388+
match_querystring=True,
1389+
status=200)
1390+
1391+
resp = self.api.LookupFriendship(user_id=12)
1392+
self.assertTrue(isinstance(resp, list))
1393+
self.assertTrue(isinstance(resp[0], twitter.UserStatus))
1394+
self.assertEqual(resp[0].following, False)
1395+
self.assertEqual(resp[0].followed_by, False)
1396+
1397+
# If any of the following produce an unexpect result, the test will
1398+
# fail on a request to a URL that hasn't been set by responses:
1399+
test_user = twitter.User(id=12, screen_name='jack')
1400+
test_user2 = twitter.User(id=13, screen_name='test')
1401+
1402+
resp = self.api.LookupFriendship(screen_name='jack')
1403+
resp = self.api.LookupFriendship(screen_name=['jack'])
1404+
resp = self.api.LookupFriendship(screen_name=test_user)
1405+
resp = self.api.LookupFriendship(screen_name=[test_user, test_user2])
1406+
1407+
resp = self.api.LookupFriendship(user_id=12)
1408+
resp = self.api.LookupFriendship(user_id=[12])
1409+
resp = self.api.LookupFriendship(user_id=test_user)
1410+
resp = self.api.LookupFriendship(user_id=[test_user, test_user2])
1411+
1412+
self.assertRaises(
1413+
twitter.TwitterError,
1414+
lambda: self.api.LookupFriendship())

twitter/api.py

Lines changed: 47 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2749,54 +2749,67 @@ def DestroyFriendship(self, user_id=None, screen_name=None):
27492749

27502750
return User.NewFromJsonDict(data)
27512751

2752-
def LookupFriendship(self,
2753-
user_id=None,
2754-
screen_name=None,
2755-
users=None):
2752+
def LookupFriendship(self,
2753+
user_id=None,
2754+
screen_name=None):
27562755
"""Lookup friendship status for user to authed user.
2757-
2756+
27582757
Users may be specified either as lists of either user_ids,
27592758
screen_names, or twitter.User objects. The list of users that
27602759
are queried is the union of all specified parameters.
2761-
2760+
27622761
Up to 100 users may be specified.
2763-
2762+
27642763
Args:
2765-
user_id:
2766-
A list of user_ids to retrieve extended information. [Optional]
2767-
screen_name:
2768-
A list of screen_names to retrieve extended information. [Optional]
2769-
users:
2770-
A list of twitter.User objects to retrieve extended information.
2771-
[Optional]
2772-
2764+
user_id (int, User, or list of ints or Users, optional):
2765+
A list of user_ids to retrieve extended information.
2766+
screen_name (string, User, or list of strings or Users, optional):
2767+
A list of screen_names to retrieve extended information.
2768+
27732769
Returns:
2774-
A twitter.UserStatus instance representing the friendship status
2770+
list: A list of twitter.UserStatus instance representing the
2771+
friendship status between the specified users and the authenticated
2772+
user.
27752773
"""
2776-
if not user_id and not screen_name and not users:
2777-
raise TwitterError({'message': "Specify at least one of user_id, screen_name, users."})
2778-
27792774
url = '%s/friendships/lookup.json' % (self.base_url)
2780-
data = {}
2781-
uids = list()
2775+
parameters = {}
2776+
27822777
if user_id:
2783-
uids.extend(user_id)
2784-
if users:
2785-
uids.extend([u.id for u in users])
2786-
if len(uids):
2787-
data['user_id'] = ','.join(["%s" % u for u in uids])
2778+
if isinstance(user_id, list) or isinstance(user_id, tuple):
2779+
uids = list()
2780+
for user in user_id:
2781+
if isinstance(user, User):
2782+
uids.append(user.id)
2783+
else:
2784+
uids.append(enf_type('user_id', int, user))
2785+
parameters['user_id'] = ",".join([str(uid) for uid in uids])
2786+
else:
2787+
if isinstance(user_id, User):
2788+
parameters['user_id'] = user_id.id
2789+
else:
2790+
parameters['user_id'] = enf_type('user_id', int, user_id)
27882791
if screen_name:
2789-
data['screen_name'] = ','.join(screen_name)
2792+
if isinstance(screen_name, list) or isinstance(screen_name, tuple):
2793+
sn_list = list()
2794+
for user in screen_name:
2795+
if isinstance(user, User):
2796+
sn_list.append(user.screen_name)
2797+
else:
2798+
sn_list.append(enf_type('screen_name', str, user))
2799+
parameters['screen_name'] = ','.join(sn_list)
2800+
else:
2801+
if isinstance(screen_name, User):
2802+
parameters['screen_name'] = screen_name.screen_name
2803+
else:
2804+
parameters['screen_name'] = enf_type('screen_name', str, screen_name)
2805+
if not user_id and not screen_name:
2806+
raise TwitterError(
2807+
"Specify at least one of user_id or screen_name.")
27902808

2791-
resp = self._RequestUrl(url, 'GET', data=data)
2809+
resp = self._RequestUrl(url, 'GET', data=parameters)
27922810
data = self._ParseAndCheckTwitter(resp.content.decode('utf-8'))
27932811

2794-
if len(data) > 1:
2795-
return [UserStatus.NewFromJsonDict(x) for x in data]
2796-
elif len(data) == 1:
2797-
return UserStatus.NewFromJsonDict(data[0])
2798-
else:
2799-
return None
2812+
return [UserStatus.NewFromJsonDict(x) for x in data]
28002813

28012814
def CreateFavorite(self,
28022815
status=None,

0 commit comments

Comments
 (0)