Skip to content

Commit bc8f3dd

Browse files
author
Shraddha
committed
Added RetrieveGroups method and updated RetrieveAllGroups and RetrieveAllMembers method to return all feed instead of just default one page
changed src/gdata/apps/groups/client.py changed tests/gdata_tests/apps/groups/live_client_test.py
1 parent 0b44ed8 commit bc8f3dd

2 files changed

Lines changed: 95 additions & 11 deletions

File tree

‎src/gdata/apps/groups/client.py‎

Lines changed: 87 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,20 +107,52 @@ def make_group_member_uri(self, group_id, member_id=None, params=None):
107107
member_id=member_id, params=params)
108108

109109
MakeGroupMembersUri = make_group_member_uri
110+
111+
def RetrieveAllPages(self, feed, desired_class=gdata.data.GDFeed):
112+
"""Retrieve all pages and add all elements.
110113
111-
def retrieve_all_groups(self, **kwargs):
112-
"""Retrieves all groups for the given domain.
114+
Args:
115+
feed: gdata.data.GDFeed object with linked elements.
116+
desired_class: type of Feed to be returned.
117+
118+
Returns:
119+
desired_class: subclass of gdata.data.GDFeed.
120+
"""
121+
122+
next = feed.GetNextLink()
123+
while next is not None:
124+
next_feed = self.GetFeed(next.href, desired_class=desired_class)
125+
for a_entry in next_feed.entry:
126+
feed.entry.append(a_entry)
127+
next = next_feed.GetNextLink()
128+
return feed
129+
130+
def retrieve_page_of_groups(self, **kwargs):
131+
"""Retrieves first page of groups for the given domain.
113132
114133
Args:
115134
kwargs: The other parameters to pass to gdata.client.GDClient.GetFeed()
116135
117136
Returns:
118-
A gdata.apps.groups.data.GDFeed of the group users
137+
A gdata.apps.groups.data.GroupFeed of the groups
119138
"""
120139
uri = self.MakeGroupProvisioningUri()
121140
return self.GetFeed(uri,
122141
desired_class=gdata.apps.groups.data.GroupFeed, **kwargs)
123142

143+
RetrievePageOfGroups = retrieve_page_of_groups
144+
145+
def retrieve_all_groups(self):
146+
"""Retrieve all groups in this domain.
147+
148+
Returns:
149+
gdata.apps.groups.data.GroupFeed of the groups
150+
"""
151+
152+
groups_feed = self.RetrievePageOfGroups()
153+
# pagination
154+
return self.RetrieveAllPages(groups_feed, gdata.apps.groups.data.GroupFeed)
155+
124156
RetrieveAllGroups = retrieve_all_groups
125157

126158
def retrieve_group(self, group_id, **kwargs):
@@ -134,11 +166,45 @@ def retrieve_group(self, group_id, **kwargs):
134166
A gdata.apps.groups.data.GroupEntry representing the group
135167
"""
136168
uri = self.MakeGroupProvisioningUri(group_id=group_id)
137-
print uri
138169
return self.GetEntry(uri,
139170
desired_class=gdata.apps.groups.data.GroupEntry, **kwargs)
140171

141172
RetrieveGroup = retrieve_group
173+
174+
def retrieve_page_of_member_groups(self, member_id, direct_only=False):
175+
"""Retrieve one page of groups that belong to the given member_id.
176+
177+
Args:
178+
member_id: The member's email address (e.g. member@example.com).
179+
direct_only: Boolean whether only return groups that this member
180+
directly belongs to.
181+
182+
Returns:
183+
gdata.apps.groups.data.GroupFeed of the groups.
184+
"""
185+
uri = self.MakeGroupProvisioningUri(params={'member':member_id,
186+
'directOnly':direct_only})
187+
return self.GetFeed(uri,
188+
desired_class=gdata.apps.groups.data.GroupFeed, **kwargs)
189+
190+
RetrievePageOfMemberGroups = retrieve_page_of_member_groups
191+
192+
def retrieve_groups(self, member_id, direct_only=False, **kwargs):
193+
"""Retrieve all groups that belong to the given member_id.
194+
195+
Args:
196+
member_id: The member's email address (e.g. member@example.com).
197+
direct_only: Boolean whether only return groups that this member
198+
directly belongs to.
199+
200+
Returns:
201+
gdata.apps.groups.data.GroupFeed of the groups
202+
"""
203+
groups_feed = self.RetrievePageOfMemberGroups()
204+
# pagination
205+
return self.RetrieveAllPages(groups_feed, gdata.apps.groups.data.GroupFeed)
206+
207+
RetrieveGroups = retrieve_groups
142208

