@@ -270,33 +270,27 @@ async def all_collections(
270270 base_url = str (request .base_url )
271271
272272 # Get the global limit from environment variable
273- global_limit = None
274- env_limit = os .getenv ("STAC_ITEM_LIMIT" )
275- if env_limit :
276- try :
277- global_limit = int ( env_limit )
278- except ValueError :
279- # Handle invalid integer in environment variable
280- pass
281-
282- # Apply global limit if it exists
283- if global_limit is not None :
284- # If a limit was provided, use the smaller of the two
285- if limit is not None :
286- limit = min ( limit , global_limit )
287- else :
288- limit = global_limit
273+ global_max_limit = int ( os . getenv ( "STAC_COLLECTION_GLOBAL_MAX_LIMIT" , 300 ))
274+ default_limit = int ( os .getenv ("STAC_DEFAULT_COLLECTION_LIMIT" , 100 ) )
275+ query_limit = request . query_params . get ( "limit" )
276+
277+ body_limit = None
278+ try :
279+ if request . method == "POST" and request . body ():
280+ body_data = await request . json ()
281+ body_limit = body_data . get ( "limit" )
282+ except Exception :
283+ pass
284+
285+ if body_limit is not None :
286+ limit = int ( body_limit )
287+ elif query_limit :
288+ limit = int ( query_limit )
289289 else :
290- # No global limit, use provided limit or default
291- if limit is None :
292- query_limit = request .query_params .get ("limit" )
293- if query_limit :
294- try :
295- limit = int (query_limit )
296- except ValueError :
297- limit = 10
298- else :
299- limit = 10
290+ limit = default_limit
291+
292+ if global_max_limit > 0 :
293+ limit = min (limit , global_max_limit )
300294
301295 token = request .query_params .get ("token" )
302296
@@ -660,7 +654,17 @@ async def get_search(
660654 Raises:
661655 HTTPException: If any error occurs while searching the catalog.
662656 """
663- limit = int (request .query_params .get ("limit" , os .getenv ("STAC_ITEM_LIMIT" , 10 )))
657+ global_max_limit = int (os .getenv ("STAC_GLOBAL_ITEM_MAX_LIMIT" , 100 ))
658+ default_limit = int (os .getenv ("STAC_DEFAULT_ITEM_LIMIT" , 10 ))
659+
660+ query_limit = request .query_params .get ("limit" )
661+ if query_limit :
662+ limit = int (query_limit )
663+ else :
664+ limit = default_limit
665+
666+ if global_max_limit > 0 :
667+ limit = min (limit , global_max_limit )
664668
665669 base_args = {
666670 "collections" : collections ,
0 commit comments