Skip to content

Commit 1dd16ea

Browse files
author
Vic Fryzel
committed
Adding new ACL and get by ID methods to DocsClient.
1 parent ec28a8e commit 1dd16ea

2 files changed

Lines changed: 44 additions & 2 deletions

File tree

src/gdata/docs/client.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
# Feed URIs that are given by the API, but cannot be obtained without
3333
# making a mostly unnecessary HTTP request.
3434
RESOURCE_FEED_URI = '/feeds/default/private/full'
35+
RESOURCE_SELF_LINK_TEMPLATE = RESOURCE_FEED_URI + '/%s'
3536
RESOURCE_UPLOAD_URI = '/feeds/upload/create-session/default/private/full'
3637
COLLECTION_UPLOAD_URI_TEMPLATE = \
3738
'/feeds/upload/create-session/feeds/default/private/full/%s/contents'
@@ -208,6 +209,20 @@ def get_resource(self, entry, **kwargs):
208209

209210
GetResource = get_resource
210211

212+
def get_resource_by_id(self, resource_id, **kwargs):
213+
"""Retrieves a resource again given its resource ID.
214+
215+
Args:
216+
resource_id: Typed or untyped resource ID of a resource.
217+
kwargs: Other args to pass to GetResourceBySelfLink().
218+
Returns:
219+
gdata.docs.data.Resource representing retrieved resource.
220+
"""
221+
return self.GetResourceBySelfLink(
222+
RESOURCE_SELF_LINK_TEMPLATE % resource_id, **kwargs)
223+
224+
GetResourceById = get_resource_by_id
225+
211226
def get_resource_by_self_link(self, uri, etag=None, show_root=None,
212227
**kwargs):
213228
"""Retrieves a particular resource by its self link.
@@ -571,11 +586,25 @@ def _check_entry_is_not_collection(self, entry):
571586
raise ValueError(
572587
'%s is a collection, which is not valid in this method' % str(entry))
573588

589+
def get_acl(self, entry, **kwargs):
590+
"""Retrieves an AclFeed for the given resource.
591+
592+
Args:
593+
entry: gdata.docs.data.Resource to fetch AclFeed for.
594+
kwargs: Other args to pass to GetFeed().
595+
Returns:
596+
gdata.docs.data.AclFeed representing retrieved entries.
597+
"""
598+
self._check_entry_is_resource(entry)
599+
return self.get_feed(
600+
entry.GetAclFeedLink().href,
601+
desired_class=gdata.docs.data.AclFeed, **kwargs)
602+
574603
def get_acl_entry(self, entry, **kwargs):
575604
"""Retrieves an AclEntry again.
576-
605+
577606
This is useful if you need to poll for an ACL changing.
578-
607+
579608
Args:
580609
entry: gdata.docs.data.AclEntry to fetch and return.
581610
kwargs: Other args to pass to GetAclEntryBySelfLink().

tests/gdata_tests/docs/live_client_test.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,19 @@ def testGetResource(self):
185185
self.assert_(entry.title.text is not None)
186186
self.assert_(entry.resource_id.text is not None)
187187
self.assert_(entry.title.text is not None)
188+
entry = self.client.GetResourceById(self.resource.resource_id.text)
189+
self.assert_(isinstance(entry, gdata.docs.data.Resource))
190+
self.assert_(entry.id.text is not None)
191+
self.assert_(entry.title.text is not None)
192+
self.assert_(entry.resource_id.text is not None)
193+
self.assert_(entry.title.text is not None)
194+
entry = self.client.GetResourceById(
195+
self.resource.resource_id.text.split(':')[1])
196+
self.assert_(isinstance(entry, gdata.docs.data.Resource))
197+
self.assert_(entry.id.text is not None)
198+
self.assert_(entry.title.text is not None)
199+
self.assert_(entry.resource_id.text is not None)
200+
self.assert_(entry.title.text is not None)
188201
entry = self.client.GetResourceBySelfLink(
189202
self.resource.GetSelfLink().href)
190203
self.assert_(isinstance(entry, gdata.docs.data.Resource))

0 commit comments

Comments
 (0)