@@ -106,6 +106,7 @@ def get(
106106 count = self ._count_projects (
107107 namespace = namespace ,
108108 search_str = query ,
109+ tag = tag ,
109110 admin = admin ,
110111 filter_by = filter_by ,
111112 filter_end_date = filter_end_date ,
@@ -115,6 +116,7 @@ def get(
115116 results = self ._get_projects (
116117 namespace = namespace ,
117118 search_str = query ,
119+ tag = tag ,
118120 admin = admin ,
119121 offset = offset ,
120122 limit = limit ,
@@ -235,6 +237,7 @@ def _count_projects(
235237 self ,
236238 namespace : str = None ,
237239 search_str : str = None ,
240+ tag : str = None ,
238241 admin : Union [str , List [str ]] = None ,
239242 filter_by : Optional [Literal ["submission_date" , "last_update_date" ]] = None ,
240243 filter_start_date : Optional [str ] = None ,
@@ -246,6 +249,7 @@ def _count_projects(
246249
247250 :param namespace: namespace where to search for a project
248251 :param search_str: search string. will be searched in name, tag and description information
252+ :param tag: tag of the projects (find projects with specific tag)
249253 :param admin: string or list of admins [e.g. "Khoroshevskyi", or ["doc_adin","Khoroshevskyi"]]
250254 :param filter_by: data to use filter on.
251255 Options: ["submission_date", "last_update_date"]
@@ -270,6 +274,8 @@ def _count_projects(
270274 )
271275 if pep_type :
272276 statement = statement .where (Projects .pop .is_ (pep_type == "pop" ))
277+ if tag :
278+ statement = statement .where (Projects .tag == tag )
273279 result = self ._pep_db_engine .session_execute (statement ).first ()
274280
275281 try :
@@ -280,6 +286,7 @@ def _count_projects(
280286 def _get_projects (
281287 self ,
282288 namespace : str = None ,
289+ tag : str = None ,
283290 search_str : str = None ,
284291 admin : Union [str , List [str ]] = None ,
285292 limit : int = DEFAULT_LIMIT ,
@@ -295,6 +302,7 @@ def _get_projects(
295302 Get projects by providing search string.
296303
297304 :param namespace: namespace where to search for a project
305+ :param tag: tag of the projects (find projects with specific tag)
298306 :param search_str: search string that has to be found in the name or tag
299307 :param admin: True, if user is admin of the namespace [Default: False]
300308 :param limit: limit of return results
@@ -322,6 +330,7 @@ def _get_projects(
322330 namespace = namespace ,
323331 search_str = search_str ,
324332 admin_list = admin ,
333+ tag = tag ,
325334 )
326335 statement = self ._add_date_filter_if_provided (
327336 statement , filter_by , filter_start_date , filter_end_date
@@ -406,6 +415,7 @@ def _add_condition(
406415 namespace : str = None ,
407416 search_str : str = None ,
408417 admin_list : Union [str , List [str ]] = None ,
418+ tag : str = None ,
409419 ) -> Select :
410420 """
411421 Add where clause to sqlalchemy statement (in project search)
@@ -414,6 +424,7 @@ def _add_condition(
414424 :param namespace: project namespace sql:(where namespace = "")
415425 :param search_str: search string that has to be found in the name or tag
416426 :param admin_list: list or string of admin rights to namespace
427+ :param tag: tag of the projects (find projects with specific tag)
417428 :return: sqlalchemy representation of a SELECT statement with where clause.
418429 """
419430 admin_list = tuple_converter (admin_list )
@@ -428,6 +439,9 @@ def _add_condition(
428439 if namespace :
429440 statement = statement .where (Projects .namespace == namespace )
430441
442+ if tag :
443+ statement = statement .where (Projects .tag == tag )
444+
431445 statement = statement .where (
432446 or_ (Projects .private .is_ (False ), Projects .namespace .in_ (admin_list ))
433447 )
0 commit comments