@@ -391,6 +391,8 @@ def search_rect(
391
391
* ,
392
392
per_query : int = 200 ,
393
393
sort_by : Union [str , SortOrder ] = SortOrder .date_last_visited ,
394
+ reverse : bool = False ,
395
+ limit : int = float ("inf" ),
394
396
origin : Optional [Point ] = None ,
395
397
wait_sleep : bool = True
396
398
):
@@ -400,22 +402,28 @@ def search_rect(
400
402
:param rect: Search area.
401
403
:param int per_query: Number of caches requested in single query.
402
404
:param sort_by: Order cached by given criterion.
405
+ :param reverse: Reverse sort order.
406
+ :param limit: Maximum number of caches to return.
403
407
:param origin: Origin point for search by distance.
404
408
:param wait_sleep: In case of rate limits exceeding, wait appropriate time if set True,
405
409
otherwise just yield None.
406
410
"""
407
411
if not isinstance (sort_by , SortOrder ):
408
412
sort_by = SortOrder (sort_by )
409
413
414
+ if limit <= 0 :
415
+ return
416
+
417
+ take_amount = min (limit , per_query )
410
418
params = {
411
419
"box" : "{},{},{},{}" .format (
412
420
rect .corners [0 ].latitude ,
413
421
rect .corners [0 ].longitude ,
414
422
rect .corners [1 ].latitude ,
415
423
rect .corners [1 ].longitude ,
416
424
),
417
- "take" : per_query ,
418
- "asc" : "true" ,
425
+ "take" : take_amount ,
426
+ "asc" : str ( not reverse ). lower () ,
419
427
"skip" : 0 ,
420
428
"sort" : sort_by .value ,
421
429
}
@@ -425,7 +433,7 @@ def search_rect(
425
433
params ["origin" ] = "{},{}" .format (origin .latitude , origin .longitude )
426
434
427
435
total , offset = None , 0
428
- while (total is None ) or (offset < total ):
436
+ while (offset < limit ) and (( total is None ) or (offset < total ) ):
429
437
params ["skip" ] = offset
430
438
431
439
try :
@@ -441,7 +449,7 @@ def search_rect(
441
449
yield Cache ._from_api_record (self , record )
442
450
443
451
total = resp ["total" ]
444
- offset += per_query
452
+ offset += take_amount
445
453
446
454
def geocode (self , location ):
447
455
"""Return a :class:`.Point` object from geocoded location.
0 commit comments