@@ -32,7 +32,7 @@ def get_parsed_search_tsquery(search_query: str) -> str:
3232
3333 @staticmethod
3434 def add_search_query_filters (
35- query , search_query , data_type , feed_id , status , is_official , features , version
35+ query , search_query , data_type , feed_id , status , is_official , features , version , license_ids , license_is_spdx
3636 ) -> Query :
3737 """
3838 Add filters to the search query.
@@ -68,6 +68,19 @@ def add_search_query_filters(
6868 query = query .filter (
6969 t_feedsearch .c .document .op ("@@" )(SearchApiImpl .get_parsed_search_tsquery (search_query ))
7070 )
71+ if license_ids :
72+ license_ids_list = [lid .strip () for lid in license_ids .split ("," ) if len (lid .strip ()) > 0 ]
73+ if len (license_ids_list ) > 0 :
74+ query = query .where (t_feedsearch .c .license_id .in_ (license_ids_list ))
75+
76+ if license_is_spdx is not None :
77+ if license_is_spdx :
78+ query = query .where (t_feedsearch .c .license_is_spdx .is_ (True ))
79+ else :
80+ query = query .where (
81+ or_ (t_feedsearch .c .license_is_spdx .is_ (False ), t_feedsearch .c .license_is_spdx .is_ (None ))
82+ )
83+
7184 # Add feature filter with OR logic
7285 if features :
7386 features_list = [s .strip () for s in features [0 ].split ("," ) if s ]
@@ -86,13 +99,24 @@ def create_count_search_query(
8699 features ,
87100 version : str ,
88101 search_query : str ,
102+ license_ids : str ,
103+ license_is_spdx : bool ,
89104 ) -> Query :
90105 """
91106 Create a search query for the database.
92107 """
93108 query = select (func .count (t_feedsearch .c .feed_id ))
94109 return SearchApiImpl .add_search_query_filters (
95- query , search_query , data_type , feed_id , status , is_official , features , version
110+ query ,
111+ search_query ,
112+ data_type ,
113+ feed_id ,
114+ status ,
115+ is_official ,
116+ features ,
117+ version ,
118+ license_ids ,
119+ license_is_spdx ,
96120 )
97121
98122 @staticmethod
@@ -104,6 +128,8 @@ def create_search_query(
104128 search_query : str ,
105129 features : List [str ],
106130 version : str ,
131+ license_ids : str ,
132+ license_is_spdx : bool ,
107133 ) -> Query :
108134 """
109135 Create a search query for the database.
@@ -117,7 +143,16 @@ def create_search_query(
117143 * feed_search_columns ,
118144 )
119145 query = SearchApiImpl .add_search_query_filters (
120- query , search_query , data_type , feed_id , status , is_official , features , version
146+ query ,
147+ search_query ,
148+ data_type ,
149+ feed_id ,
150+ status ,
151+ is_official ,
152+ features ,
153+ version ,
154+ license_ids ,
155+ license_is_spdx ,
121156 )
122157 # If search query is provided, use it as secondary sort after timestamp
123158 if search_query and len (search_query .strip ()) > 0 :
@@ -140,10 +175,14 @@ def search_feeds(
140175 version : str ,
141176 search_query : str ,
142177 feature : List [str ],
178+ license_ids : str ,
179+ license_is_spdx : bool ,
143180 db_session : "Session" ,
144181 ) -> SearchFeeds200Response :
145182 """Search feeds using full-text search on feed, location and provider's information."""
146- query = self .create_search_query (status , feed_id , data_type , is_official , search_query , feature , version )
183+ query = self .create_search_query (
184+ status , feed_id , data_type , is_official , search_query , feature , version , license_ids , license_is_spdx
185+ )
147186 feed_rows = Database ().select (
148187 session = db_session ,
149188 query = query ,
@@ -153,7 +192,7 @@ def search_feeds(
153192 feed_total_count = Database ().select (
154193 session = db_session ,
155194 query = self .create_count_search_query (
156- status , feed_id , data_type , is_official , feature , version , search_query
195+ status , feed_id , data_type , is_official , feature , version , search_query , license_ids , license_is_spdx
157196 ),
158197 )
159198 if feed_rows is None or feed_total_count is None :
0 commit comments