Skip to content

Commit 96d2300

Browse files
committed
Add return_paging_info support, release candidate for wrapper 3.0.6
1 parent a4427d7 commit 96d2300

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

‎shotgun_api3.py‎

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
# https://support.shotgunsoftware.com/forums/48807-developer-api-info
3333
# ---------------------------------------------------------------------------------------------
3434

35-
__version__="3.0.5"
35+
__version__="3.0.6"
3636

3737
# ---------------------------------------------------------------------------------------------
3838
# SUMMARY
@@ -58,6 +58,9 @@
5858
# CHANGELOG
5959
# ---------------------------------------------------------------------------------------------
6060
"""
61+
+v3.0.6 - 2010 Jan 25
62+
+ optimization: don't request paging_info unless required (and server support is available)
63+
6164
+v3.0.5 - 2010 Dec 20
6265
+ officially remove support for old api3_preview controller
6366
+ find(): allow requesting a specific page of results instead of returning them all at once
@@ -192,11 +195,28 @@ def __init__(self, base_url, script_name, api_key, convert_datetimes_to_utc=True
192195

193196
self._api3=ShotgunCRUD(server_options)
194197

198+
self.server_info=self._api3.info()
199+
self._determine_features()
200+
195201
self.local_path_string=None
196202
self.platform=self._determine_platform()
197203
ifself.platform:
198204
self.local_path_string="local_path_%s"% (self.platform)
199205

206+
def_determine_features(self):
207+
self.supports_paging_info=False
208+
209+
ifself.server_info.has_key('version'):
210+
v=self.server_info['version']
211+
else:
212+
return
213+
214+
ifv[0] ==2andv[1] ==3andv[2] >=4:
215+
self.supports_paging_info=True
216+
elifv[0] >=2andv[1] >=4:
217+
self.supports_paging_info=True
218+
219+
200220
def_determine_platform(self):
201221
s=platform.system().lower()
202222
ifsin ['windows','linux','darwin']:
@@ -365,6 +385,9 @@ def find(self, entity_type, filters, fields=None, order=None, filter_operator=No
365385
"paging":{"entities_per_page": self.records_per_page, "current_page": 1}
366386
}
367387

388+
ifself.supports_paging_info:
389+
req["return_paging_info"] =True
390+
368391
iforder:
369392
req['sorts'] = []
370393
forsortinorder:
@@ -377,15 +400,24 @@ def find(self, entity_type, filters, fields=None, order=None, filter_operator=No
377400

378401
iftype(limit) !=intorlimit<0:
379402
raiseValueError("find() 'limit' parameter must be a positive integer")
380-
elif (limitandlimit>0andlimit<self.records_per_page):
403+
elif (limitandlimit>0andlimit<=self.records_per_page):
381404
req["paging"]["entities_per_page"] =limit
405+
406+
# If page isn't set and the limit doesn't require pagination, then trigger the
407+
# faster code path.
408+
ifpage==0:
409+
page=1
382410

383411
records= []
384412

385413
# if page is specified, then only return the page of records requested
386414
iftype(page) !=intorpage<0:
387415
raiseValueError("find() 'page' parameter must be a positive integer")
388416
elifpage!=0:
417+
# No paging_info needed, so optimize it out.
418+
ifself.supports_paging_info:
419+
req["return_paging_info"] =False
420+
389421
req["paging"]["current_page"] =page
390422
resp=self._api3.read(req)
391423
results=resp["results"]["entities"]
@@ -683,6 +715,14 @@ def callable(*args, **kwargs):
683715
returnself.meta_caller(attr, *args, **kwargs)
684716
returncallable
685717

718+
definfo(self):
719+
try:
720+
server_info=self.__sg.info()
721+
except:
722+
server_info={}
723+
724+
returnserver_info
725+
686726
defmeta_caller(self, attr, *args, **kwargs):
687727
try:
688728
returneval(

0 commit comments

Comments
(0)