@@ -85,7 +85,7 @@ def search_packages():
85
85
if sorted_by .lower () in parameters .keys ()
86
86
else "name"
87
87
)
88
- page = int (page ) if page else 0
88
+ page = int_validation (page , 0 )
89
89
query = unquote (query .strip ().lower ())
90
90
packages_per_page = 10
91
91
@@ -118,7 +118,7 @@ def search_packages():
118
118
"updated_at" : 1 ,
119
119
},
120
120
)
121
- .sort (sorted_by , - 1 )
121
+ .sort (sorted_by , sort )
122
122
.limit (packages_per_page )
123
123
.skip (page * packages_per_page )
124
124
)
@@ -152,6 +152,89 @@ def search_packages():
152
152
404 ,
153
153
)
154
154
155
+ def int_validation (param ,default_value ):
156
+ try :
157
+ return int (param )
158
+ except :
159
+ return default_value
160
+
161
+ @app .route ("/packages_cli" , methods = ["GET" ])
162
+ @swag_from ("documentation/search_packages_cli.yaml" , methods = ["GET" ])
163
+ def search_packages_cli ():
164
+ query = request .args .get ("query" )
165
+ page = request .args .get ("page" )
166
+ license = request .args .get ("license" )
167
+ namespace = request .args .get ("namespace" )
168
+ package = request .args .get ("package" )
169
+ packages_per_page = request .args .get ("limit" )
170
+ sorted_by = request .args .get ("sorted_by" )
171
+ sort = request .args .get ("sort" )
172
+ sorted_by = sorted_by .lower () if sorted_by else "name"
173
+ query = query if query else "fortran"
174
+ sort = - 1 if sort == "desc" else 1
175
+ sorted_by = (
176
+ parameters [sorted_by .lower ()]
177
+ if sorted_by .lower () in parameters .keys ()
178
+ else "name"
179
+ )
180
+ query = unquote (query .strip ().lower ())
181
+ page = int_validation (page ,0 )- 1
182
+ packages_per_page = int_validation (packages_per_page ,10 )
183
+
184
+ conditions = [
185
+ {"namespace_name" : {"$regex" : namespace , "$options" : "i" }} if namespace else None ,
186
+ {"license" : {"$regex" : license , "$options" : "i" }} if license else None ,
187
+ {"name" : {"$regex" : package , "$options" : "i" }} if package else None ,
188
+ ]
189
+
190
+ mongo_db_query = {
191
+ "$and" : [
192
+ {
193
+ "$or" : [
194
+ {"registry_description" : {"$regex" : query , "$options" : "i" }},
195
+ {"description" : {"$regex" : query , "$options" : "i" }},
196
+ ]
197
+ },
198
+ {"is_deprecated" : False },
199
+ ]
200
+ }
201
+ mongo_db_query ["$and" ].extend (cond for cond in conditions if cond )
202
+ total_documents = db .packages .count_documents (mongo_db_query )
203
+
204
+ packages_per_page = total_documents if packages_per_page > total_documents else packages_per_page
205
+
206
+ packages = (
207
+ db .packages .find (mongo_db_query )
208
+ .sort (sorted_by , sort )
209
+ .limit (packages_per_page )
210
+ .skip (page * packages_per_page )
211
+ )
212
+
213
+ if packages :
214
+ total_pages = math .ceil (total_documents / packages_per_page )
215
+
216
+ search_packages = []
217
+ for i in packages :
218
+ package_obj = Package .from_json (i )
219
+
220
+ search_packages .append ({
221
+ "name" : package_obj .name ,
222
+ "namespace" : package_obj .namespace_name ,
223
+ "description" : package_obj .description ,
224
+ "version" : package_obj .versions [- 1 ].version ,
225
+ })
226
+ return (
227
+ jsonify (
228
+ {"code" : 200 , "packages" : search_packages , "total_pages" : total_pages }
229
+ ),
230
+ 200 ,
231
+ )
232
+ else :
233
+ return (
234
+ jsonify ({"status" : "error" , "message" : "packages not found" , "code" : 404 }),
235
+ 404 ,
236
+ )
237
+
155
238
156
239
@app .route ("/packages" , methods = ["POST" ])
157
240
@swag_from ("documentation/package_upload.yaml" , methods = ["POST" ])
0 commit comments