143209
def create_group(self, group_id, group_name,
144210
description=None, email_permission=None, **kwargs):
@@ -190,20 +256,34 @@ def delete_group(self, group_id, **kwargs):
190256

191257
DeleteGroup = delete_group
192258

193-
def retrieve_all_members(self, group_id, **kwargs):
194-
"""Retrieves group members of the group.
259+
def retrieve_page_of_members(self, group_id, **kwargs):
260+
"""Retrieves first page of group members of the group.
195261
196262
Args:
197263
group_id: string groupId of the group whose members are retrieved
198264
kwargs: The other parameters to pass to gdata.client.GDClient.GetFeed()
199265
200266
Returns:
201-
A gdata.apps.groups.data.GDFeed of the GroupMember entries
267+
A gdata.apps.groups.data.GroupMemberFeed of the GroupMember entries
202268
"""
203269
uri = self.MakeGroupMembersUri(group_id=group_id)
204270
return self.GetFeed(uri,
205271
desired_class=gdata.apps.groups.data.GroupMemberFeed, **kwargs)
206272

273+
RetrievePageOfMembers = retrieve_page_of_members
274+
275+
def retrieve_all_members(self, group_id, **kwargs):
276+
"""Retrieve all members of the group.
277+
278+
Returns:
279+
gdata.apps.groups.data.GroupMemberFeed
280+
"""
281+
282+
group_member_feed = self.RetrievePageOfMembers(group_id=group_id)
283+
# pagination
284+
return self.RetrieveAllPages(group_member_feed,
285+
gdata.apps.groups.data.GroupMemberFeed)
286+
207287
RetrieveAllMembers = retrieve_all_members
208288

209289
def retrieve_group_member(self, group_id, member_id, **kwargs):

‎tests/gdata_tests/apps/groups/live_client_test.py‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ def testClientConfiguration(self):
5656
self.assertEqual('2.0', self.client.api_version)
5757
self.assertEqual('apps', self.client.auth_service)
5858
self.assertEqual(
59-
('http://www.google.com/a/feeds/',
60-
'https://www.google.com/a/feeds/',
61-
'http://apps-apis.google.com/a/feeds/',
62-
'https://apps-apis.google.com/a/feeds/'), self.client.auth_scopes)
59+
('https://apps-apis.google.com/a/feeds/user/',
60+
'https://apps-apis.google.com/a/feeds/policies/',
61+
'https://apps-apis.google.com/a/feeds/alias/',
62+
'https://apps-apis.google.com/a/feeds/groups/'),
63+
self.client.auth_scopes)
6364
if conf.options.get_value('runlive') == 'true':
6465
self.assertEqual(self.client.domain, conf.options.get_value('appsdomain'))
6566
else:
@@ -71,6 +72,9 @@ def testMakeGroupProvisioningUri(self):
7172
self.assertEqual('/a/feeds/group/2.0/%s/firstgroup@example.com'
7273
% self.client.domain,
7374
self.client.MakeGroupProvisioningUri(group_id='firstgroup@example.com'))
75+
self.assertEqual(
76+
'/a/feeds/group/2.0/%s?member=member1' % self.client.domain,
77+
self.client.MakeGroupProvisioningUri(params={'member':'member1'}))
7478

7579
def testMakeGroupMembersUri(self):
7680
self.assertEqual('/a/feeds/group/2.0/%s/firstgroup@example.com/member'

0 commit comments

Comments
 (0)