@@ -424,10 +424,11 @@ def paginated_projects_list(self, page=1, per_page=50, tags=None, user=None, fla
424424 projects = json .load (resp )
425425 return projects
426426
427- def projects_list (self , tags = None , user = None , flag = None , q = None ):
427+ def projects_list (self , tags = None , user = None , flag = None , name = None , namespace = None , order_params = None ):
428428 """
429- Find all available Mergin Maps projects. It will always retrieve max 100 projects.
430- Consider using the paginated_projects_list instead.
429+ Find all available Mergin Maps projects.
430+
431+ Calls paginated_projects_list for all pages. Can take significant time to fetch all pages.
431432
432433 :param tags: Filter projects by tags ('valid_qgis', 'mappin_use', input_use')
433434 :type tags: List
@@ -438,22 +439,40 @@ def projects_list(self, tags=None, user=None, flag=None, q=None):
438439 :param flag: Predefined filter flag ('created', 'shared')
439440 :type flag: String
440441
441- :param q: Search query string
442- :type q: String
442+ :param name: Filter projects with name like name
443+ :type name: String
444+
445+ :param namespace: Filter projects with namespace like namespace
446+ :type namespace: String
447+
448+ :param order_params: optional attributes for sorting the list. It should be a comma separated attribute names
449+ with _asc or _desc appended for sorting direction. For example: "namespace_asc,disk_usage_desc".
450+ Available attrs: namespace, name, created, updated, disk_usage, creator
451+ :type order_params: String
443452
444453 :rtype: List[Dict]
445454 """
446- params = {}
447- if tags :
448- params ["tags" ] = "," .join (tags )
449- if user :
450- params ["user" ] = user
451- if flag :
452- params ["flag" ] = flag
453- if q :
454- params ["q" ] = q
455- resp = self .get ("/v1/project" , params )
456- projects = json .load (resp )
455+ projects = []
456+ page_i = 1
457+ fetched_projects = 0
458+ while True :
459+ resp = self .paginated_projects_list (
460+ page = page_i ,
461+ per_page = 50 ,
462+ tags = tags ,
463+ user = user ,
464+ flag = flag ,
465+ name = name ,
466+ namespace = namespace ,
467+ order_params = order_params
468+ )
469+ fetched_projects += len (resp ["projects" ])
470+ count = resp ["count" ]
471+ projects += resp ["projects" ]
472+ if fetched_projects < count :
473+ page_i += 1
474+ else :
475+ break
457476 return projects
458477
459478 def project_info (self , project_path , since = None , version = None ):
0 commit comments