From 00d68a65cdd39c22335a5df3bc65a1485d24b482 Mon Sep 17 00:00:00 2001 From: Henil Panchal Date: Mon, 27 May 2024 20:08:34 +0530 Subject: [PATCH 1/3] add: search for CLI --- backend/packages.py | 86 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 2 deletions(-) diff --git a/backend/packages.py b/backend/packages.py index 07e39c52..02c17c16 100644 --- a/backend/packages.py +++ b/backend/packages.py @@ -85,7 +85,7 @@ def search_packages(): if sorted_by.lower() in parameters.keys() else "name" ) - page = int(page) if page else 0 + page = int_validation(page,0) query = unquote(query.strip().lower()) packages_per_page = 10 @@ -118,7 +118,7 @@ def search_packages(): "updated_at": 1, }, ) - .sort(sorted_by, -1) + .sort(sorted_by, sort) .limit(packages_per_page) .skip(page * packages_per_page) ) @@ -152,6 +152,88 @@ def search_packages(): 404, ) +def int_validation(param,default_value): + try: + return int(param) + except: + return default_value + +@app.route("/packages_cli", methods=["GET"]) +@swag_from("documentation/search_packages_cli.yaml", methods=["GET"]) +def search_packages_cli(): + query = request.args.get("query") + page = request.args.get("page") + license = request.args.get("license") + namespace = request.args.get("namespace") + package = request.args.get("package") + packages_per_page = request.args.get("limit") + sorted_by = request.args.get("sorted_by") + sort = request.args.get("sort") + sorted_by = sorted_by.lower() if sorted_by else "name" + query = query if query else "fortran" + sort = -1 if sort == "desc" else 1 + sorted_by = ( + parameters[sorted_by.lower()] + if sorted_by.lower() in parameters.keys() + else "name" + ) + query = unquote(query.strip().lower()) + page = int_validation(page,0)-1 + packages_per_page = int_validation(packages_per_page,10) + + conditions = [ + {"namespace_name": {"$regex": namespace}} if namespace else None, + {"license": {"$regex": license}} if license else None, + {"name": {"$regex": package}} if package else None, + ] + + mongo_db_query = { + "$and": [ + { + "$or": [ + {"registry_description": {"$regex": query}}, + {"description": {"$regex": query}}, + ] + }, + {"is_deprecated": False}, + ] + } + mongo_db_query["$and"].extend(cond for cond in conditions if cond) + total_documents = db.packages.count_documents(mongo_db_query) + + packages_per_page = total_documents if packages_per_page > total_documents else packages_per_page + + packages = ( + db.packages.find(mongo_db_query) + .sort(sorted_by, sort) + .limit(packages_per_page) + .skip(page * packages_per_page) + ) + + if packages: + total_pages = math.ceil(total_documents / packages_per_page) + + search_packages = [] + for i in packages: + package_obj = Package.from_json(i) + + search_packages.append({ + "name": package_obj.name, + "namespace": package_obj.namespace_name, + "description": package_obj.description, + }) + return ( + jsonify( + {"code": 200, "packages": search_packages, "total_pages": total_pages} + ), + 200, + ) + else: + return ( + jsonify({"status": "error", "message": "packages not found", "code": 404}), + 404, + ) + @app.route("/packages", methods=["POST"]) @swag_from("documentation/package_upload.yaml", methods=["POST"]) From df1cc5ae5efd58f46f16b489e0cef84f4c7c6181 Mon Sep 17 00:00:00 2001 From: Henil Panchal Date: Tue, 28 May 2024 00:04:23 +0530 Subject: [PATCH 2/3] add: search for CLI --- backend/packages.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/packages.py b/backend/packages.py index 02c17c16..122bfcfd 100644 --- a/backend/packages.py +++ b/backend/packages.py @@ -182,17 +182,17 @@ def search_packages_cli(): packages_per_page = int_validation(packages_per_page,10) conditions = [ - {"namespace_name": {"$regex": namespace}} if namespace else None, - {"license": {"$regex": license}} if license else None, - {"name": {"$regex": package}} if package else None, + {"namespace_name": {"$regex": namespace, "$options": "i"}} if namespace else None, + {"license": {"$regex": license, "$options": "i"}} if license else None, + {"name": {"$regex": package, "$options": "i"}} if package else None, ] mongo_db_query = { "$and": [ { "$or": [ - {"registry_description": {"$regex": query}}, - {"description": {"$regex": query}}, + {"registry_description": {"$regex": query, "$options": "i"}}, + {"description": {"$regex": query, "$options": "i"}}, ] }, {"is_deprecated": False}, From 76bf1f477c54acfb8d9921149b55441597ac4638 Mon Sep 17 00:00:00 2001 From: Henil Panchal Date: Thu, 6 Jun 2024 11:05:05 +0530 Subject: [PATCH 3/3] add:version --- backend/packages.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/packages.py b/backend/packages.py index 122bfcfd..34edb0d4 100644 --- a/backend/packages.py +++ b/backend/packages.py @@ -221,6 +221,7 @@ def search_packages_cli(): "name": package_obj.name, "namespace": package_obj.namespace_name, "description": package_obj.description, + "version": package_obj.versions[-1].version, }) return ( jsonify(